安装相同iOS应用的两个版本

时间:2013-10-31 15:54:02

标签: ios branding

我正在开发一个iOS应用程序,该应用程序应该被标记给不同的客户。手头的问题是我需要同时安装两个版本的应用程序(一个带有橙色主题,一个带有红色主题)。实现这一目标的最佳方法是什么?

4 个答案:

答案 0 :(得分:8)

您只需使用两个不同的bundle-identifier。这可以在info.plist中设置:CFBundleIdentifier。 您可能希望设置使用不同版本的info.plist的不同目标或方案。

答案 1 :(得分:4)

我更喜欢在不维护两个单独的plist文件的情况下执行此操作,方法是在“归档”操作的自定义“预执行”构建脚本中对plist文件进行后处理。

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

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

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

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

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

我使用Ruby作为构建脚本,所以我在顶部的“Shell”框中输入“/ usr / bin / ruby​​”,但显然你可以用bash或类似的东西做同样的事情。

在“从......提供构建设置”下拉列表中选择您的项目。

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

def changeBundle(file)
    oldId = `/usr/libexec/Plistbuddy -c "print :CFBundleIdentifier" #{file}`.strip
    system("/usr/libexec/PlistBuddy -c \"Set :CFBundleIdentifier #{oldId}_test\" #{file}")

    oldName = `/usr/libexec/Plistbuddy -c "print :CFBundleDisplayName" #{file}`.strip
    system("/usr/libexec/PlistBuddy -c \"Set :CFBundleDisplayName #{oldName}-Test\" #{file}")
end

changeBundle("#{ENV['CODESIGNING_FOLDER_PATH']}/Info.plist")

这会更新CFBundleIdentifier(添加'_test')和CFBundleDisplayName(添加'-Test'),以便应用程序明显不同。自定义以进行所需的任何更改。

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

在这种情况下你不需要这样做(因为你可能只想更改输出存档文件中的内容),但是我的一些其他构建脚本会自动更新版本号,我希望这些更改是检查了git。如果您需要执行此类操作,可以通过在底部添加此文件来修改源plist文件:

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

答案 2 :(得分:0)

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

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

答案 3 :(得分:0)

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