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

标签 xcode buildconfiguration xcconfig xcode-workspace

使用 Xcode 7.2 (7C68), OS X 10.11.2 (15C50)

tl;博士 对于同一个 Xcode 工作区中的多个项目,为什么我的用户定义的构建配置build设置似乎不起作用?我在方案中正确设置了它们,但是在模拟器上运行时,值是正确的;在设备上运行时,值是错误的。

你好。我正在尝试利用 Xcode 构建配置(.xcconfig 文件)来根据环境自定义应用程序的行为。这样我们就可以根据方案的构建配置自动在集成和生产 URL 之间切换。但是,我在让它正常工作时遇到了一些困难;我认为我的工作区布局可能是罪魁祸首。这是布局/结构:

  • Xcode 工作区
  • iOS 应用项目(2 个目标:应用、测试)
  • Cocoa Touch Framework 项目(2 个目标:框架、测试)

  • 现在,我有以下 .xcconfig 文件 每个在这些项目中:
  • Debug.xcconfig
  • Testing.xcconfig
  • Release.xcconfig

  • 此外,以下方案(一对一映射到每个项目的相应配置):
  • 调试
  • 测试
  • 发布

  • 对于框架,这些文件包含我们希望根据调试、测试或发布进行自定义的信息(例如 URL、API token / key 等)。现在,应用程序和框架都有自己的这些文件的副本。这是因为 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
        }
    

    在框架内部,用户定义的build设置包含需要针对调试、发布和其他情况进行更改的设置(图 1)。 Info.plist 文件理想地提取给定方案的变量值(图 2)。然后在代码中我从信息 plist 中检索值(图 3)。

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

    抱歉,这很长,感谢您的阅读。

    最佳答案

    最终,我决定采用与此处类似的方法:

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

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

    随着我学习和发现更多,将更新这篇文章。

    更新:2016-2-29:

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

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

    未完待续...

    关于具有多个项目的工作区中的 Xcode 构建配置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34426440/

    相关文章:

    ios - xcode 4 仅在设备上复制一次资源

    ios - 从详细 View Controller 访问主视图 Controller 中定义的数组

    eclipse cdt - 如何从命令行设置事件构建配置

    visual-studio-2008 - "the outputpath property is not set for this project"错误

    delphi - 是否可以在 Delphi XE2 中使用选定的构建配置运行命令行编译器?

    ios - 如何在代码中复制核心数据托管对象

    ios - 后台位置更新因调试器中识别的后台任务问题而停止

    objective-c - 设置 xcconfig 文件的推荐方法

    ios - XCConfig 语法