旧的图书馆,新的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:

  1. 你手动创buildYourProject-Bridging-Header.h#import这些库…这是甚至在Swift集成之前使用的旧方法。
  2. 你包含这个神奇的use_frameworks! 方法调用你的Podfile里面。 通过这样做,您可以强制CocoaPods创build框架而不是静态库。

现在,让我解释为什么你更喜欢第二个解决scheme…正如OP所说,CocoaPods现在自动创buildUmbrella Headers ( 了解它们 )。 这是您跳过手动创build桥接报头的便捷方式。

我在这里find了一个解决scheme,所以如果没有这个post,我可能仍然会为这个问题而苦苦挣扎。 为作者欢呼!