一尘不染

创建Cocoa Touch框架时可以使用CocoaPods吗?

swift

我正在创建一个新的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的菜鸟,所以如果您需要我提供更多信息,请告诉我。

谢谢!


阅读 235

收藏
2020-07-07

共1个答案

一尘不染

不幸的是,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
2020-07-07