将Xcode内容交换给许多客户的项目的最佳方法是什么?

Col*_*len 7 xcode xcconfig ios xcode4

我有一个相对较大的Xcode项目,可以生成一个应用程序.但是,我有很多客户/客户需要对所述应用程序进行深度定制和品牌化.这些配置包括不同的图形,一些不同的接口和实现,也许最重要的是.xcconfig文件.

我的Xcode项目有一个专用组,指向磁盘上特定客户端的自定义文件夹,因此通过打开Xcode项目和构建,您可以获得具有当前客户端自定义的单个应用程序的构建.要切换到另一个客户端,我会更改该组指向磁盘的位置.(我还更改并切换项目的"信息"窗格中的xcconfig"基于"设置以重新加载完整的xcconfig继承;只需更改包含一个或多个xcconfig文件的组就不会重新加载!)这对100有用+客户.每次需要为不同的客户端构建应用程序并确保xcconfig正确时,切换此文件夹有点单调乏味,但它确实有效.

现在我正在通过命令行自动构建,并遇到麻烦.将上述Xcode组指向不同的自定义文件夹的快速而肮脏的解决方案是将ProjectName.xcodeproj/project.pbxproj文件复制到该文件中ProjectName.xcodeproj/project-template.pbxproj并将其放置在该文件中,该文件可以被grepped并替换为所需自定义文件夹的名称和路径.然后,使用修改后的project-template.pbxproj临时覆盖project.pbxproj,并构建以获取正确的应用程序.

正如您可能已经观察到的那样,project.pbxproj被复制和修改,因此当开发人员修改原始文件并忘记更新模板时,它将不同步.此外,我不应该以这种方式搞乱pbxproj文件 - 这是Xcode的私有内容.

那么,是否有更好的方法可以在构建阶段使用脚本或环境变量而不是在项目组级别告诉Xcode有关资源,代码和配置文件的文件夹?最复杂的一点似乎是xcconfig链,因为每个客户端都有自己的xcconfig文件,该文件继承自单个应用程序的Debug,Development和Distribution xcconfig文件.

对不起这个问题的冗长,但它有点复杂!任何建议将不胜感激!

gca*_*amp 2

我认为使用 Xcode 中的目标功能会更好。拥有一个项目以及该项目中每个客户的资源。

\n\n

然后,您可以复制已有的目标(通过在 Xcode 的项目导航器中选择项目文件,右键单击您的目标)。

\n\n

您的所有目标都将使用相同的代码进行编译。您只需更改“构建阶段”>\xc2\xa0Copy Bundle Resources 中的资源即可为每个目标创建不同的应用程序。无需查看 Xcode 的内部文件。

\n\n

您甚至可以通过在构建选项中添加预处理器宏(类似FIRST_CLIENT=1)来更改源文件中的代码,然后使用#if FIRST_CLIENT.

\n\n

我有一个这样的项目设置,它运行得很好:

\n\n

在此输入图像描述\n

\n