在开发中经常用 target 区分正式、测试环境,用到自定义的预编译宏来判断,OC中可以在 target 的 Preprocessor Macros 里设置,Swift 则不同。
使用xcconfig设置预编译宏
本文以自定义 RELEASE_BETA 为例
- 打开你的 Xcode 项目,选择 项目(Project)→ Info → Configurations
- 找到 Release,点击旁边的齿轮按钮 → 选择 Duplicate “Release”
- 将新建项命名为 Release_Bate
-
在项目跟目录新增xcconfig文件
创建xcconfig文件 - xcconfig文件命名规范
所在文件夹-工程名-Release_Bate.xcconfig - 配置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
- 关联xcconfig文件
选择PROJECT -> Info -> Configurations -> Release_Beta,选择对应target,将原有CocoaPods生成的xcconfig替换为刚创建的xcconfig - 设置完成
在用到的地方使用:
#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
