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
。此处引发异常:
但是如果我拯救异常并检查#base_configuration_reference
,它是零。
刚刚更新完上面的内容,我就想到了答案,我已经确认了。 #base_configuration_reference
可能填充在目标上,但未填充在项目上。
使用 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
。此处引发异常:
但是如果我拯救异常并检查#base_configuration_reference
,它是零。
刚刚更新完上面的内容,我就想到了答案,我已经确认了。 #base_configuration_reference
可能填充在目标上,但未填充在项目上。