多项目工作区中的Xcode构建配置

5

使用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和日志设置看起来正确。但是,当我存档或在设备上运行时,使用了错误的构建配置。我不知道为什么会发生这种情况。

屏幕截图和代码说明了当前运作方式:

图1: Info.plist

图2: 框架构建设置

图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)。
任何设备在被告知使用生产值时都会拒绝使用,即使在我的方案的运行操作以及归档操作中手动切换它也是如此 - 归档在设备上返回错误的构建设置。
抱歉这篇文章有点长,感谢您的阅读。
1个回答

4
最终,我决定采用与此处类似的方法:如何在同一工作区中使用不同配置名称编译具有应用程序和库的项目?
它在父项目中添加构建设置,以指导它如何在子项目中找到所需的内容。此外,我需要将嵌入式.framework文件相对于构建路径设置,并使用配置设置。我省略了变体,只是使用$(BUILD_DIR)/$(DEFAULT_CONFIGURATION)-$(PLATFORM_NAME)替换所有值,而不是省略平台名称,最终取得了成功。
随着我学习和发现更多信息,我会更新这篇文章。
更新:2016-2-29:
我删除了.xcconfig文件;它们并不必要。
但是,当尝试实际使用嵌入式框架中的第三个方案时,我遇到了困难。我尝试切换DEFAULT_CONFIGURATION,但设置没有保持。简单来说,即使指定了正确的构建目录,Xcode在使用父级的构建配置设置时也会忽略它,并在同一目录中构建所有产品,我认为这也是“构建隐式依赖项”以及“嵌入框架”构建阶段的结果。但是,如果您删除这些并安装到设备上,则应用程序在启动时崩溃,因为找不到框架文件。
待续...

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接