Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xcode 为什么我会得到一个未声明的类型';公共图书馆';Swift Cocoa应用程序和桥接头的编译器错误?_Xcode_Swift_Cocoa_Cocoapods_Pubnub - Fatal编程技术网

Xcode 为什么我会得到一个未声明的类型';公共图书馆';Swift Cocoa应用程序和桥接头的编译器错误?

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 在自动生成的桥接标头中,

我正在启动一个新的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
在自动生成的桥接标头中,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