使用xcconfig设置自定义预编译宏

在开发中经常用 target 区分正式、测试环境,用到自定义的预编译宏来判断,OC中可以在 target 的 Preprocessor Macros 里设置,Swift 则不同。

使用xcconfig设置预编译宏

本文以自定义 RELEASE_BETA 为例

  1. 打开你的 Xcode 项目,选择 项目(Project)→ Info → Configurations
  2. 找到 Release,点击旁边的齿轮按钮 → 选择 Duplicate “Release”
  3. 将新建项命名为 Release_Bate
  4. 在项目跟目录新增xcconfig文件


    创建xcconfig文件
  5. xcconfig文件命名规范
    所在文件夹-工程名-Release_Bate.xcconfig
  6. 配置xcconfig
#include "Pods/Target Support Files/Pods-工程名/Pods-工程名.release_beta.xcconfig"

GCC_PREPROCESSOR_DEFINITIONS[config=Release_Beta] = $(inherited) RELEASE_BETA=1
OTHER_SWIFT_FLAGS[config=Release_Beta] = $(inherited) -D RELEASE_BETA
SWIFT_ACTIVE_COMPILATION_CONDITIONS[config=Release_Beta] = RELEASE_BETA
  1. 关联xcconfig文件
    选择PROJECT -> Info -> Configurations -> Release_Beta,选择对应target,将原有CocoaPods生成的xcconfig替换为刚创建的xcconfig
  2. 设置完成
    在用到的地方使用:
#if RELEASE_BETA
let BASEURL = ""
#else
let BASEURL = ""
#endif

如果是 OC 和 Swift 混编的项目,OC也需要用到,则还是在 Preprocessor Macros 里添加一遍。

pods组件中使用

post_install do |installer|
  installer.pods_project.targets.each do |target|
    target.build_configurations.each do |config|
        if config.name == 'Release_Beta'
            config.build_settings['GCC_PREPROCESSOR_DEFINITIONS'] = ['$(inherited)', 'RELEASE_BETA=1']
            config.build_settings['SWIFT_ACTIVE_COMPILATION_CONDITIONS'] = ['$(inherited)', 'RELEASE_BETA']
            config.build_settings['OTHER_SWIFT_FLAGS'] = ['$(inherited)', '-D', 'RELEASE_BETA']
        end
    end
  end
end

[参考文章]https://zhuanlan.zhihu.com/p/144529227

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容