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

如何在编译阶段检测当前是否为iOS模拟器构建代码?

iOS模拟器ARM架构下,编译阶段区分真机与模拟器的正确方法

自从Apple推出M系列芯片的Mac后,iOS模拟器也开始采用ARM架构,这导致原来通过检测CPU架构(比如__arm__/__x86_64__)来区分真机和模拟器的方法彻底失效——现在模拟器和真机都可能是ARM架构。

正确的做法是使用Apple官方提供的条件宏定义,直接从编译目标层面判断,而非依赖架构:

核心宏:TARGET_OS_SIMULATOR

这个宏定义在<TargetConditionals.h>头文件中,Xcode会根据当前的编译目标自动设置其值:

  • 当为iOS模拟器构建时,TARGET_OS_SIMULATOR的值为1
  • 当为iOS真机构建时,TARGET_OS_SIMULATOR的值为0

代码示例

// 先引入系统头文件
#include <TargetConditionals.h>

#ifdef TARGET_OS_SIMULATOR
    // 仅在模拟器编译时生效的代码
    NSLog(@"当前为iOS模拟器构建");
#else
    // 仅在真机编译时生效的代码
    NSLog(@"当前为iOS真机构建");
#endif

注意事项

  • 不要再用架构相关宏(如__arm64__、__x86_64__)判断,因为M系列Mac的模拟器和iOS真机都是ARM64架构,会导致误判。
  • <TargetConditionals.h>是Xcode自带的系统头文件,无需额外引入依赖,直接使用即可。
  • 这个宏在所有支持ARM模拟器的Xcode版本中都兼容,是官方推荐的标准做法。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 04:52:37