最新消息:20210816 当前crifan.com域名已被污染,为防止失联,请关注(页面右下角的)公众号

【已解决】Xcode项目条件编译出错:Use of unresolved identifier

Xcode crifan 10798浏览 0评论
Xcode的项目中,有3个scheme,分别在里面定义了Preprocessor Macros变量:
分别对应着:
  • 正式环境:Prod
  • 测试环境:Dev
  • UAT环境:UAT

然后代码中
根据是否定义对应的宏,去配置不同的变量:
#elseif Prod
    let SERVER_URL = xxx  //生产
    。。
之前可以正常工作
实现根据宏,条件编译的
但是这次出错了:
找不到对应的变量了:
Use of unresolved identifier Xcode preprocessor
Understanding “Use of Unresolved Identifier” Error In Xcode
xcode – Using inline preprocessor macros in Swift – Stack Overflow
Preprocessor Macros in Xcode with Swift – Stack Overflow
Swift Unit Tests – A Solution for “Use of unresolved identifier”
Xcode macros scheme Use of unresolved identifier
xcode scheme preprocessor macro
xcode scheme preprocessor macro not work
[iOS dev] 使用 Preprocessor Macros 區分 release 和 debug 版本 « Song’s Blog
How to specify DEBUG and RELEASE flags in Xcode with Swift or Objective-C – Kitefaster
xcode scheme preprocessor macro elseif
xcode9   preprocessor macro elseif
#if#ifdef#define等宏定义使用 – 简书
#if Dev
改为:
#ifdef Dev
结果swift不支持。
xcode swift if define
macros – Swift 3: how to use PREPROCESSOR Flags (like `#if DEBUG`) to implement API keys? – Stack Overflow
Swift中如何使用 #if DEBUG – Bob-wei – 博客园
把Prod改为PROD,结果问题依旧。
找了半天,突然发现,Xcode中Scheme中,还有另外一个配置选项:
Active Complication Conditions
对于UAT和Dev都是分别设置的UAT和Dev,都是正常的。
但是Prod中,却是设置了Test
所以很明显是此处设置的问题。
先去搞清楚:
【已解决】Xcode中Active Compilation Conditions和Preprocessor Macros的区别
【总结】
所以去:
去掉之前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。

转载请注明:在路上 » 【已解决】Xcode项目条件编译出错:Use of unresolved identifier

发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
82 queries in 0.162 seconds, using 22.12MB memory