来自一个代码库的三个略有不同的应用

时间:2012-01-21 20:09:12

标签: iphone ios xcode info-plist

在那里,我希望有三个依赖的应用程序,它们基于相同的代码:

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

  2. MyAppPreview(Beta测试)

  3. MyApp(发布)

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

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

4 个答案:

答案 0 :(得分: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

优点

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

缺点

  • 使用目标可以从某种类型的App中排除某些框架。例如,您可以从应用的debug版本中排除某些分析库。

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

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

    < / LI>

结果

Result http://i.minus.com/jbwPgEiBra39dL.png

答案 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,了解如何设置整个内容的详细说明。

https://gist.github.com/2782045