我有一个Xcode 7.3的工作空间,包含三个项目:App、FrameworkA和FrameworkB。每个项目都有一个目标。由于这是iOS,所以框架目标是Cocoa Touch Frameworks,也就是包含动态链接共享库的框架。
App依赖于Framework A,而Framework A又依赖于Framework B。这些依赖关系是有效的,因为A正确地链接到了B的构建产品,而App正确地链接并嵌入了两个框架A和B(因为你不能让一个框架嵌入另一个框架,所以似乎应用程序包需要链接并嵌入直接和传递的依赖项)。
但这是我的问题。框架A和B具有通常的构建配置,即Debug和Release。App有一个额外的构建配置LocalRelease,它由Run构建操作触发,并用于构建一个经过优化的构建(类似于Release),但使用开发者身份进行代码签名(类似于Debug)。
当我尝试使用此LocalRelease构建配置构建App时,这会破坏依赖关系,因为它会破坏对框架A和B的依赖关系。我相信这是因为这些框架没有LocalRelease构建配置,因此Xcode永远不会将它们的构建产品放入LocalRelease-iphoneos文件夹中,就像对待App一样。
因此,我的具体问题是,如何配置构建设置,使具有非标准构建配置名称(例如LocalRelease)的项目可以依赖使用仅标准构建配置名称的其他项目?我希望有一种简单的方法来做到这一点,而不需要添加脚本或xcconfig文件,但如果这些是必要的,我希望能理解为什么。
我的更广泛的问题是,引入额外的构建配置是否总体上是一个不好的主意,因为它们不允许在共享工作空间中的项目之间平稳交互的依赖关系?我之所以定义了这个第三个配置,是因为我想要一个经过优化的本地构建,我不想定义一个新的scheme,并且我希望构建类型的选择通过单个scheme的各种构建操作(运行、分析、发布)来表达。
但也许这并不是正确的做法。只要建立配置名称驱动构建产品目录路径,并且依赖项目需要在共享目录中找到彼此的构建产品,似乎引入非标准的构建配置名称到项目中将会破坏与依赖项目之间的互操作性。