在Xcode 4工作区中,如何级联构建设置&配置子项目

时间:2011-12-14 17:58:51

标签: xcode xcode4 xcodebuild

概述

我正在使用静态库和Xcode 4工作区来实现iOS开发中的模块化,这是一种越来越常见的技术。例如,我可能有一个包含App项目的工作区和一个Library项目,如 1

Workspace with App & Library

然后你会有一个方案来构建这些看起来像这样的东西:

Scheme

我想做的是让“App build”控制它启动的“Library build”,至少有两种方式:

  1. 将应用配置(例如Debug,AdHoc)映射到任意库配置

  2. 传递-D的某些子集定义,和/或为库构建指定这些。

  3. 我将在他们自己的章节中处理每一个问题,但值得做一些澄清。

    澄清

    • 我在这里使用App / Library作为您可能拥有的任何Superproject / Subproject关系的简单代理。

    • 从我所看到的情况来看,Xcode 3样式嵌入式子项目在Xcode 4中的工作效果似乎与工作区“同行”不同。我喜欢这个错误。

    • 我知道我几乎可以使用“运行构建脚本”构建阶段和xcodebuild做任何事情。但我正在尝试在这里的系统中工作,其中依赖项在方案中指定,否则在某种程度上松散耦合。

    • 该库不仅仅用于此项目,因此您不能随意使用特定于此App构建的垃圾加载它,或者引用App或Workspace特有的任何内容。对于一般情况,这将包括来自App项目的静态.xcconfig,作为将构建信息从App传送到库的方式。

    • 在工作区外建立图书馆会造成太多牺牲,而不是一种选择。

    配置映射

    据我了解,构建特定的App配置将:

    1. 如果同名库中存在配置,则会使用该配置构建库。
    2. 否则,它将构建库的活动配置,如库的项目文件中所指定。
    3. 据我所知,不依赖于前面提到的run-build-script hack,就是对子项目构建配置的控制程度。请告诉我不同​​的。

      理想情况下,我可以指定(在计划中,大概是):

      AppConfigA -> LibConfig1
      AppConfigB -> LibConfig2
      

      Debug,AdHoc和&发布可能是一些有史以来使用的唯一配置,复杂的项目往往会不再适用。

      定义

      我还没有找到将-D定义从App构建传递到库的方法,而不需要使用xcodebuild,它可以采用例如.xcconfig文件。

      可以在Library build run-build-script阶段访问App的构建设置。但是,这样做会在App项目的库中引入依赖关系,这有充分的理由是禁止的(参见Clarifying)。但即便如此,我还没有找到一种方法来使用这些设置直接控制Library的构建(多 2 )。

      这太疯狂了......

      我写这篇文章时提出的一个方案是:

      1. 图书馆将其构建配置基于其自己的项目中的空(虚拟)LibraryExternals.xcconfig文件。

      2. 清理库会删除该文件。如果库尚未存在,则库的独立构建将创建一个空库。

      3. 该文件被App Build运行构建脚本阶段覆盖,并包含应用程序想要与库构建进行通信的任何内容。

      4. 看起来有点复杂,但我现在正在寻找任何东西。如果没有更好的结果,我会把这个推到一个答案。


        1 显示的应用程序是Max OS X.我发现命令行应用程序可以进行更简单的测试。同样适用。

        2 参见Info.plist预处理,我在调查期间了解到了这一点。

1 个答案:

答案 0 :(得分:0)

如果修改项目结构以使用具有多个目标的单个项目,则每个目标的构建设置将自动从项目继承。从那里,您可以修改想要不同的设置,或者选择单个设置并按删除键将其设置为项目指定的默认设置。