2015-12-22 73 views
3

使用的Xcode 7.2(7C68),OS X 10.11.2(15C50)Xcode的构建配置在工作区多个项目

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

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

  • 的Xcode工作区
    • iOS应用项目(2个目标:应用程序,测试)
    • 可可触摸框架项目(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 
    } 

在框架内部,用户定义的构建设置包含需要为调试vs发布而更改的设置与vs无论如何(图。 1)。 Info.plist文件理想地提取给定方案的变量值(图2)。然后在代码中,我从信息plist中检索值(图3)。

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

对不起,这是漫长的,感谢您的阅读。

回答

1

最后,我用类似的方法决定为这里看到:

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也会在使用父级的构建配置设置时忽略此操作,并将所有产品构建在同一个目录中,我也相信这是“构建隐式依赖项”以及“嵌入框架”构建阶段。但是,如果您要删除这些内容并安装到设备上,则应用程序在启动时会崩溃,因为它找不到框架文件。

待续...

相关问题