加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-14 17:34:36 所属栏目:百科 来源:网络整理
导读:使用 Xcode 7.2(7C68),OS X 10.11.2(15C50) tl; dr在同一个Xcode工作区中有多个项目,为什么我的用户定义的构建配置的构建设置似乎不起作用?我在方案中正确设置它们,但在模拟器上运行时,值是正确的;在设备上运行时,值是错误的. 你好.我正在尝试利用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也会在使用父级的构建配置设置时忽略这一点,并在同一目录中构建所有产品,我也认为这是“构建隐式依赖关系”以及“嵌入框架”构建阶段.但是如果您要删除这些并安装到设备,则应用程序会在启动时崩溃,因为它无法找到框架文件.

未完待续…

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读