iOS 静态库中使用宏定义区分iPhone模拟器与真机---备用

时间:2021-11-24 12:57:30

问题描述

一般项目中,可以使用宏定义来判断模拟器还是真机,这无疑是有效的。

  1. #if TARGET_IPHONE_SIMULATOR
  2. #define SIMULATOR 1
  3. #elif TARGET_OS_IPHONE
  4. #define SIMULATOR 0
  5. #endif

但是宏是预编译时发生作用的,那么在静态库中是否还能够使用宏定义来区分模拟器与真机?

分析思路

宏定义确实是预编译时发生作用的,但是静态库编译出来的.a文件通常是分为模拟器与真机两个的,及时通过lipo合并为fat.a文件,实际运行调用时所使用的.a文件也不是同一个.

验证与结论

通过试验验证,上面的代码确实能够区分模拟器与真机,即可以在静态库中使用宏定义区分iPhone模拟器与真机