安装同一iOS应用程序的两个版本

安装同一iOS应用程序的两个版本,ios,branding,Ios,Branding,我正在开发一个iOS应用程序,应该为不同的客户打上品牌。目前的问题是,我需要同时安装两个版本的应用程序(一个带有橙色主题,另一个带有红色主题)。实现这一点的最佳方法是什么?您只需使用两个不同的包标识符即可。这可以在info.plist:CFBundleIdentifier中设置。 您可能需要设置使用不同版本info.plist的不同目标或方案。为同一项目设置两个不同的目标。然后,在每个目标中定义在代码中用于区分应用程序版本的预处理器宏。例如,您可以拥有: if (FREE_VERSION ==

我正在开发一个iOS应用程序,应该为不同的客户打上品牌。目前的问题是,我需要同时安装两个版本的应用程序(一个带有橙色主题,另一个带有红色主题)。实现这一点的最佳方法是什么?

您只需使用两个不同的包标识符即可。这可以在info.plist:
CFBundleIdentifier
中设置。
您可能需要设置使用不同版本info.plist的不同目标或方案。

为同一项目设置两个不同的目标。然后,在每个目标中定义在代码中用于区分应用程序版本的预处理器宏。例如,您可以拥有:

if (FREE_VERSION == true) {
    ...
}
else {
    ...
}

您必须为每个目标创建两个具有不同捆绑包标识符的目标。

我更喜欢在不维护两个单独的plist文件的情况下,通过在“存档”操作的自定义“预操作”构建脚本中对plist文件进行后处理来创建这两个目标

这有助于避免在更改某些内容时忘记更新两个plist文件的问题

我使用这种机制来构建应用程序的测试版本,我可以将其上传到TestFlight,以便我的测试人员可以同时安装实时版本和当前测试版本

(注意:虽然这个脚本在“Pre-actions”部分,但它实际上是一个后处理步骤,因为它发生在XCode将所有变量替换到plist文件之后)

要设置此方案(这些说明适用于XCode 5.0.1),请复制现有方案并将其称为适当的方案

选择“编辑方案”,并展开左侧选项卡中的“存档”项。这将为您提供“预操作”、“存档”和“后操作”子项。单击“预操作”一项,然后在右侧选项卡中,单击底部的“+”以添加新的“运行脚本操作”

我在构建脚本中使用Ruby,因此我在顶部的“Shell”框中输入“/usr/bin/Ruby”,但显然可以在bash或类似的程序中执行相同的操作

在“从…提供生成设置”下拉列表中选择您的项目

然后,您可以将以下代码的某些变体粘贴到底部的框中(或将其放入文件中,然后将文件拖动到框中):

这将更新CbundleIdentifier(添加“_test”)和CbundleDisplayName(添加“-test”),以便应用程序明显不同。定制以进行您需要的任何更改

更改文件的代码位于函数中的原因是,如果需要,可以很容易地对多个plist文件进行相同的更改

在这种情况下,您不需要这样做(因为您可能只想更改进入输出归档文件的内容),但我的一些其他构建脚本会自动更新版本号,我希望这些更改被签入git。如果需要这样做,也可以通过在底部添加以下内容来修改源plist文件:

changeBundle("#{ENV['PROJECT_DIR']}/#{ENV['INFOPLIST_FILE']}")

这将不允许您在设备上并行安装应用程序。是的,您可以在设备上安装不同版本的应用程序。我可以告诉你,因为这是我处理同一应用程序的免费和高级版本的方式。你可能还在info.plists中使用不同的
CFBundleIdentifier
值。这可能取决于变量
FREE\u VERSION
。您不需要有单独的目标。这可能会对您的开发过程有所帮助,但对于此设置不是必需的。我知道此评论是在一年多以前发表的,但是如果您碰巧看到我的评论,您是否可以详细阐述一下使用此方法的细节?我假设你必须为你的测试包ID创建一个新的应用ID和相关的配置文件?此外,我还想了解更多关于更新版本号的构建脚本的信息。在构建阶段的什么时候运行这些?我使用这种方法为本地开发创建了一个-Dev版本,这样我就可以测试我的应用程序的空状态,而无需删除我在生产版本中使用的所有个人数据。
changeBundle("#{ENV['PROJECT_DIR']}/#{ENV['INFOPLIST_FILE']}")