xcodeproj 是否支持 XCBuildConfiguration#base_configuration_reference?

Is `XCBuildConfiguration#base_configuration_reference` supported in xcodeproj?

使用 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 显示 Pods 下的路径名,这应该是值PBXBuildConfiguration#base_configuration_reference。此处引发异常:

https://github.com/CocoaPods/Xcodeproj/blob/master/lib/xcodeproj/project/object/build_configuration.rb#L195

但是如果我拯救异常并检查#base_configuration_reference,它是零。

刚刚更新完上面的内容,我就想到了答案,我已经确认了。 #base_configuration_reference 可能填充在目标上,但未填充在项目上。