isiOSAppOnMac与isMacCatalystApp的区别及相关技术疑问
问题解答
你的应用不属于Catalyst,它的专属名称是「iOS App on Mac」(也叫「Designed for iPad」Mac应用)
这类应用是直接把iPad应用打包,仅在Apple Silicon Mac上原生运行,基本无需修改核心代码(最多做少量适配),完全依托iOS运行环境在Mac上兼容执行。
Catalyst与它的实现差异
- 你的这类「iOS App on Mac」:
- 仅限Apple Silicon Mac,直接复用iPad应用的二进制文件,在Mac上模拟iOS环境运行,界面会自动适配Mac窗口,但交互逻辑完全沿用iPad版本。
- 上架时选择「My Mac (Designed for iPad)」目标平台即可,无需大规模改动代码。
- Catalyst(Mac Catalyst):
- 同时支持Apple Silicon和Intel Mac,是将UIKit应用适配为Mac风格AppKit应用的技术,允许开发者用同一套代码库同时构建iOS和Mac应用。
- 可自定义Mac专属的菜单栏、工具栏等界面元素,还能调用部分AppKit接口,Mac版本的体验会更贴近原生Mac应用。
使用Catalyst不需要从UIKit切换到AppKit
Catalyst的核心就是让你基于UIKit代码库开发,同时可按需引入AppKit的API实现Mac专属功能,无需彻底切换到AppKit。同一个项目里可以混用两者的能力,比如给Mac版本添加菜单栏,iOS版本保持原有UI即可。
ProcessInfo扩展中两个标识的中文解释及区别
extension ProcessInfo { // iOS 13.0及以上可用,判断当前应用是否为Mac Catalyst应用 @available(iOS 13.0, *) open var isMacCatalystApp: Bool { get } // iOS 14.0及以上可用,判断当前应用是否为运行在Mac上的iOS/iPad应用(即「Designed for iPad」Mac应用) @available(iOS 14.0, *) open var isiOSAppOnMac: Bool { get } }
isMacCatalystApp:返回true时,说明当前应用是通过Mac Catalyst技术构建的、适配Mac的UIKit应用,支持Intel和Apple Silicon Mac。isiOSAppOnMac:返回true时,说明当前是iPad应用直接在Apple Silicon Mac上运行,也就是你开发的这类「Designed for iPad」Mac应用。
内容的提问来源于stack exchange,提问作者Dan Rosenstark
相关产品推荐
相关产品推荐

