旧图书馆,新的CocoaPods

时间:2015-01-12 18:54:36

标签: ios objective-c swift cocoapods

因为 CocoaPods 0.36 可以被任何人使用,他们现在正在使用Swift和Frameworks支持我今天有一个问题困扰着我...

我在项目目录中创建Podfile,填写:

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'。当然,我可以创建一个 Bridging-Header 并使用Objective-C方式导入它,但是当我阅读this博文时,我可以看到:

  

要在Swift中使用此子规范,而不使用生成的伞状头,您   需要创建一个桥接头并使用像#import <AFNetworking/AFNetworking+UIKit.h这样的导入。随着生成的伞   标题,如果你有子规则,你只需要import AFNetworking   包含在你的Podfile中。

如果我错了,请纠正我,但我想如果我们使用CocoaPods添加库,则不再需要手动Bridging-Header,对吧?那么,为什么这不起作用?

1 个答案:

答案 0 :(得分:13)

正如我想的那样......我在OP中提供的这个例子是不正确的...好吧,基本上它是正确的,因为它的工作方式应该如此。让我告诉你一个反例。

我有一个Swift项目,但我只想使用Objective-C pods(AFNetworking,SSPullToRefresh等)。现在我们遇到了一些麻烦,因为当您在Podfile中提供这些Objective-C pod时,它们将作为静态库添加到Pods目标中。您现在可能已经将CocoaPods切换为框架(如果您想了解其中的差异,请阅读this问题)。回到主题......这种冲突的有两种可能的解决方案:

  1. 您手动创建YourProject-Bridging-Header.h#import这些库......这是在Swift集成之前使用的旧方法。
  2. 您在use_frameworks!内加入了这个神奇的Podfile方法调用。通过这样做,您可以强制CocoaPods创建框架而不是静态库。
  3. 现在,让我解释为什么你更喜欢第二种解决方案......正如OP所述,CocoaPods现在自动创建伞形接头learn about them)。这是您跳过手动创建桥接头的便捷方式。

    我找到了一个解决方案here所以如果没有这篇文章,我可能仍然在努力解决这个问题。为作者干杯!