【发布时间】:2020-12-10 19:01:16
【问题描述】:
我编写了一个框架,我喜欢将框架划分为小的独立子模块(目标)。 Apple 为我想用 CocoaPods 实现的目标提供了一个很酷的描述:
目标是包的基本构建块。一个目标可以定义一个模块或一个测试套件。 目标可以依赖于此包中的其他目标,以及此包所依赖的包中的产品。
我可以使用 Swift 包管理器轻松做到这一点:
targets: [
.target(name: "Network"),
.target(name: "Service", dependencies: ["Network"])
],
我可以在Service 目标中使用import Network,这很酷,因为它们是独立的模块,逻辑清晰。
如何在 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 只是将所有文件合并到一个框架中(只是将其划分到单独的文件夹中),所以:
- 我收到命名空间冲突。
- 当我尝试在
Service中使用import Network时出现致命错误,因为在pod install之后没有Network目标。所以我不能将那个框架与 Swift 包管理器一起使用。正如我之前提到的,CocoaPods 只是将所有内容合并到一个目标MyFramework。
单独的 repos/pods
这是解决方案,但很难维护多个单独的 git 存储库并进行单独的提交和推送。我想把所有东西都放在一个仓库里。
【问题讨论】:
-
有什么理由不想将它们分开捆绑?那么,你可以有一个用于 Network 的 Pod,然后你会声明一个单独的 Service Pod,它本身会使用 Network 作为 Pod? :)
标签: ios swift cocoapods carthage swift-package-manager