You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Xcode 9.3编译iOS框架时TARGET_OS_IPHONE条件判断异常求助

解决Xcode 9.3条件编译TARGET_OS_*宏判断反转的问题

嘿,这个问题我之前也碰到过几次,大概率是Xcode的目标配置或者宏定义出了小问题,给你几个排查方向:

  • 先确认当前编译的目标和SDK设置
    先看Xcode顶部的scheme选择,是不是不小心选成了macOS的目标?再去目标的Build Settings里检查「Base SDK」和「Deployment Target」,确保Base SDK是iOS,Deployment Target设置的是iOS版本(比如9.0+),而不是macOS的版本。

  • 检查预处理器宏的手动定义
    去Build Settings -> Apple Clang - Preprocessing -> Preprocessor Macros里,看看Debug和Release配置下有没有手动加了TARGET_OS_IPHONE=0或者TARGET_OS_IOS=0这类宏?有时候复制配置或者误操作会加上这个,直接把条件判断搞反了。

  • 换个更可靠的判断宏
    TARGET_OS_*系列宏有时候会因为交叉编译或者SDK的兼容问题出现误判,试试用__IPHONE_OS_VERSION_MIN_REQUIRED来判断,这个宏只要你的目标是iOS就会被定义,代码改成这样:

    #if defined(__IPHONE_OS_VERSION_MIN_REQUIRED)
    #warning "BUILDING IPHONE"
    #else
    #warning "BUILDING MAC"
    #endif
    

    这个比TARGET_OS_*要稳定很多。

  • 清理Xcode缓存
    Xcode的缓存有时候会抽风,试试按住Option键点击顶部菜单的「Product」,选择「Clean Build Folder」,再去「Window -> Projects」找到你的项目,删除Derived Data,然后重新编译试试。

  • 检查文件的Target Membership
    看看你写这段条件编译的代码文件,是不是同时被加到了macOS的target里?如果同一个文件属于多个target,编译macOS target的时候就会走else分支,确保你当前编译的是iOS target,或者调整文件的target membership只包含iOS目标。

内容的提问来源于stack exchange,提问作者strangetimes

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 06:50:03