繁体   English   中英

旧图书馆,新的CocoaPods

[英]Old libraries, new 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方式导入它但是当我阅读这篇博文时,我可以看到:

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

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

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM