将你的 iOS 应用带到 Mac
Bring your iOS app to the Mac
2022年6月6日
一句话判断
两条路径——原生 iOS on M1 或 Mac Catalyst——今年都拿到了关键升级,Touch Alternatives 和 Desktop-class API 的自动桥接让 Mac 适配的成本降了一个档次。
这场 Session 讲了什么
将 iOS 应用带到 Mac 有两条路径,今年都有新东西:
原生 iOS on M1 的两个新 plist key:
UISupportsTrueScreenSizeOnMac:让应用获得真实的屏幕尺寸和像素密度,而不是兼容的 iPad 尺寸UILaunchToFullScreenByDefaultOnMac:启动时直接全屏
Touch Alternatives 自动映射:通过 com.apple.uikit.inputalternatives.plist 配置文件,让键盘/鼠标/触控板输入自动转换为 iOS 多点触控手势。支持五种控制模式:点击、倾斜、拖拽、滑动和直接触摸。首次启动时系统会展示控制教程。
Mac Catalyst 的 Desktop-class API 桥接:iPadOS 16 的新 API 自动翻译为原生 Mac 表示:
- UINavigationBar 的控件迁移到 NSToolbar
- 中心区域的按钮变成 NSToolbarItem
- 文档应用自动获得标题栏文件代理图标
- File 菜单自动获得复制、移动、重命名、导出等文档操作
- Optimize for Mac 模式下使用原生 Mac 字体渲染,文字像素级清晰
值得深挖的点
Touch Alternatives 的游戏场景解决了 iOS 游戏上 Mac 的核心障碍——触摸到键鼠的映射。Sky: Children of the Light 是 Session 提到的标杆案例。配置文件允许你选择在教程中突出展示哪些控制方式(tap/tilt/drag/swipe/direct touch),所有模式都会同时生效,教程只是帮用户理解最核心的操作。
“Optimize for Mac” 的文字渲染差异容易被忽略。iPad 模式下文字先按 iPad 尺寸渲染再缩放到 77%,结果就是文字边缘有轻微模糊。Mac 模式下使用原生字体渲染,像素级锐利。如果你的应用有大量文字内容(笔记、阅读器、编辑器),这个差异用户是能感知到的。
Desktop-class iPad API 的自动桥接是今年最大的”免费升级”。你在 iPadOS 16 中采用的 UICellConfigurationState、UIEditMenuInteraction、UINavigationItem 的 document 视图等新 API,在 Catalyst 中会自动翻译成原生 Mac 控件。一份代码,两个平台的原生体验。
代码片段
配置 Touch Alternatives(plist):
<!-- com.apple.uikit.inputalternatives.plist -->
<dict>
<!-- 启用触摸替代 -->
<key>defaultEnablement</key>
<string>enabled</string>
<!-- 首次启动展示的控制教程 -->
<key>requiredOnboarding</key>
<array>
<string>tap</string>
<string>swipe</string>
</array>
</dict>
配置 iOS on M1 的全屏启动(Info.plist):
<!-- 支持真实屏幕尺寸 -->
<key>UISupportsTrueScreenSizeOnMac</key>
<true/>
<!-- 启动时全屏 -->
<key>UILaunchToFullScreenByDefaultOnMac</key>
<true/>
Catalyst 中处理文档菜单:
// UIDocument 的标准操作自动出现在 File 菜单中
// 复制、移动、重命名、导出
// 确保你的 UIDocument 子类正确实现这些操作
override func duplicate() throws -> UIDocument {
// 实现文档复制逻辑
let copy = try super.duplicate()
return copy
}
最佳实践
- 游戏优先考虑 Touch Alternatives:不需要重写输入系统,配置 plist 就能让游戏在 Mac 上可玩
- 文档类应用用 Optimize for Mac 模式:原生字体渲染对阅读体验影响明显
- Touch Alternatives 只在教程中突出核心操作:五种模式全部生效,教程只展示最重要的两三种
- 真实屏幕尺寸的 key 适合多媒体应用:游戏和视频播放器获得像素级完美显示
- 直接实现键鼠支持是终极方案:Touch Alternatives 是桥接方案,原生支持在所有设备上体验最好
还有什么值得关注
- Session 展示了 Craft、Darkroom、Night Sky、Asphalt 9 等 Catalyst 标杆应用
- 两个 plist key 不绑定 SDK 版本,旧版 iOS 和 macOS 12.1 之前的 Mac 会安全忽略
- Touch Alternatives 的控制映射也可以在系统偏好设置中由用户自定义
- Desktop-class iPad API 的桥接意味着你为 iPad 做的 UI 升级在 Mac 上有双倍回报