旧的图书馆,新的cocoa豆
因为CocoaPods 0.36对任何人都是可用的,他们现在提供Swift和Frameworks支持,所以今天有一个问题困扰着我…
我在我的项目目录中创buildPodfile
,填入:
source 'https://github.com/CocoaPods/Specs.git' platform :ios, '8.0' pod 'AFNetworking' pod 'SwiftyJSON'
像平常一样运行pod install
…你知道这个故事。 但是,当我打开我的.xcworkspace
并去任何ViewController和import SwiftyJSON
它只是工作,但是当我尝试做AFNetworking同样的事情,我得到No such module 'AFNetworking'
。 当然,我可以创build一个Bridging-Header并用Objective-C方式导入它,但是当我阅读这篇博文时,我可以看到:
要在Swift中使用这个subspec,没有生成的伞头,你需要创build一个桥接头,并使用像
#import <AFNetworking/AFNetworking+UIKit.h
。 使用生成的伞标题,只需要import AFNetworking
,如果你的Podfile中包含subspec。
纠正我,如果我错了,但我想如果我们用CocoaPods添加库不再需要手动Bridging-Header,对吧? 那么,为什么这不起作用?
正如我以为…我在OP中提供的这个例子是不正确的…嗯,基本上是正确的,因为它的工作就像它应该。 让我给你展示一个反例。
我有一个Swift项目,但我只想使用Objective-C豆荚(AFNetworking,SSPullToRefresh等)。 现在我们遇到了一些麻烦,因为在Podfile
提供这些Objective-C窗格时,它们将作为静态库添加到窗格目标中。 你现在可能现在CocoaPods正在切换到框架 (如果你想知道差异,请阅读这个问题)。 返回主题…这个冲突有两种可能的解决scheme:
- 你手动创build
YourProject-Bridging-Header.h
和#import
这些库…这是甚至在Swift集成之前使用的旧方法。 - 你包含这个神奇的
use_frameworks!
方法调用你的Podfile
里面。 通过这样做,您可以强制CocoaPods创build框架而不是静态库。
现在,让我解释为什么你更喜欢第二个解决scheme…正如OP所说,CocoaPods现在自动创buildUmbrella Headers ( 了解它们 )。 这是您跳过手动创build桥接报头的便捷方式。
我在这里find了一个解决scheme,所以如果没有这个post,我可能仍然会为这个问题而苦苦挣扎。 为作者欢呼!