我编写了一个框架,我喜欢将框架划分为小的独立子模块(目标)。 Apple 为我想用 CocoaPods 实现的目标提供了一个很酷的描述:
Targets are the basic building blocks of a package. A target can define a module or a test suite. Targets can depend on other targets in this package, and on products in packages which this package depends on.
我可以使用 Swift 包管理器轻松做到这一点:
targets: [
.target(name: "Network"),
.target(name: "Service", dependencies: ["Network"])
],
我可以使用
import Network
在 Service
target 很酷,因为它们是独立的模块,逻辑清晰。如何在 CocoaPods 和 Carthage 中实现(我写的是框架,不是最终的应用程序)?
我试过的:
子规范
我尝试使用 subspecs :
s.subspec 'Service' do |ss|
ss.dependency 'MyFramework/Network'
ss.source_files = 'Sources/Service/**/*.swift'
end
s.subspec 'Network' do |ss|
ss.source_files = 'Sources/Network/**/*.swift'
end
它不能按我的意愿工作,因为 CocoaPods 只是将所有文件合并到一个框架中(只是将其划分为单独的文件夹),所以:
import Network
时出现 fatal error 里面 Service
因为没有Network
pod install
之后的目标.所以我不能将那个框架与 Swift 包管理器一起使用。 CocoaPods 只是将所有内容合并到一个目标 MyFramework
正如我之前提到的。 单独的 repos/pods
这是解决方案,但很难维护多个单独的 git 存储库并进行单独的提交和推送。我想将所有内容保存在一个仓库中。
最佳答案
我很确定 CocoaPods 没有能力为一个 podspec 创建单独的目标。
正如您上面提到的,您可以创建单独的 podspec,但在一个存储库中,如 RxSwift .然后,在您进行开发时,您可以使用一些包含所有 podspecs 的示例项目。您不需要管理不同的存储库。
此外,您可以尝试使用不同的模块创建模块映射,例如:
framework module Something {
framework module Core { ... }
framework module Toolbox { ... }
...
}
然后在 podspec 中分配它,例如:Pod::Spec.new do |s|
s.module_map = "#{s.name}/#{s.name}.modulemap"
...
但我不确定。我只尝试了第一种方法,如 RxSwift
存储库。
关于ios - 如何在具有多个目标的 CocoaPods 中制作框架?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58540821/