我正在创建一个新的 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
然后开始编码。
在我在单 View 项目中使用 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 上挖掘他们的问题时,我发现了一些对此的引用:
We don't really support integrating Pods into framework targets...
-neonichu on Nov 4, 2015
和
...in order for this to "just work", CP would need to do a recursive analysis of dependencies in your Xcode project and also somehow ensure that you would never use the build product in another context.
-neonichu on Jul 7, 2015
到目前为止,我找到了两种方法来处理这个问题:
正确的方法 是为您的框架创建一个新的 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
关于ios - 我可以在创建 Cocoa Touch Framework 时使用 CocoaPods 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35927109/