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

Bes*_*esi 12 iphone xcode ios info-plist

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

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

  2. MyAppPreview (Beta测试)

  3. MyApp (发布)

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

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

Bes*_*esi 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'
      
      Run Code Online (Sandbox Code Playgroud)
    • 现在在你的Info.plist改变Bundle Identifier${APP_ID}
  • 您可以使用Bundle Display NameIcon属性执行相同操作,以便您可以一目了然地轻松区分应用程序.

  • 您可以设置Preprocessor macros配置,以便能够检测代码中的当前配置.默认情况下,这对debug配置完成:DEBUG=1.

好处

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

缺点

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

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

  • 更新:应该使"配置感知"的一些设置移动到"构建设置"的"用户定义"部分,这可能会让某些开发人员感到不寻常.

结果

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