在那里,我希望有三个依赖的应用程序,它们基于相同的代码:
MyAppDevelopment
(从部署到设备的Xcode构建)
MyAppPreview
(Beta测试)
MyApp
(发布)
应该可以在设备上安装所有三个应用程序,并且他们有自己的图标,可以在视觉上很好地区分它们。
现在我知道我可能有三个不同的目标及其各自的Info.plist
文件,但我宁愿使用Xcode的配置,这样我就不必维护三个不同的目标。这是否可能使用配置,问题是App标识符存储在Info.plist
文件中,可以按目标定义...
答案 0 :(得分:26)
为不同版本的应用程序使用不同的目标可提供更大的灵活性,并允许您在为每个目标指定不同的plist文件后轻松更改包标识符和图标等。但是,配置与Xcode集成得更深,您可以根据配置调整任何build setting
。
经过一些研究后,我想出了如何只用一个目标来实现两全其美:
ProjectName > ProjectName > Info
。例如:
三个应用应该在设备上共存。
我希望能够在一个设备上拥有该应用程序的所有三个版本,因为这三种类型都需要不同的包标识符。原始标识符可以是com.company.${PRODUCT_NAME:rfc1034identifier}
。
MyProject > MyApp (Target) > Build settings
,然后点击按钮(+) Add Build Setting
添加新密钥${APP_ID}
并设置如下值,并注意release
配置不应包含后缀:
APP_ID > 'com.company.MyApp-debug'
> 'com.company.MyApp-preview'
> 'com.company.MyApp'
Info.plist
将Bundle Identifier
值更改为${APP_ID}
您可以对Bundle Display Name
或Icon
属性执行相同操作,以便您可以一目了然地轻松区分应用。
Preprocessor macros
,以便能够检测代码中的当前配置。对于debug
配置,默认情况下会这样做:DEBUG=1
。plist
文件执行此操作。使用目标可以从某种类型的App中排除某些框架。例如,您可以从应用的debug
版本中排除某些分析库。
更新:您无法对用户定义的构建设置使用com.company.${PRODUCT_NAME:rfc1034identifier}
等替换。因此,在这种情况下,您必须写出捆绑包整个包标识符。
更新:应将“配置感知”的一些设置移至“构建设置”的“用户定义”部分,这对某些开发人员来说可能会感到不寻常。
< / LI>答案 1 :(得分:4)
如果您希望同时在设备上安装所有三个应用,那么您只需使用三个单独的标识符 =三个目标及其info.plist。
我真的没有看到问题并且维持&#39;一个项目中的三个独立目标。 我一直这样做(有两个目标,但不过)。它实际上是非常的 优雅的解决方案。
答案 2 :(得分:2)
在我的应用程序中,我经常添加一个“运行脚本”构建步骤,在构建应用程序之前将环境特定的plist复制到位。通过这种方法,我可以交换整个Info.plist,以便我可以根据构建设置更改应用程序标识符。我通常根据一些环境变量设置环境,可以在构建目标的设置中设置或更改。
我的一些同事采用了另一种方法,允许您使用Xcode配置来确定应用程序的环境,但我认为这不会允许您更改应用程序标识符:http://blog.carbonfive.com/2011/06/20/managing-ios-configurations-per-environment-in-xcode-4/
答案 3 :(得分:0)
作为我描述的方法的补充,我已经实现了为每个配置提供不同属性或设置的可能性。
我根据this Tutorial创建了一个要点,我已经扩展了一点。我在各种项目中使用它并且对它非常满意。
我所做的一个主要补充是能够定义一个主环境,如果没有找到值,它将被用作其他环境的后备。
请查看Readme.md,了解如何设置整个内容的详细说明。