在那里,我想要依赖三个应用程序,它们基于相同的代码:
MyAppDevelopment
(从部署到设备的 Xcode 构建)MyAppPreview
(Beta 测试)MyApp
(发布)
应该可以在一台设备上安装所有这三个应用程序,并且它们会有自己的图标,以便在视觉上很好地区分它们。
现在我知道我可以拥有三个不同的目标及其各自的 Info.plist
文件,但我宁愿使用 Xcode 的配置,这样我就不必保持三个不同的目标。这是否可能使用配置,问题是 App 标识符存储在 Info.plist
文件中,可以为每个目标定义...
最佳答案
为不同版本的应用程序使用不同的目标提供了更大的灵 active ,并且一旦您为每个目标指定了不同的 plist 文件,您就可以轻松地更改包标识符和图标等。但是,这些配置与 Xcode 集成得更深入,您可以根据配置调整任何build设置
。
经过更多研究后,我想出了如何通过一个目标获得两全其美的方法:
- 在 Xcode 中创建所需的配置:
ProjectName > ProjectName > Info
。例如:- 调试
- 预览
- 发布
- 现在这三种配置可用于所有build设置。
这三个应用程序应该在一台设备上共存。 我希望能够在一台设备上安装所有三个版本的应用程序,为此,所有三种类型都需要不同的包标识符。原始标识符可以是
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
属性执行相同的操作,以便一眼就能轻松区分该应用。- 您可以为您的配置设置
预处理器宏
,以便能够检测代码中的当前配置。对于debug
配置,这是默认完成的:DEBUG=1
。
优势
- 由于这三个 App 有自己的标识符,因此在 Xcode 中测试当前 App 时,您不会覆盖最新的预览版本。
- 很好地集成到 Xcode 中并提供了高度的灵 active
现在可以根据配置单独更改所有build设置 - 可以通过在 Xcode 中克隆现有配置轻松添加新配置
- 不需要额外的目标
恕我直言,目标更适合完全不同的工件,例如具有不同代码库的库或测试目标。 - 如果需要,可以在代码中使用这些配置。
- 不同的服务 URLS 等可用于不同的环境。看这个great post (感谢 Jonah!)展示了如何使用一个特殊的
plist
文件来做到这一点。 - 不使用任何难以维护的骇人听闻的脚本
缺点
通过使用目标,可以从一种应用程序中排除某些框架。因此,例如,您可以从应用的
debug
版本中排除一些分析库。更新:您不能对用户定义的build设置使用诸如
com.company.${PRODUCT_NAME:rfc1034identifier}
之类的替换。因此,在这种情况下,您必须写出 bundle 的整个 bundle 标识符。更新:一些应该“配置感知”的设置移动到build设置的用户定义部分,这对一些开发者来说可能感觉不寻常。
结果
关于iphone - 来自一个代码库的三个略有不同的应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8956263/