12

我想拥有三个基于相同代码的应用程序:

  1. MyAppDevelopment(从部署到设备的 Xcode 构建)

  2. MyAppPreview(Beta测试)

  3. MyApp(释放)

应该可以将所有三个应用程序都安装在设备上,并且它们会有自己的图标以在视觉上很好地区分它们。

现在我知道我可以拥有三个不同的目标及其各自的Info.plist文件,但我宁愿使用 Xcode 的配置,这样我就不必维护三个不同的目标。这是否可能使用配置,问题是应用程序标识符存储在Info.plist文件中,可以按目标定义...

4

4 回答 4

26

为不同版本的应用程序使用不同的目标提供了更大的灵活性,并且一旦您为每个目标指定了不同的 plist 文件,您就可以轻松地更改捆绑标识符和图标等。但是,这些配置与 Xcode 集成得更深,您可以build setting根据配置进行任何调整。

经过更多研究后,我想出了如何通过一个目标获得两全其美的效果:

  • 在 Xcode 中创建所需的配置: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.plistBundle Identifier值更改为${APP_ID}
  • 您可以对Bundle Display NameIcon属性执行相同操作,以便您一眼就能轻松区分应用程序。

  • 您可以Preprocessor macros为您的配置进行设置,以便能够检测代码中的当前配置。这是默认为debug配置完成的:DEBUG=1.

好处

  • 由于这三个 App 都有自己的标识符,因此在 Xcode 中测试当前 App 时,您不会覆盖最新的预览版本。
  • 很好地集成到 Xcode 中并提供了高度的灵活性
    现在可以根据配置单独更改所有构建设置
  • 通过克隆 Xcode 中的现有配置,可以轻松添加新配置
  • 不需要额外的目标
    恕我直言,对于完全不同的工件,如库或具有不同代码库的测试目标,目标是更好的。
  • 如果需要,可以在代码中使用这些配置。
  • 不同的服务 URL 等可以用于不同的环境。请参阅这篇很棒的帖子(感谢 Jonah!),它展示了如何使用特殊plist文件执行此操作。
  • 不使用任何难以维护的hacky脚本

缺点

  • 使用目标可以从一种应用程序中排除一些框架。因此,例如,您可以从debug您的应用程序版本中排除一些分析库。

  • 更新:您不能使用com.company.${PRODUCT_NAME:rfc1034identifier}用户定义的构建设置之类的替换。因此,在这种情况下,您必须写出整个捆绑包标识符。

  • 更新:一些应该“配置感知”的设置移动到构建设置的用户定义部分,这对一些开发人员来说可能感觉不寻常。

结果

结果 http://i.minus.com/jbwPgEiBra39dL.png

于 2012-01-23T15:39:14.177 回答
4

如果您希望同时在设备上安装所有三个应用程序,那么您只需使用三个单独的标识符= 三个目标及其 info.plist。

我真的没有看到在一个项目中“维护”三个独立目标的问题。我一直这样做(尽管有两个目标)。这实际上是一个非常优雅的解决方案。

于 2012-01-21T20:41:35.730 回答
2

在我的应用程序中,我经常添加一个“运行脚本”构建步骤,以便在构建应用程序之前将特定环境的 plist 复制到位。使用这种方法,我可以交换整个 Info.plist,以便我可以根据构建设置更改应用程序标识符。我通常根据一些环境变量来设置环境来构建,这些环境变量可以在构建目标的设置中设置或更改。

我的一些同事采用了另一种方法,它允许您使用 Xcode 配置来确定应用程序的环境,但我认为这不会允许您更改应用程序标识符: http: //blog.carbonfive.com/2011/06 /20/managing-ios-configurations-per-environment-in-xcode-4/

于 2012-01-21T20:42:25.157 回答
0

作为我描述的方法的补充,我已经实现了每个配置具有不同属性或设置的可能性。

我根据本教程创建了一个要点,并对其进行了一些扩展。我在各种项目中使用它并且对它非常满意。

我所做的一个主要补充是定义主环境的能力,如果没有找到值,它将用作其他环境的后备环境。

请查看 Readme.md 了解如何设置整个内容的详细说明。

https://gist.github.com/2782045

于 2012-05-24T14:51:25.130 回答