我正在创建一个新的Cocoa Touch框架(MyFramework.framework),该框架将依赖Alamofire。该框架将用Swift编写。作为测试,我开始了一个新的Cocoa Touch Framework项目:
File > New > Project > Framework & Library > Cocoa Touch Framework
然后,在终端中,我执行了:
pod init
在此项目目录下。在新创建的Podfile中,我添加了以下内容:
source 'https://github.com/CocoaPods/Specs.git' # Uncomment this line to define a global platform for your project platform :ios, '8.0' # Uncomment this line if you're using Swift use_frameworks! pod 'Alamofire', '~> 3.0'
再次,在终端中,我执行了:
pod install
并开始编码。
在我在单视图项目中使用MyFramework.framework产品之前,一切似乎都很好。当我尝试运行项目时,出现以下问题:
dyld: Library not loaded: @rpath/Alamofire.framework/Alamofire Referenced from: /Users/me/Library/Developer/CoreSimulator/Devices/87DA70B6-49BF-441E-BD81-F4A80B0792CF/data/Containers/Bundle/Application/2E414EA8-7E54-4D71-9295-566D4FAAADE2/test.app/Frameworks/MyFramework.framework/MyFramework Reason: image not found
我认为Cocoa Touch Framework项目本质上是动态的,因此将包括所有依赖项。
谁能告诉我为什么会这样,以及我如何能够解决它?这是CocoaPods的问题,还是我缺少什么?
我是Stack Overflow的菜鸟,所以如果您需要我提供更多信息,请告诉我。
谢谢!
不幸的是,CocoaPods不支持与Cocoa Touch Framework目标一起使用。在GitHub上探讨问题时,我找到了一些参考资料:
我们真的不支持集成荚到框架的目标… - neonichu于2015年11月4日
和
…为了使其“正常工作”,CP将需要对Xcode项目中的依赖项进行递归分析,并以某种方式确保您永远不会在其他上下文中使用构建产品。 - neonichu于2015年7月7日
到目前为止,我已经找到了两种方法来解决此问题:
正确的方法 是为您的框架创建一个新的pod规范,并通过CocoaPods将其引入您的主项目中。这解决了CococaPods依赖图存在的所有问题,并且是CocoaPods开发人员推荐的解决方案。
简单的方法 是将框架中的pod包含在主项目中。这似乎可行,但坦率地说,我不知道为什么。这是我的测试项目中的Podfile:
platform :ios, '9.0' use_frameworks! def myfirstframework_pods pod 'Alamofire', '~> 3.0' end target 'MyApp' do pod 'SwiftKeychainWrapper', '~>1.0' myfirstframework_pods end target 'MyFirstFramework' do myfirstframework_pods end