旧图书馆,新的CocoaPods

coj*_*joj 4 objective-c ios cocoapods swift

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

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

source 'https://github.com/CocoaPods/Specs.git'
platform :ios, '8.0'

pod 'AFNetworking'
pod 'SwiftyJSON'
Run Code Online (Sandbox Code Playgroud)

并运行pod install像往常一样......你知道这个故事.但是当我打开我的.xcworkspace并且去任何ViewController并且import SwiftyJSON它只是工作但是当我尝试用AFNetworking做同样的事情时我得到了No such module 'AFNetworking'.当然,我可以创建一个Bridging-Header并使用Objective-C方式导入它但是当我阅读这篇博文时,我可以看到:

要在Swift中使用此子规范,而不使用生成的伞形头,您需要创建桥接头并使用类似导入#import <AFNetworking/AFNetworking+UIKit.h.使用生成的伞头,import AFNetworking如果你的Podfile中包含了subspec ,你只需要.

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

coj*_*joj 14

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

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

  1. 您手动创建YourProject-Bridging-Header.h#import那些库...这是在Swift集成之前使用的旧方法.
  2. use_frameworks!在你的内部包含了这个魔术方法调用Podfile.通过这样做,您可以强制CocoaPods创建框架而不是静态库.

现在,让我解释为什么你更喜欢第二种解决方案......正如OP所说,CocoaPods现在自动创建Umbrella Headers(了解它们).这是您跳过手动创建桥接头的便捷方式.

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