使用Xcodeproj::Project.open
(xcodeproj 1.5.1 gem) 打开项目时,如果项目具有为构建配置定义的 baseConfigurationReferences,XCBuildConfiguration#base_configuration_reference
则为 nil。例如,当打开一个 CocoaPods 项目时(CocoaPods 为每个构建配置添加一个 xcconfig):
2.4.1 :001 > require 'xcodeproj'
=> true
2.4.1 :002 > p = Xcodeproj::Project.open "examples/ios/BranchPluginExample/BranchPluginExample.xcodeproj"
=> #<Xcodeproj::Project> path:`/Users/jdee/github/BranchMetrics/fastlane-plugin-branch/examples/ios/BranchPluginExample/BranchPluginExample.xcodeproj` UUID:`7B03D6141EA18B7F00AE01E7`
2.4.1 :003 > p.build_configurations
=> [<XCBuildConfiguration name=`Debug` UUID=`7B03D62C1EA18B7F00AE01E7`>, <XCBuildConfiguration name=`Release` UUID=`7B03D62D1EA18B7F00AE01E7`>]
2.4.1 :004 > p.build_configurations[0].base_configuration_reference
=> nil
2.4.1 :005 > p.build_configurations[1].base_configuration_reference
=> nil
但是在project.pbxproj中:
[jdee@Jimmy-Dees-MacBookPro fastlane-plugin-branch (master)]$ grep baseConfigurationReference examples/ios/BranchPluginExample/BranchPluginExample.xcodeproj/project.pbxproj
baseConfigurationReference = A78993DA75A56A8B38F927FF /* Pods-BranchPluginExample.debug.xcconfig */;
baseConfigurationReference = D3CC0ABC7F7C89663342D316 /* Pods-BranchPluginExample.release.xcconfig */;
是否有另一种方法来加载文件以便填充?或者,信息可能在其他地方可用。
更新于 2017 年 11 月 18 日
情节变厚了。在具有 CocoaPods 集成的工作区中,如果缺少 Pods 沙箱,某些必需的 xcconfigs 也会丢失。在某些情况下,特别是在使用PBXNativeTarget#resolved_build_setting
resolve_against_xcconfig(第二个参数)为 true 时,Errno::ENOENT
会引发一个显示 Pod 下的路径名,它应该是PBXBuildConfiguration#base_configuration_reference
. 此处引发异常:
但是,如果我挽救异常并进行检查#base_configuration_reference
,则为零。