首页 > 解决方案 > 如何处理多模块 iOS Cocoapods 项目中的依赖关系?

问题描述

我目前正在使用 Cocoapods 构建一个多模块 iOS 项目,并面临依赖管理的挑战。我的产品结构如下:

app/
|-- SampleApp/
|-- Podfile
sdk/
|-- Module 1/
|-- Module 2/
|-- Module 3/
|-- Module 4/
|-- Module 5/

每个模块都有自己的 podspec 文件,其中使用特定版本描述依赖关系。一些模块依赖于其他模块,也被描述为依赖项,但没有版本,因为我总是想要最新的。

我在 Podfile 中这样描述项目:

platform :ios, '11.0'
use_frameworks!

workspace 'SampleAppWorkspace'
project 'SampleApp/SampleApp.xcodeproj'

target 'SampleApp' do
  use_frameworks!
  project 'SampleApp/SampleApp.xcodeproj'

  target 'SampleAppTests' do
    inherit! :search_paths
  end
  
  target 'SampleAppUITests' do
    inherit! :search_paths
  end
end

target 'Module 5' do
  use_frameworks!
  project '../sdk/Module 5/Module 5.xcodeproj'
end

target 'Module 4' do
  use_frameworks!
  project '../sdk/Module 4/Module 4.xcodeproj'

  target 'Module 4 Tests' do
  end
end

target 'Module 3' do
  use_frameworks!
  project '../sdk/Module 3/Module 3.xcodeproj'
end

target 'Module 2' do
  use_frameworks!
  project '../sdk/Module 2/Module 2.xcodeproj'

  target 'Module 2 Tests' do
  end
end

target 'Module 1' do
  use_frameworks!
  project '../sdk/Module 1/Module 1.xcodeproj'
end

当我在“pod install”之后打开工作区时,单个模块目标无法构建,因为找不到像“Alamofire”这样的依赖项。我还必须将依赖项添加到 Podfile 以使目标运行。

所以我的问题是,如何以正确的方式管理这些多模块依赖项。有没有最佳实践?我真的不想在每个 podspec 和 Podfile 中声明依赖项。最好的情况是每个模块都可以单独构建和测试,并且可以使用所有模块完全自动化地构建和测试工作区。因为我主要来自 Java 世界,所以我正在 Maven 中寻找类似 BOM(物料清单)导入的东西来进行依赖管理。

感谢您的任何帮助和建议。也许有一些很好的示例项目来看看它是如何正确完成的。我找到了 Google Firebase iOS SDK,但这个项目有点过于庞大和定制。那里的示例项目非常小。

标签: iosswiftcocoapods

解决方案


推荐阅读