iphone - 如何在 Xcode 中配置独立的运行时设置集

标签 iphone ios xcode configuration runtime

我的 iPhone 应用程序连接到三个不同的服务器,例如:productionstagingtesting。应用程序根据它连接到的服务器使用一堆配置值,例如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 种不同组合)。在我看来,理想的解决方案是我有三个方案:productiontestingstaging,每个方案选择一个三个与应用程序一起使用的 Info.plist 文件。这将使我不仅可以定义不同的运行时设置,还可以根据后端服务器定义不同的应用程序版本或包标识符。但除了选择不同的构建配置之外,我似乎无法以任何其他方式配置存档操作。如果可以通过任何方式实现,有什么想法吗?

编辑:为了更清楚一点,production/staging/testing 是后端服务器,而不是 iOS 应用程序的版本。 iOS 应用有两个版本:调试/发布。换句话说,我可能想要运行连接到生产 服务器的应用程序的调试 版本,例如调试由从该服务器返回的 JSON 引起的崩溃。为了清楚起见,我可以将服务器命名为 A、B 和 C。

最佳答案

执行此操作的一个好方法是使用构建配置和 C 宏。这避免了必须为每个配置创建一个单独的目标,这并不是真正正确使用目标。

首先您要在项目级别设置配置:

enter image description here

您可以为调试、企业分发和您想要的任何其他类型的特殊构建创建不同的配置。

接下来,您可以为每个将传递给编译器的配置定义一些宏标志。然后您可以在编译时检查这些标志。在目标级别找到“预处理器标志”build设置:

enter image description here

如果展开三角形,您可以为每个配置定义不同的值。您可以在此处定义 KEY=VALUE 或仅定义 KEY 宏。

enter image description here

在您的代码中,您可以检查这些宏是否存在,或者它们的值(如果有的话)。例如:

#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"'

您还可以使用方案编辑器配置在调试和归档期间使用的配置。如果您在方案编辑器中选择“运行”或“存档”,您可以选择适当的配置。

enter image description here

如果您需要参数化 Info.plist 文件中的条目,您可以使用自定义build设置来定义它们的值。为您的目标添加自定义build设置:

enter image description here

然后为您的不同配置赋予适当的值:

enter image description here

然后在Info.plist文件中可以引用这个设置:

enter image description here

请注意,此方法的一个限制是您不能更改以下项目:

  • Settings.bundle

此外,在不支持 Assets 目录的旧版 Xcode 中,您无法更改以下项目:

  • 图标.png
  • 默认.png

这些不能在 Info.plist 文件或其他任何地方明确定义,这意味着您需要不同的目标来更改它们。

希望这对您有所帮助。

关于iphone - 如何在 Xcode 中配置独立的运行时设置集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10497552/

相关文章:

iphone - iPad中矩形的发光效果

ios - 如何将图库中的图像设置为 UIButton 背景? swift 4

iphone - 关闭 iPhone 网络应用程序

ios - sqlite3 "unable to open database file"- ios

iphone - 旋转固定位置的 UILabel

ios - MWPhotoBrowser 不显示导航标题中单个图像的显示图像名称

iOS Facebook 授权

代码 5 : How to build Debug configuration only

ios - xcodebuild 将使用 Xcode 6 和备用包 ID 进行协同签名,但不会使用 Xcode 7

iphone - UIAlertView 显示延迟