我有一个包含多个项目的工作区。每个客户都有自己的项目,每个客户的项目依赖于
- 核心项目:带有通用代码的静态库
- 接口项目:具有通用接口的静态库,即UIViewController代码
Interface 库也依赖于 Core。
每个项目都有两个目标。正常目标和测试目标,所以,
- 核心,核心测试
- 接口,接口测试
- 客户,客户测试
由于目前该应用程序的各个方面都在大力开发,因此我将所有项目都放在同一个工作区和同一个存储库上,因为随时可能在结构的任何部分发生变化。
我想使用 CocoaPods 来管理项目所具有的依赖关系。为简单起见,假设我可以在每个测试目标上使用OCMock ,在每个普通目标上使用NewRelicAgent ,仅在核心目标上使用可达性。
Podfile 看起来像这样:
workspace 'CompanyWorkspace'
xcodeproj 'Core/Core.xcodeproj'
xcodeproj 'Interface/Interface.xcodeproj'
xcodeproj 'Customer/Customer.xcodeproj'
target :Core do
platform :ios, '6.0'
xcodeproj 'Core/Core.xcodeproj'
pod 'NewRelicAgent', '~> 5.1'
pod 'Reachability', '~> 3.2'
end
target :CoreTests do
platform :ios, '6.0'
xcodeproj 'Core/Core.xcodeproj'
pod 'OCMock', '~> 3.1'
end
target :Interface do
platform :ios, '6.0'
xcodeproj 'Interface/Interface.xcodeproj'
pod 'NewRelicAgent', '~> 5.1'
end
target :InterfaceTest do
platform :ios, '6.0'
xcodeproj 'Interface/Interface.xcodeproj'
pod 'OCMock', '~> 3.1'
end
target :Customer do
platform :ios, '7.0'
xcodeproj 'Customer/Customer.xcodeproj'
pod 'NewRelicAgent', '~> 5.1'
end
target :CustomerTests do
platform :ios, '7.0'
xcodeproj 'Customer/Customer.xcodeproj'
pod 'OCMock', '~> 3.1'
end
我通过将静态库 Core.a 添加到 Interface.a 的构建阶段并通过更改用户标头搜索路径以找到标头来解决了我的结构之间的依赖关系。在 Customer 项目中,我将 Core.a 和 Interface.a 添加到构建阶段并修改了User Header Search Paths,以便它从 Core 和 Interface 中找到代码。
这种方法的问题是 Core 和 Interface 构建了一个正确执行他们的测试,但是当我尝试构建 Customer.app 时,我得到了一些重复的符号错误。我相信这是因为 CocoaPods 中的 target 关键字会生成配置了依赖项的静态库,因此在构建 Customer 时,它会尝试包含来自 Core 的两倍代码。关于如何解决这个问题的任何想法?