在Xcode 4工作区中,如何级联生成设置&;配置子项目 概述

在Xcode 4工作区中,如何级联生成设置&;配置子项目 概述,xcode,xcode4,xcodebuild,Xcode,Xcode4,Xcodebuild,我正在使用静态库和Xcode 4工作区来实现iOS开发中的模块化,这是一种越来越常见的技术。例如,我可能有一个包含应用程序项目和库项目的工作区,如so1: 然后,您将有一个方案来构建类似以下内容的内容: 我想做的是让“应用程序构建”控制它启动的“库构建”,至少有两种方式: 将应用程序配置(例如调试、临时)映射到任意库配置 传递-D定义的某些子集,和/或为库构建指定这些定义 我将在它们各自的部分中处理每一个问题,但值得做一些澄清 澄清 我在这里使用App/Library作为任何超级项目/

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

然后,您将有一个方案来构建类似以下内容的内容:

我想做的是让“应用程序构建”控制它启动的“库构建”,至少有两种方式:

  • 将应用程序配置(例如调试、临时)映射到任意库配置

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

  • 我将在它们各自的部分中处理每一个问题,但值得做一些澄清

    澄清
    • 我在这里使用App/Library作为任何超级项目/子项目关系的简单代理

    • 据我所见,Xcode 3风格的嵌入式子项目在Xcode 4中的工作方式似乎与工作区“对等”没有任何不同。我很想在这件事上犯错

    • 我知道我几乎可以用“运行构建脚本”构建阶段和xcodebuild做任何事情。但是我试图在这里的系统中工作,在这个系统中,依赖项在方案中被指定,或者有些松散耦合

    • 该库的存在不仅仅是为了用于此项目,因此您不能随意将其加载为此应用程序的构建特定的垃圾,也不能引用任何特定于该应用程序或工作区的内容。对于一般情况,这排除了将应用程序项目中的static.xcconfig作为将构建信息从应用程序传递到库的方法

    • 在工作区之外构建库牺牲太多,而不是一个选项

    配置映射 据我所知,构建特定的应用程序配置将:

  • 如果库中存在同名的配置,它将使用该配置构建库
  • 否则,它将按照库的项目文件中的指定,构建库的活动配置
  • 据我所知,不必求助于前面提到的运行构建脚本hack,这就是对子项目构建配置的控制程度。请告诉我不同的

    理想情况下,我可以指定(大概在方案中):

    虽然Debug、AdHoc和Release可能是一些人曾经使用过的唯一配置,但复杂的项目往往无法满足这一需求

    定义 我还没有找到将-D定义从应用程序构建传递到库的方法,而不使用xcodebuild,它可以使用一个.xconfig文件

    可以在库生成运行生成脚本阶段访问应用程序的生成设置。但是,这样做会在库中引入对应用程序项目的依赖,这是有充分理由的verboten(参见澄清)。但即便如此,我还没有找到一种方法来使用这些设置直接控制库的构建(much2)

    太疯狂了,可能。。。 我在写这篇文章时提出的一个方案是:

  • 库将其构建配置建立在它自己的项目中的空(虚拟)
    LibraryExternals.xcconfig
    文件上

  • 清除库将删除该文件。如果库的独立版本尚不存在,则将创建一个空版本

  • 该文件被应用程序构建运行构建脚本阶段覆盖,并包含应用程序希望与库构建通信的任何内容

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


    1显示的应用程序是Max OS X。我发现命令行应用程序有助于简化测试。这同样适用


    2 Cf.Info.plist preprocessing,这是我在本次调查中了解到的。

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

    非常重要的问题,我找不到方法来实现这一点。甚至连传递环境变量似乎都无法使用预构建操作。目标是多个项目,然后可以将这些项目作为模块、实例或实例放在一起。随着代码库和/或团队规模的增加,这一点变得越来越理想。然后我不相信Xcode提供了一种实现您所需的方法,因此您最好的选择可能是使用自定义构建脚本。对不起,我帮不上忙了。
    AppConfigA -> LibConfig1
    AppConfigB -> LibConfig2