Xcode的项目中,有3个scheme,分别在里面定义了Preprocessor Macros变量:
分别对应着:
- 正式环境:Prod
- 测试环境:Dev
- UAT环境:UAT
然后代码中
根据是否定义对应的宏,去配置不同的变量:
#elseif Prod let SERVER_URL = xxx //生产 。。 |
之前可以正常工作
实现根据宏,条件编译的
但是这次出错了:
找不到对应的变量了:
Use of unresolved identifier Xcode preprocessor
Xcode macros scheme Use of unresolved identifier
xcode scheme preprocessor macro
xcode scheme preprocessor macro not work
xcode scheme preprocessor macro elseif
xcode9 preprocessor macro elseif
把
#if Dev
改为:
#ifdef Dev
结果swift不支持。
xcode swift if define
把Prod改为PROD,结果问题依旧。
找了半天,突然发现,Xcode中Scheme中,还有另外一个配置选项:
Active Complication Conditions
对于UAT和Dev都是分别设置的UAT和Dev,都是正常的。
但是Prod中,却是设置了Test
所以很明显是此处设置的问题。
先去搞清楚:
【总结】
所以去:
去掉之前OC的Preprocessor Macros的定义
加上swift的Active Compilation Conditions的定义:
然后代码中:
//判断当前版本 #if DEV let SERVER_URL =xxx #elseif PROD let SERVER_URL =xxx #elseif UAT let SERVER_URL =xxx #endif |
即可生效。
而之所以此处会把Production的配置中,设置Active Compilation Conditions为Test,是之前之前开发人员逻辑上没有搞清楚,或者是没有及时修改Test为Prod。