使用 Xcode 7.2 (7C68)、OS X 10.11.2 (15C50)
tl;dr在同一个 Xcode 工作区中有多个项目,为什么我的构建配置的用户定义构建设置似乎不起作用?我在方案中正确设置了它们,但是在模拟器上运行时,值是正确的;在设备上运行时,值是错误的。
你好。我正在尝试利用 Xcode 构建配置(.xcconfig 文件)来根据环境自定义我们的应用程序的行为。这样我们就可以根据方案的构建配置自动在集成和生产 URL 之间切换。但是,我很难让它正常工作;我认为我的工作空间布局可能是罪魁祸首。这是布局/结构:
- Xcode 工作区
- iOS 应用项目(2 个目标:应用、测试)
- Cocoa Touch Framework 项目(2 个目标:框架、测试)
现在,对于每个项目,我都有以下 .xcconfig 文件:
Debug.xcconfig
Testing.xcconfig
Release.xcconfig
此外,以下方案(一对一映射到每个项目的相应配置):
- 调试
- 测试
- 释放
对于框架,这些文件包含我们希望根据调试或测试或发布自定义的信息(例如 URL、API 令牌/密钥等)。现在,应用程序和框架都有自己的这些文件的副本。这是因为 Xcode 在处理依赖项或多个项目时,会隐式尝试在这种情况下使用同名配置。我想部分问题是我不知道如何明确告诉 Xcode 将 X 配置用于未设置配置的依赖项。
换句话说,我如何告诉应用程序使用X 配置和框架使用 Y 配置?
现在,当我在模拟器中运行应用程序时,我知道该方案正在使用正确的 info.plist 值,因为 URL 和日志设置看起来是正确的。但是,当我在device上存档或运行时,使用了错误的构建配置。我不知道为什么会这样。
屏幕截图和代码说明了它现在是如何工作的:
图 3(某些方法的部分主体):
if let infoDict = NSBundle(identifier: Constants.uniformTypeIdentifier)?.infoDictionary,
let apiKey = infoDict[Configuration.SerializationKeys.pusherAPIKey] as? String {
return apiKey
}
在框架内部,用户定义的构建设置包含需要针对调试、发布和任何内容进行更改的设置(图 1)。Info.plist 文件理想地提取给定方案的变量值(图 2)。然后在代码中,我从 info plist 中检索值(图 3)。
任何设备在被告知这样做时都会拒绝使用生产值,包括当我在方案的运行操作和存档操作上手动切换它时 - 存档使用会在设备上返回错误的构建设置。
对不起,这很长,感谢您的阅读。