Pod子模塊工程編譯宏設置

在Swift項目的模塊化項目開發(fā)中,有個獨立的網絡子模塊,采用了宏定義的方式來隔離服務器環(huán)境。在主工程(后續(xù)均稱為A工程)的Configurations設置了多個config,分別是Debug、Alpha、Beta、Release。 A工程配Target配置如下圖:


截屏2022-03-15 下午5.41.09.png

但是,現在遇到了一個問題,在采用不同config進行編譯,項目始終讀取的是DEBUG狀態(tài)下的網絡地址。開始時,以為是子項目中沒有相關的配置,于是在Podfile中添加了如下腳本:

  installer.pods_project.targets.each do |target|
    target.build_configurations.each do |config|
      if config.name == 'Alpha'
        config.build_settings['GCC_PREPROCESSOR_DEFINITIONS'] ||= ['$(inherited)','ALPHA=2']
      elsif config.name == 'Beta'
        config.build_settings['GCC_PREPROCESSOR_DEFINITIONS'] ||= ['$(inherited)','BETA=3']
      elsif config.name == 'Release'
        config.build_settings['GCC_PREPROCESSOR_DEFINITIONS'] ||= ['$(inherited)','RELEASE=4']
      end
    end
  end
end

但是,在做了此工作之后,才發(fā)現改方法仍然不起作用。后來查詢資料說是Swift是不支持宏的,需要在Other Swift Flags中添加定義。于是修改如下:

post_install do |installer|
  installer.pods_project.targets.each do |target|
    target.build_configurations.each do |config|
      if config.name == 'Alpha'
        config.build_settings['OTHER_SWIFT_FLAGS'] = '$(inherited) -D ALPHA'
        config.build_settings['GCC_PREPROCESSOR_DEFINITIONS'] ||= ['$(inherited)','ALPHA=2']
      elsif config.name == 'Beta'
        config.build_settings['OTHER_SWIFT_FLAGS'] = '$(inherited) -D BETA'
        config.build_settings['GCC_PREPROCESSOR_DEFINITIONS'] ||= ['$(inherited)','BETA=3']
      elsif config.name == 'Release' 
        config.build_settings['OTHER_SWIFT_FLAGS'] = '$(inherited) -D RELEASE'
        config.build_settings['GCC_PREPROCESSOR_DEFINITIONS'] ||= ['$(inherited)','RELEASE=4']
      else        
        config.build_settings['OTHER_SWIFT_FLAGS'] = '$(inherited) -D DEBUG'
      end
    end
  end
end

但是,運行到最后發(fā)現仍不生效。而在網絡溜達了一圈,發(fā)現沒有其他跟后的思路,索性回到項目本省的主工程。于是想著,主工程保持與主工程相同的配置方式應該可以吧。于是,有了如下的配置修改:

post_install do |installer|
  installer.pods_project.targets.each do |target|
    target.build_configurations.each do |config|
      if config.build_settings['IPHONEOS_DEPLOYMENT_TARGET'].to_f < 11.0
        config.build_settings['IPHONEOS_DEPLOYMENT_TARGET'] = '11.0'
      end
      if config.name == 'Alpha'
        config.build_settings['SWIFT_ACTIVE_COMPILATION_CONDITIONS'] = 'ALPHA'
        config.build_settings['GCC_PREPROCESSOR_DEFINITIONS'] ||= ['$(inherited)','ALPHA=2']
      elsif config.name == 'Beta'
        config.build_settings['SWIFT_ACTIVE_COMPILATION_CONDITIONS'] = 'BETA'
        config.build_settings['GCC_PREPROCESSOR_DEFINITIONS'] ||= ['$(inherited)','BETA=3']
      elsif config.name == 'Release'
        config.build_settings['SWIFT_ACTIVE_COMPILATION_CONDITIONS'] = 'RELEASE'
        config.build_settings['GCC_PREPROCESSOR_DEFINITIONS'] ||= ['$(inherited)','RELEASE=4']
      else
        config.build_settings['SWIFT_ACTIVE_COMPILATION_CONDITIONS'] = 'DEBUG'
      end
    end
  end
end

好家伙,成功了?;剡^頭來,看看配置。
SWIFT_ACTIVE_COMPILATION_CONDITIONS本身表示的是激活SWIFT條件編譯。所以,改方法能成功也是預料之中的。

?著作權歸作者所有,轉載或內容合作請聯系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容