2015-01-12 114 views
4

因为的CocoaPods 0.36是availbable任何人,而现在他们正在与雨燕和框架来支持我有一个疑问,今天困扰着我......老图书馆,新的CocoaPods

我在我的项目目录中创建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'。当然,我可以创造一个桥接报头,并与Objective-C的方式导入,但是当我读到this博客文章中,我可以看到:

要使用此subspec斯威夫特,没有产生伞头,你需要创建一个桥接头并使用像#import <AFNetworking/AFNetworking+UIKit.h这样的导入。使用生成的伞 标题,只需要import AFNetworking,如果您的Podfile中包含子类别 。

纠正我,如果我错了,但我想如果我们添加库与CocoaPods不再需要手动桥接头,对吧?那么,为什么这不起作用?

回答

13

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

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

  1. 您手动创建YourProject-Bridging-Header.h#import这些图书馆......这甚至斯威夫特整合之前使用的老办法。
  2. 在您的Podfile中包含此魔术use_frameworks!方法调用。通过这样做,你可以强制CocoaPods创建框架而不是静态库。

现在,让我解释一下为什么你会倾向于第二种方案......作为OP状态,现在的CocoaPods自动创建伞头learn about them)。这是您跳过手动创建桥接报头的便捷方式。

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

+0

从您阅读该文档,您是否看到使用cocoapods自动生成的伞文件作为您在* Obj-c *项目中使用的首选方法的方法? IE浏览器。配置cocoapods生成桥接报头为'AFNetworking.h'而不是'Pods-iOS Example-AFNetworking-umbrella.h',这样它就会始终跟踪公共报头集合 - 一个“单一事实点”?从我的阅读中,它仅用于Swift代码的可见性。 –

+0

雨伞头部是为Swift创建的。因此,没有必要将它用于Objective-C项目...为什么你会这样?我只是在混合项目中挣扎,我写的主要语言是Swift,而一些Pods可以是Objective-C库。 – cojoj

+0

伞形文件是一个与框架有关的概念,并且fameworks也是Obj-c的新成员。伞文件只是框架中所有公共头文件的总结,并且是'#import '中的'MyFramework.h'。在引擎盖下,cocoapods生成一个新的唯一命名的伞文件,并将其注册到模块映射中,以便通过“@import MyFramework”使其可用。这个命名和约定是https://github.com/CocoaPods/CocoaPods/issues/3092中讨论的主题。这就是Swfit和Obj-c代码如何找到Obj-c符号。 –