我可以在创建 Cocoa Touch Framework 时使用 CocoaPods 吗?

Can I use CocoaPods when creating a Cocoa Touch Framework?

我正在创建一个新的 Cocoa 触控框架 (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:

上挖掘他们的问题时,我发现了一些对此的引用

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 开发人员推荐的解决方案。

简单的方法 是将框架中的 pods 包含在主项目中。这似乎可行,但坦率地说,我不知道为什么。这是我的测试项目的 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

尝试在框架的 podspec 中添加对 Alamofire 的依赖,如下所示

Pod::Spec.new do |s|

# Other setup 

# Dependencies
s.dependency "Alamofire"
# Other dependencies if any