微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Xcode在具有多个项目的工作区中构建配置

使用 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和日志设置显示正确.但是,当我在设备上存档或运行时,会使用错误的构建配置.我不知道为什么会这样.

屏幕截图和代码说明了它现在的工作原理:

图1:

Info.plist

图2:

Framework build settings

图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).

当被告知这样做时,任何设备都拒绝使用生产值,包括当我在我的方案的“运行”操作以及“存档”操作上手动切换时 – 存档使用会在设备上返回错误的构建设置.

对不起,这很长,谢谢你的阅读.

解决方法

最终,我决定使用类似的方法

How to compile a project with app and library in the same workspace with different configuration names?

它在父项目中添加了构建设置,以指导它如何在子项目中找到它所需的内容.另外,我需要获取嵌入的.framework文件并相对于构建路径设置它并使用配置设置.我确实省略了变体,只使用了$(BUILD_DIR)/ $(DEFAULT_CONfigURATION) – $(PLATFORM_NAME)来代替所有值,而不是从平台名称中取消,最终取得成功.

我会在学习和发现更多内容时更新这篇文章.

更新:2016-2-29:

删除了.xcconfig文件;他们没有必要.

但是,当我试图在嵌入式框架中实际使用第三种方案时,我遇到了困难.我尝试切换DEFAULT_CONfigURATION,但设置不成立.省略一些细节,基本上即使指定了正确的构建目录,Xcode也会在使用父级的构建配置设置时忽略这一点,并在同一目录中构建所有产品,我也认为这是“构建隐式依赖关系”以及“嵌入框架”构建阶段.但是如果您要删除这些并安装到设备,则应用程序会在启动时崩溃,因为它无法找到框架文件.

未完待续…

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐