使用Xcode 7.2 (7C68),OS X 10.11.2 (15C50)
tl;dr 在同一Xcode工作区中有多个项目,为什么我的用户定义的构建设置在构建配置中似乎不起作用?我在方案中正确设置了它们,但在模拟器上运行时值是正确的;当在设备上运行时,值是错误的。
你好。我正在尝试利用Xcode构建配置(.xcconfig文件)根据环境自定义应用程序的行为。这样,我们就可以根据方案的构建配置自动在集成和生产URL之间切换。然而,我在使其正常工作方面遇到了一些困难;我认为我的工作区布局可能有问题。以下是布局/结构:
- Xcode工作区
- iOS应用程序项目(2个目标:应用程序、测试)
- Cocoa Touch框架项目(2个目标:框架、测试)
现在,我为每个这些项目都有以下.xcconfig文件:
Debug.xcconfig
Testing.xcconfig
Release.xcconfig
- Debug
- Testing
- Release
对于框架来说,这些文件包含我们想要根据调试或测试或发布自定义的信息(例如URL、API令牌/密钥等)。现在,应用程序和框架各自拥有这些文件的副本。这是因为Xcode在处理依赖项或多个项目时,在这种情况下隐式地尝试使用相同名称的配置。我猜问题的一部分是我不知道如何明确告诉Xcode使用与设置的配置不同的依赖项的X配置。
换句话说,我如何告诉应用程序使用X配置,同时告诉框架使用Y配置?
现在,当我在模拟器中运行应用程序时,我知道方案正在使用正确的info.plist值,因为URL和日志设置看起来正确。但是,当我存档或在设备上运行时,使用了错误的构建配置。我不知道为什么会发生这种情况。
屏幕截图和代码说明了当前运作方式:
图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)。
任何设备在被告知使用生产值时都会拒绝使用,即使在我的方案的运行操作以及归档操作中手动切换它也是如此 - 归档在设备上返回错误的构建设置。
抱歉这篇文章有点长,感谢您的阅读。