target 'myProject' do source 'https://github.com/CocoaPods/Specs.git' use_frameworks! pod 'PubNub','~>4.0' pod 'Alamofire','~> 1.3' end target 'myProjectTests' do end
在我自动生成的桥接头我有PubNub的导入为:
#import <PubNub/PubNub.h>
和我的AppDelegate.swift文件:
import Cocoa
@NSApplicationMain
class AppDelegate: NSObject,NSApplicationDelegate {
var client:PubNub?
func applicationDidFinishLaunching(aNotification: NSNotification) {
let config = PNConfiguration( publishKey: "Your_Pub_Key",subscribeKey: "Your_Sub_Key")
client = PubNub.clientWithConfiguration(config)
client?.addListener(self)
client?.subscribetochannels(["Your_Channel"],withPresence: false)
client?.publish("Swift + PubNub!",tochannel: "demo",compressed: false,withCompletion: nil) }
func client(client: PubNub!,didReceiveMessage message: PNMessageResult!) {
println(message)
}
func applicationWillTerminate(aNotification: NSNotification) {
// Insert code here to tear down your application
}
}
由于使用未申报类型PubNub的编译器错误,项目无法构建.我检查了构建设置,Swift编译器 – 代码生成部分显示它指向目标的桥接头文件(自动填充).
使用Xcode 6.4和pods版本0.38.2
解决方法
从Apple Developer Documentation直:
You can import external frameworks that have a pure Objective-C codebase,a pure Swift codebase,or a mixed-language codebase. […] You can import a framework into any Swift file within a different target using the following Syntax:
import FrameworkName
固定
添加导入PubNub框架.
import UIKit
import PubNub
@UIApplicationMain
class AppDelegate: UIResponder,UIApplicationDelegate {
var window: UIWindow?
var client:PubNub?
// ...
}
通过单一导入,PubNub被声明,在Xcode编辑器中自动完成,编译,链接,构建和运行.
一步一步的Swift框架教程
由于以下许多评论意味着桥接头总是需要,所以当使用外部框架时,使用use_frameworks的情况是错误的!指令在Podfile中,在这里找到一个纯粹的Swift解决方案.接下来是一个可以下载和体验的Xcode项目.
在iOS Developer Library中明确记录,概念中使用Swift与可可和Objective-C,“混合和匹配”一章,同一项目中的Swift和Objective-C部分引入外部框架:
The process for importing an external framework is the same whether the framework is written in a single language or contains files from both languages.
Podfile
platform :ios,'8.0' use_frameworks! target 'SO-31642385' do pod 'PubNub','~> 1.3' end
安装pod
] pod install Downloading dependencies Installing Alamofire (1.3.1) Installing CocoaLumberjack (2.0.0) Installing PubNub (4.0.4) Generating Pods project Integrating client project Please close any current Xcode sessions and use `SO-31642385.xcworkspace` for this project from Now on.
导入框架
import UIKit
import PubNub
@UIApplicationMain
class AppDelegate: UIResponder,UIApplicationDelegate {
var window: UIWindow?
var client:PubNub?
func application(_ application: UIApplication,didFinishLaunchingWithOptions launchOptions:
[UIApplicationLaunchOptionsKey: Any]?) -> Bool {
self.client = PubNub()
return true
}
// ...
}
►在GitHub查找此解决方案,并在Swift Recipes上查看更多详细信息.