苹果系列:跨平台编译的宏定义选择(区分ios和mac)

本文涉及的产品
云数据库 Redis 版,社区版 2GB
推荐场景:
搭建游戏排行榜
简介: 大意: 光用TARGET_OS_MAC并不能够区分ios和mac,需要像这样: #if TARGET_OS_IPHONE #define VIEW_CLASS UIView #elif TARGET_OS_MAC #define VIEW_CLASS NSView #endif 先检查TARGET_OS_IPHONE 这个宏,在ios下(无论真机还是模拟器)该宏被定义;若未定义该宏则检查TARGET_OS_MAC。

大意:

光用TARGET_OS_MAC并不能够区分ios和mac,需要像这样:

#if TARGET_OS_IPHONE
#define VIEW_CLASS UIView
#elif TARGET_OS_MAC
#define VIEW_CLASS NSView
#endif

先检查TARGET_OS_IPHONE 这个宏,在ios下(无论真机还是模拟器)该宏被定义;若未定义该宏则检查TARGET_OS_MAC。



原文如下:

Yesterday, I was messing around building shared NSLayoutConstraint code to be used across iOS and OS X. I put in a few #if TARGET_OS_MAC directives, assuming they'd just work.

They didn't.

Turns out that you should always check for TARGET_OS_IPHONE first, before TARGET_OS_MAC because the latter is true on the iPhone but the former is not on OS X.

Here are some of the most common checks suggested to me yesterday as I messed with this dilemma.

  • #if TARGET_OS_MAC
  • #if TARGET_OS_IPHONE
  • #if TARGET_IPHONE_SIMULATOR
  • #if TARGET_OS_EMBEDDED
  • #if defined(__MAC_OS_X_VERSION_MIN_REQUIRED)
  • #if defined(__IPHONE_OS_MIN_VERSION_REQUIRED)

And here are the results of running them on the Simulator, iPhone device and OS X:

SIMULATOR
Target OS Mac
Target OS iPhone
No Target OS Embedded
Target iPhone Simulator
Mac OS X Version Min Required is NOT defined
iPhone OS X Version Min Required is NOT defined

PHONE
Target OS Mac
Target OS iPhone
Target OS Embedded
No Target iPhone Simulator
Mac OS X Version Min Required is NOT defined
iPhone OS X Version Min Required is NOT defined

OS X
Target OS Mac
No Target OS iPhone
No Target OS Embedded
No Target iPhone Simulator
Mac OS X Version Min Required is defined
iPhone OS X Version Min Required is NOT defined

Since I was most interested in determining whether to use NSBox/NSView vs UIView, my solution ended up looking like this:

#if TARGET_OS_IPHONE
#define VIEW_CLASS UIView
#elif TARGET_OS_MAC
#define VIEW_CLASS NSView
#endif

This approach ensured that the iPhone platform triggered first, and then the second check mandated OS X. This created definitions that allowed my code to successfully compile and execute cross-platform.




相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore     ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库 ECS 实例和一台目标数据库 RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
目录
相关文章
|
1月前
|
iOS开发 开发者
【教程】苹果 iOS 证书制作教程
【教程】苹果 iOS 证书制作教程
|
2月前
|
iOS开发 开发者
苹果iOS App Store上架操作流程详解:从开发者账号到应用发布
很多开发者在开发完iOS APP、进行内测后,下一步就面临上架App Store,不过也有很多同学对APP上架App Store的流程不太了解,下面我们来说一下iOS APP上架App Store的具体流程,如有未涉及到的部分,大家可以及时咨询,共同探讨。
|
3月前
|
移动开发 安全 前端开发
iOS Class Guard 成功了,但无法区分差异
iOS Class Guard 成功了,但无法区分差异
15 0
|
6月前
|
存储 网络安全 数据安全/隐私保护
最新版 苹果 IOS AppStore证书申请全流程 包括p12文件
最新版 苹果 IOS AppStore证书申请全流程 包括p12文件
|
6月前
|
存储 数据安全/隐私保护 iOS开发
iOS创建苹果证书、制作p12证书流程
iOS创建苹果证书、制作p12证书流程
|
2月前
|
iOS开发 开发者
苹果 iOS App Store 上架操作流程详解:从开发者账号到应用发布
苹果 iOS App Store 上架操作流程详解:从开发者账号到应用发布
|
3月前
|
机器学习/深度学习 人工智能 PyTorch
AI日报:苹果为使用Mac的人工智能开发者推出开源工具
AI日报:苹果为使用Mac的人工智能开发者推出开源工具
49 0
|
4月前
|
移动开发 安全 Shell
iOS Class Guard 成功了,但无法区分差异
我正在开发一个静态库,并使用 Polidea 的 iOS Class Guard 来混淆我的静态库。我按照步骤在项目的根路径中下载 obfuscate_project,更改其中所需的名称,最后在终端中运行 bash obfuscate_project。我收到一条消息,说我的构建成功,但我找不到我的symbols.h 文件。我还注意到生成了一个构建文件夹。我的问题是,混淆真的发生了吗?如果是这样,我该如何检查?混淆的项目是否在我的构建文件夹中?
|
4月前
|
JavaScript 算法 前端开发
Mac下编译dinky-web(踩坑篇)
Mac下编译dinky-web(踩坑篇)
64 0
|
6月前
|
存储 数据安全/隐私保护 iOS开发
2022最新苹果iOS证书制作教程
2022最新苹果iOS证书制作教程