如何使用不同的构建配置设置Xcode项目依赖项?

时间:2016-05-07 16:28:01

标签: xcode xcode7 buildconfiguration cocoa-touch

我有一个Xcode 7.3工作区,包含三个项目,App,FrameworkA和FrameworkB。每个项目都有一个目标。这是iOS,因此框架目标是Cocoa Touch Frameworks,这意味着包含动态链接共享库的框架。

应用程序依赖于框架A,它依赖于框架B.这些依赖关系正常工作,只要A正确链接到B的构建产品,并且应用程序正确链接并嵌入框架A和B(因为你不能有一个框架嵌入另一个,似乎应用程序包需要链接和嵌入直接和传递依赖。)

但这是我的问题。框架A和B具有通常的构建配置,即调试和发布。 App有一个额外的构建配置LocalRelease,它由Run构建操作触发,用于构建优化的构建(如Release),但代码用开发者身份(如Debug)签名。

当我尝试使用此LocalRelease构建配置构建App时,这打破了构建,因为它打破了框架A和B的依赖性。我相信这是因为这些框架没有LocalRelease构建配置,所以Xcode从不放置它们的构建产品进入LocalRelease-iphoneos文件夹,就像App一样。

所以我的狭隘问题是,如何配置构建设置,以便具有非标准构建配置名称的项目(如LocalRelease)可以依赖于仅使用标准构建配置名称的其他项目?我希望有一个简单的方法可以做到这一点,不需要添加脚本或xcconfig文件,但如果有必要,我很乐意理解为什么。

我更广泛的问题是,引入其他构建配置一般是个坏主意,因为它们不允许共享工作区中项目之间依赖项的平滑交互?我被引导定义第三个配置,因为我想要一个优化的本地构建,我不想定义一个新的方案,我希望构建类型的选择由各种构建操作(运行,配置文件,发布)表示一个方案。

但也许这是错误的做法。只要构建配置名称驱动构建产品目录路径,并且依赖项目需要在共享目录中找到彼此的构建产品,似乎向项目引入非标准构建配置名称将破坏与之的互操作依赖于其他项目。

2 个答案:

答案 0 :(得分:3)

我向Apple提出了关于此问题的开发者技术支持票,并与WWDC的Xcode工程师进行了交谈。

回答我自己的问题

  

如何配置构建设置,以便具有非标准构建配置名称(如LocalRelease)的项目可以依赖于仅使用标准构建配置名称的其他项目?

答案:无法完成。

  

引入其他构建配置通常是个坏主意,因为它们不允许共享工作区中项目之间依赖项的平滑交互吗?

答案:是的,这是一个坏主意。

因此,创建一个新的命名构建配置并不是我想要做的事情的明智方法。不幸的是,似乎“最简单”的解决方案是接受xcconfig文件并手动更改配置文件以用于此类事情。

答案 1 :(得分:1)

在Xcode 11中,如果在项目依赖项中未找到相应的配置,则构建系统会退回到设置下的设置在项目配置下使用{configuration here}进行命令行构建

Xcode settings UI

清洁,构建然后检查我的内置产品目录显示,该依赖关系仅针对所选配置构建。