Bring your iOS app to the Mac
System & Services 进阶 20m

将你的 iOS 应用带到 Mac

Bring your iOS app to the Mac

2022年6月6日

在 Apple 官方观看视频

一句话判断

两条路径——原生 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 上有双倍回报
WWDC 2022