1

使用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_settingresolve_against_xcconfig(第二个参数)为 true 时,Errno::ENOENT会引发一个显示 Pod 下的路径名,它应该是PBXBuildConfiguration#base_configuration_reference. 此处引发异常:

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

但是,如果我挽救异常并进行检查#base_configuration_reference,则为零。

4

1 回答 1

0

就在更新上述内容之后,我想到了答案,我已经确认了。可能会在目标上填充,#base_configuration_reference但不会在项目上填充。

于 2017-11-18T20:14:38.807 回答