0

我有几个 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
4

0 回答 0