我的 iPhone 应用程序连接到三个不同的服务器,例如:production、staging 和testing。应用程序根据它连接到的服务器使用一堆配置值,例如Facebook 应用 ID、TestFlight 团队 key 等
我想在 GIT 中进行所有设置,并且只选择应用程序在编译或发布时应该使用的配置。 For example, when testing is selected, Product -> Run in Xcode runs the debug version of the app connecting to testing, and Product -> Archive 使用发布版本创建 IPA 文件,该版本也连接到测试。
我不想创建比调试和发布更多的构建配置(因为这意味着构建配置/运行时配置的 6 种不同组合)。在我看来,理想的解决方案是我有三个方案:production、testing 和 staging,每个方案选择一个三个与应用程序一起使用的 Info.plist 文件。这将使我不仅可以定义不同的运行时设置,还可以根据后端服务器定义不同的应用程序版本或包标识符。但除了选择不同的构建配置之外,我似乎无法以任何其他方式配置存档操作。如果可以通过任何方式实现,有什么想法吗?
编辑:为了更清楚一点,production/staging/testing 是后端服务器,而不是 iOS 应用程序的版本。 iOS 应用有两个版本:调试/发布。换句话说,我可能想要运行连接到生产 服务器的应用程序的调试 版本,例如调试由从该服务器返回的 JSON 引起的崩溃。为了清楚起见,我可以将服务器命名为 A、B 和 C。
最佳答案
执行此操作的一个好方法是使用构建配置和 C 宏。这避免了必须为每个配置创建一个单独的目标,这并不是真正正确使用目标。
首先您要在项目级别设置配置:
您可以为调试、企业分发和您想要的任何其他类型的特殊构建创建不同的配置。
接下来,您可以为每个将传递给编译器的配置定义一些宏标志。然后您可以在编译时检查这些标志。在目标级别找到“预处理器标志”build设置:
如果展开三角形,您可以为每个配置定义不同的值。您可以在此处定义 KEY=VALUE
或仅定义 KEY
宏。
在您的代码中,您可以检查这些宏是否存在,或者它们的值(如果有的话)。例如:
#ifdef DISABLE_FEATURE_X
featureXButton.hidden = YES;
#endif
// ...
#if FOOBAR_VISIBLE == 0
foobarView.hidden = YES;
#elif FOOBAR_VISIBLE == 1
foorbarView.hidden = NO;
#else
#error Invalid value for FOOBAR_VISIBLE
#endif
您也可以传入字符串值,在build设置中必须用单引号括起来,例如DEFAULT_LOCALIZATION_NAME='@"en"'
。
您还可以使用方案编辑器配置在调试和归档期间使用的配置。如果您在方案编辑器中选择“运行”或“存档”,您可以选择适当的配置。
如果您需要参数化 Info.plist 文件中的条目,您可以使用自定义build设置来定义它们的值。为您的目标添加自定义build设置:
然后为您的不同配置赋予适当的值:
然后在Info.plist文件中可以引用这个设置:
请注意,此方法的一个限制是您不能更改以下项目:
- Settings.bundle
此外,在不支持 Assets 目录的旧版 Xcode 中,您无法更改以下项目:
- 图标.png
- 默认.png
这些不能在 Info.plist 文件或其他任何地方明确定义,这意味着您需要不同的目标来更改它们。
希望这对您有所帮助。
关于iphone - 如何在 Xcode 中配置独立的运行时设置集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10497552/