使用Xcode 7.2(7C68),OS X 10.11.2(15C50)
tl; dr在同一个Xcode工作区中有多个项目,为什么我对构建配置的用户定义的构建设置似乎不起作用?我在方案中正确设置了它们,但是在模拟器上运行时,这些值是正确的。在设备上运行时,值错误。
你好。我正在尝试利用Xcode构建配置(.xcconfig文件)根据环境自定义应用程序的行为。这样,我们便可以根据方案的构建配置自动在集成URL和生产URL之间切换。但是,我很难使它正常工作。我认为可能是我的工作空间布局怪异。这是布局/结构:
现在,对于每个这些项目,我都有以下.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)。
任何设备都被告知拒绝使用生产值,包括我在方案的“运行”操作和“存档”操作上手动切换生产值时-存档使用会返回设备上的错误构建设置。
抱歉,很长,感谢您的阅读。
最终,我决定采用类似的方法,如下所示:
如何在具有不同配置名称的同一工作空间中编译带有应用程序和库的项目?
它在父项目中添加了构建设置,以指导其如何在子项目中找到所需的内容。另外,我需要获取嵌入的.framework文件,并相对于构建路径并使用配置设置对其进行设置。我确实忽略了变体,仅将其$(BUILD_DIR)/$(DEFAULT_CONFIGURATION)-$(PLATFORM_NAME)
用于所有值,而不是放弃平台名称以最终获得成功。
当我学习和发现更多内容时,将更新此帖子。
更新时间:2016-2-29:
我删除了.xcconfig文件;他们没有必要。
但是,在尝试在嵌入式框架中实际使用第三个方案时,我遇到了困难。我尝试切换,DEFAULT_CONFIGURATION
但设置不成立。忽略一些细节,基本上,即使指定了正确的构建目录,Xcode在使用父级的构建配置设置时也会忽略此细节,并在同一目录中构建所有产品,我也认为这是“ Build Implicit Dependencies”以及“嵌入式框架”构建阶段。但是,如果要删除这些文件然后安装到设备,则该应用程序在启动时会崩溃,因为它找不到框架文件。
待续...
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句