我有几个 Swift cocoapod 的代码,我只想在设置预处理器标志时执行/编译。该项目按以下方式设置:
项目 A ->(消耗)项目 B
项目 A 和 B 的代码如下所示:
#if THIS_FLAG_IS_TRUE
do this stuff
#endif
在项目 A 中有如下代码:
#if THIS_FLAG_IS_TRUE
execute_code_in_project_b()
#endif
然后在项目 B
#if THIS_FLAG_IS_TRUE
func execute_code_in_project_b() {
// do some stuff
}
#endif
我有一个设置预处理器标志的构建脚本,但它只适用于项目 A,项目 B 似乎忽略了标志值并保持为假。如何设置我的构建脚本,以便在项目 A 和项目 B 中确定标志值(B 是我拥有的 cocoapod)。
我的构建脚本
#!/usr/bin/ruby
require 'xcodeproj'
shouldEnable = ARGV[0]
ENABLE_FLAG = 'enable'
DISABLE_FLAG = 'disable'
COMPILE_FLAG = 'THIS_FLAG_IS_TRUE'
DEBUG_FLAG = 'DEBUG'
DEBUG_SETTING = 'Debug'
DEFAULT_FLAG = '$(inherited) $(COMPILE_POINTR)'
DEFAULT_FLAG_WITH_POINTR = "$(inherited) $(COMPILE_POINTR) #{COMPILE_FLAG}"
SWIFT_ACTIVE_COMPILATION_CONDITIONS = 'SWIFT_ACTIVE_COMPILATION_CONDITIONS'
project_path = "ProjectA.xcodeproj"
project = Xcodeproj::Project.open(project_path)
puts shouldEnable
project.targets.each do |target|
if target.name == 'ProjectA'
if shouldEnable == ENABLE_FLAG
puts 'Modifying SWIFT_ACTIVE_COMPILATION_CONDITIONS in ProjectA Pod to include THIS_FLAG_IS_TRUE'
else
puts 'Reverting SWIFT_ACTIVE_COMPILATION_CONDITIONS in ProjectA Pod to not compile THIS_FLAG_IS_TRUE'
end
target.build_configurations.each do |config|
current = config.build_settings[SWIFT_ACTIVE_COMPILATION_CONDITIONS]
puts 'Current value:'
puts current
if shouldEnable == ENABLE_FLAG
config.build_settings[SWIFT_ACTIVE_COMPILATION_CONDITIONS] = DEFAULT_FLAG_WITH_LIB
else
config.build_settings[SWIFT_ACTIVE_COMPILATION_CONDITIONS] = DEFAULT_FLAG
end
if config.name == DEBUG_SETTING
config.build_settings[SWIFT_ACTIVE_COMPILATION_CONDITIONS] += ' ' + DEBUG_FLAG
end
newSettings = config.build_settings[SWIFT_ACTIVE_COMPILATION_CONDITIONS]
puts 'New value:'
puts newSettings
end
end
end
project.save