Xcode 为什么我会得到一个未声明的类型';公共图书馆';Swift Cocoa应用程序和桥接头的编译器错误?
我正在启动一个新的Cocoa Swift项目,该项目通过CocoaPods将PubNub SDK与以下Podfile合并:Xcode 为什么我会得到一个未声明的类型';公共图书馆';Swift Cocoa应用程序和桥接头的编译器错误?,xcode,swift,cocoa,cocoapods,pubnub,Xcode,Swift,Cocoa,Cocoapods,Pubnub,我正在启动一个新的Cocoa Swift项目,该项目通过CocoaPods将PubNub SDK与以下Podfile合并: 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 在自动生成的桥接标头中,
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>
由于使用未声明类型PubNub时出现编译器错误,项目无法生成。我已经检查了构建设置,Swift编译器代码生成部分显示它指向目标的桥接头文件(自动填充)
导入外部框架时,使用Xcode 6.4和pods版本0.38.2无桥接头
直接从:
您可以导入具有纯Objective-C代码库、纯Swift代码库、或混合语言代码库的外部框架。[…]您可以使用以下语法将框架导入不同目标中的任何Swift文件中:
修理 添加
导入PubNub
框架
导入UIKit
导入PubNub
@UIApplicationMain
类AppDelegate:UIResponder、UIApplicationLegate{
变量窗口:UIWindow?
var客户机:PubNub?
// ...
}
通过单个导入
,PubNub
被声明,在Xcode编辑器中自动完成,编译、链接、构建和运行
分步Swift框架教程 因为下面的许多注释暗示总是需要桥接头,所以当使用外部框架时,就错了,
use\u框架就是这种情况在Podfile
中的code>指令,在这里找到一个纯Swift解决方案。接下来是一个Xcode
项目,您可以下载并体验它
在同一项目中使用Swift与Cocoa和Objective-C的概念中,章节混合与匹配,章节Swift和Objective-C中明确记录了导入外部框架的段落:
无论框架是用单一语言编写还是包含来自两种语言的文件,导入外部框架的过程都是相同的
Podfile
平台:ios,“8.0”
使用你的框架!
目标“SO-31642385”do
pod“PubNub”,“~>4.0”
吊舱“Alamofire”,“~>1.3”
结束
安装吊舱
]pod安装
下载依赖项
安装Alamofire(1.3.1)
安装CocoaLumberjack(2.0.0)
安装PubNub(4.0.4)
生成Pods项目
集成客户端项目
从现在起,请关闭所有当前的Xcode会话,并为此项目使用'SO-31642385.xcworkspace'。
导入框架
导入UIKit
导入PubNub
@UIApplicationMain
类AppDelegate:UIResponder、UIApplicationLegate{
变量窗口:UIWindow?
var客户机:PubNub?
func应用程序(u应用程序:ui应用程序,
didFinishLaunchingWithOptions启动选项:
[uiapplicationaunchoptionskey:Any]?)->Bool{
self.client=publinub()
返回真值
}
// ...
}
► 在上找到此解决方案,并在上找到其他详细信息。如果您正确使用桥接标头,则不需要此解决方案。请查看此项目:它不导入PubNub,因为它包含在桥接标头中。如果您需要更多关于如何工作的信息,请随时咨询苹果文档,总有更多信息需要学习。“此桥接头文件中列出的任何公共Objective-C头文件都将对Swift可见。Objective-C功能将在该目标内的任何Swift文件中自动提供,无需任何导入语句。使用自定义Objective-C代码,使用与系统类相同的Swift语法。“@ Guooj-请考虑把你的评论作为一个答案,这样我们就可以投票或Jim Hankins可以接受作为答案,这是另一种方式。”如果正确使用框架
,则不需要代码>桥接头Pubnub`是一个框架。它包含在use\u框架中代码>。只需添加import PubNub
并完全绕过桥接机制。请联系support@pubnub.com在这个问题上,我们可以为你提供更直接的帮助。我更喜欢直接与那些发布信息不足以回答的问题的人打交道。另外,这个Podfile没有遵循Ah中指定的语法,显然如果您包含“use_frameworks!”那么您就可以了,尽管它没有明确的文档记录
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
}
}
import FrameworkName