区块链技术博客
www.b2bchain.cn

【WWDC21 10056】让您的 iPad 与 iPhone 应用程序在 M1 的 Mac 上大放异彩求职学习资料

本文介绍了【WWDC21 10056】让您的 iPad 与 iPhone 应用程序在 M1 的 Mac 上大放异彩求职学习资料,有助于帮助完成毕业设计以及求职,是一篇很好的资料。

对技术面试,学习经验等有一些体会,在此分享。

作者:土土Edmond木, CocoaPods 历险记 作者,CS & 🎿、🏃‍♀️ 爱好者。

审核:Parsifal,老司机技术周报负责人,微医集团移动诊疗团队负责人

WWDC21 Session 10056 – Qualities of great iPad and iPhone apps on Macs with M1

主讲人:Nils Beck

本文知识目录

【WWDC21 10056】让您的 iPad 与 iPhone 应用程序在 M1 的 Mac 上大放异彩

wwdc21-10056-table-content

引言

在 2020 年 11 月的发布会上,苹果正式发布了搭载自研 M1 芯片的 Mac 与 macOS Big Sur,它们的正式亮相,宣告,苹果正式打通了旗下 iOS、iPadOS 及 macOS 三大独立操作系统之间的壁垒,实现了苹果生态的大一统。

为了帮助开发者们快速过渡到 ARM 平台,苹果推出了 UniversalRosetta、虚拟化技术等一整套解决方案,它可以将现有的 Mac 应用高效快捷的移植到 ARM 架构能兼容的系统中。也使得 iPhone 和 iPad 上的各种 App 也能直接在 macOSBig Sur 且配置了 M1 芯片 的 Mac上运行。也让 Mac App Store 上有了过百万的 iPad 和 iPhone 应用程序,它们在 macOS Big Sur 上有着很棒的体验,而在 macOS Monterey 中他们的体验将会更进一步。

在本演讲中,我们将讨论 4 个主题:

【WWDC21 10056】让您的 iPad 与 iPhone 应用程序在 M1 的 Mac 上大放异彩

wwdc21-10056-00-contents

  • 如何将多个 iOS API 映射到 Mac 的相应功能上;
  • 一些通用的最佳实践,将帮助您的应用程序在配备 M1 的 Mac 上大放异彩;
  • macOS Big Sur 以及 macOS Monterey 的软件更新中所做的改进;
  • Mac App Store 部署的注意事项。

API mappings

配备 M1 芯片的 Mac 让现有的 iPad 和 iPhone 应用程序轻松扩展到 Mac。无需变更 iPad 或 iPhone 应用程序,那些已在 iOS App Store 提交并获得批准的应用程序,也将通过 Mac App Store 向拥有 Macs with M1 的任何人提供服务。

为此,我们非常注重兼容性。让系统 API 尽可能自然的映射到 Mac 的等效功能上。我们的目标是确保在 Mac 上获得流畅的应用体验,而无需您进行任何更改。

Compatibility focused

目前,大多数现有应用程序在 Mac with M1 上运行良好!

【WWDC21 10056】让您的 iPad 与 iPhone 应用程序在 M1 的 Mac 上大放异彩

wwdc21-10056-3-extesnion-topics

小到 iPhone 的效率工具,大到极致的 iPad 游戏和专业应用程序,以及各种扩展。例如,分享扩展、WidgetKit 小组件、照片编辑扩展、VPN 网络扩展、音频单元等等。可以说您现有的 iPad 或 iPhone 应用程序很可能已经在 Mac 上运行良好,开箱即用。

当然,我们支持所有基本功能,例如文本交互、复制和粘贴、Mac 菜单栏等,但也有很多高级功能,例如后台应用程序刷新、用户通知、相机访问、Siri Intent 等。

Tips:iPad and iPhone apps on Apple silicon Macs 中讨论了其中许多主题,建议查看该视频以了解更多详细信息。

【WWDC21 10056】让您的 iPad 与 iPhone 应用程序在 M1 的 Mac 上大放异彩

wwdc21-10056-3-more

如果您希望您的应用程序利用 Mac 提供的更多功能,请考虑构建 Mac Catalyst 版本的应用程序。

可参阅 Qualities of a great Mac Catalyst app 和 What’s new in Mac Catalyst 以了解更多相关信息。

Keyboard input

现在,让我们深入了解我刚才提到的一些 API 的更多细节,为您在 Mac 上提供出色的功能。

【WWDC21 10056】让您的 iPad 与 iPhone 应用程序在 M1 的 Mac 上大放异彩

wwdc21-10056-4-keyboard

您可以使用 Mac 键盘将文本输入到 Text fileds 或者使用 UIKeyCommand 定义键盘快捷键。

UIKeyCommand

早在 iOS 7 里,我们就增加了 UIKeyCommand 特性来支持快捷方式。不过当外部键盘发送键盘命令时,并没有直观的办法知道他们的存在。不像 macOS 用户可以在他们常用的菜单里找到快捷方式。好在 iOS 9 上为了使 iPad 更高效的工作,我们增加了可发现特性,这是一个叠加层,用于显示一个应用程序内当前可用的键盘命令。这个微小的变化使得键盘命令瞬间变得比以往有用多了,并且也使得 UIKeyCommand 成为你的应用程序的一个必要的附加功能。

【WWDC21 10056】让您的 iPad 与 iPhone 应用程序在 M1 的 Mac 上大放异彩

wwdc21-10056-4-uikeycommand-discoverability

更多可参阅 NSHipster 的文章 UIKeyCommand。

UIPress

如果您希望编写自定义的按键处理来获取更多的控制,则可以使用 UIResponder 上的 UIPress API 来实现。毕竟所有 Mac 都有一个物理键盘,每个 UIPress 对象背后都对应一次物理按键的输入,或记录了一次手势操作。与之对应的 UITouch 则是对屏幕上虚拟键盘或手势操作输入的记录。

因此,对于那些已经花费精力支持物理键盘的 iPad 或 iPhone 的应用程序,在 Mac 上的体验同时得到了极大的改进。

Menu bar

菜单栏旨在帮助发现应用程序功能和键盘快捷键。

【WWDC21 10056】让您的 iPad 与 iPhone 应用程序在 M1 的 Mac 上大放异彩

wwdc21-10056-4-menu-bar

菜单栏结构在启动时确定,之后应该或多或少保持不变。menu items 不会被添加或删除,而是被启用或禁用,具体取决于它们当前是否适用。我们考虑到您应用功能的同时,会自动填充您应用的菜单栏。例如,我们可能会添加菜单项来创建新窗口、处理富文本或更改设备方向。

使用 keyCommands 的注意事项

  • 通过 UIResponders.keyCommands 属性直接附加的快捷方式不会出现在菜单栏中;
  • 但无论何时应用,UIResponders.keyCommands 都优先于菜单项的快捷键。

UIMenuBuilder

@MainActor protocol UIMenuBuilder

您可能已经在使用我们在 iOS 13 中更新的 UIMenuBuilder API。UIMenuBuilder 为您的 UIKeyCommands 添加了语义结构。仅需在 App DelegateViewController 中覆盖 buildMenu(with:) 方法以修改 builder 对象。覆盖后的菜单结构决定了系统如何展示菜单的内容。

override func buildMenu(with builder: UIMenuBuilder) {     if builder.system == .main {         menuController = MenuController(with: builder)     } }

要查看如何使用 UIMenuBuilder 对象的示例,请参阅 Adding Menus and Shortcuts to the Menu Bar and User Interface。

前面提到,带有键盘的 iPad 上按住 Command 键时,会展示叠加层用于显示当前应用程序可用的键盘命令。在 Mac 上,传递到构建器的默认结构会有所不同,但您对结构的自定义将反映在主菜单中。UIKeyCommands 依赖响应者链来为其操作找到适用的目标,这决定了是否启用菜单项。

【WWDC21 10056】让您的 iPad 与 iPhone 应用程序在 M1 的 Mac 上大放异彩

wwdc21-10056-4-menu-bar-tipics

有关更多信息,请参阅 “Take your iPad apps to the next level” 和 “Focus on iPad keyboard navigation,” and “Qualities of a great Mac Catalyst app” 。

Drag & Drop

对于在 iPad 和 iPhone 上使用拖放的应用程序,使用 UIDragInteractionUIDropInteraction,这也会自动转移到 Mac。这让人们可以在您的应用程序和其他应用程序之间无缝拖动内容,就像下面的示例中,我将 QR 码从 Qrafter 拖动到我的桌面。

【WWDC21 10056】让您的 iPad 与 iPhone 应用程序在 M1 的 Mac 上大放异彩

wwdc21-10056-5-drag-drop-qrcode

Printing

对于使用 UIPrintInteractionController 打印的应用程序,当在您的代码中启动打印时,它会自动桥接到 Mac 打印对话框。当您采用新的 Info.plist 键 “UIApplicationSupports PrintCommand” 并实现相应的标准打印操作,打印和导出为 PDF 菜单项将自动添加到应用程序的菜单栏中。

【WWDC21 10056】让您的 iPad 与 iPhone 应用程序在 M1 的 Mac 上大放异彩

wwdc21-10056-5-printing

有关此新 API 的更多详细信息,请参阅 What’s new in Mac Catalyst。

Settings bundle

许多应用程序使用 settings bundle,我们将由此自动生成一个 Mac 风格的首选项面板。

【WWDC21 10056】让您的 iPad 与 iPhone 应用程序在 M1 的 Mac 上大放异彩

wwdc21-10056-5-settings-bundle

在 settings bundle 中放置 credits file 也很常见,我们会识别此类情况并将该文本移至 “关于” 窗口中。
但是,如果您想要更多地控制 Mac 上 “关于” 框中显示的内容,您现在还可以选择将 credits file 添加到您的 bundle 中。

【WWDC21 10056】让您的 iPad 与 iPhone 应用程序在 M1 的 Mac 上大放异彩

wwdc21-10056-5-settings-bundle-credites

您可以使用 RTF、RTFD 或 HTML 文件,与 Mac 应用程序执行此操作的方式相同。

Multi scene support

有许多以 iPad 为中心的 API 可以帮助您的应用程序成为出色的 iPad 应用程序。这些都能在 Mac 上完美呈现。因此,通过制作出色的 iPad 应用程序,您还可以让您的应用程序在配备 M1 的 Mac 上变得更好。

如果您的应用程序根据 UIApplicationSupportsMultipleScenesInfo.plist key 支持多个场景,每个场景将被转换成一个单独的,我们自动添加一个 menu item 来创建一个新场景。

【WWDC21 10056】让您的 iPad 与 iPhone 应用程序在 M1 的 Mac 上大放异彩

wwdc21-10056-6-multi-scene-01

在 Mac 上,提供了系统级的设置决定了应用程序退出时是否关闭所有窗口,或者是否在下次启动时恢复现有窗口。如果您的应用支持多个场景,我们会尊重此设置,因此如果所有场景都未生效,或者在某些情况下未发生状态恢复,属于预期范围。

【WWDC21 10056】让您的 iPad 与 iPhone 应用程序在 M1 的 Mac 上大放异彩

wwdc21-10056-6-multi-scene-02

MultiTasking support

iPad 多任务支持会自动转换为 macOS 上可调整大小的窗口。如果您的应用程序已经支持 iPad 上的动态布局更改,则可以在 Mac 上实时调整窗口大小。您可以使用 UIWindowScene 上的 minimumSizemaximumSize API 限制允许的场景大小范围。请注意,调整 window 尺寸时,只有 window scene 尺寸会发生变化。而 UIScreen size 在这种情况下不会改变,仍旧返回的是设备大小。因此,即使在 iPad 上也不要将 UIScreen size 用于布局计算,否则您的 UI 元素最终会出现在错误的位置。

Full screen apps

【WWDC21 10056】让您的 iPad 与 iPhone 应用程序在 M1 的 Mac 上大放异彩

wwdc21-10056-7-full-screen-apps

如果您的应用程序希望控制设备的整个屏幕,我们将使用固定的场景大小和宽高比。但是 window 内容可以根据需要自动进行缩放。如果您的应用程序支持屏幕转向,则可以使用自动添加的菜单栏或通过拖动窗口边缘来更改窗口方向。

【WWDC21 10056】让您的 iPad 与 iPhone 应用程序在 M1 的 Mac 上大放异彩

wwdc21-10056-7-interface-orientations

上图中,通过菜单栏项来更改国际象棋应用程序的方向,并且用户界面会适应以最佳利用每个设备方向。

作者:土土Edmond木, CocoaPods 历险记 作者,CS & 🎿、🏃‍♀️ 爱好者。

审核:Parsifal,老司机技术周报负责人,微医集团移动诊疗团队负责人

WWDC21 Session 10056 – Qualities of great iPad and iPhone apps on Macs with M1

主讲人:Nils Beck

本文知识目录

【WWDC21 10056】让您的 iPad 与 iPhone 应用程序在 M1 的 Mac 上大放异彩

wwdc21-10056-table-content

引言

在 2020 年 11 月的发布会上,苹果正式发布了搭载自研 M1 芯片的 Mac 与 macOS Big Sur,它们的正式亮相,宣告,苹果正式打通了旗下 iOS、iPadOS 及 macOS 三大独立操作系统之间的壁垒,实现了苹果生态的大一统。

为了帮助开发者们快速过渡到 ARM 平台,苹果推出了 UniversalRosetta、虚拟化技术等一整套解决方案,它可以将现有的 Mac 应用高效快捷的移植到 ARM 架构能兼容的系统中。也使得 iPhone 和 iPad 上的各种 App 也能直接在 macOSBig Sur 且配置了 M1 芯片 的 Mac上运行。也让 Mac App Store 上有了过百万的 iPad 和 iPhone 应用程序,它们在 macOS Big Sur 上有着很棒的体验,而在 macOS Monterey 中他们的体验将会更进一步。

在本演讲中,我们将讨论 4 个主题:

【WWDC21 10056】让您的 iPad 与 iPhone 应用程序在 M1 的 Mac 上大放异彩

wwdc21-10056-00-contents

  • 如何将多个 iOS API 映射到 Mac 的相应功能上;
  • 一些通用的最佳实践,将帮助您的应用程序在配备 M1 的 Mac 上大放异彩;
  • macOS Big Sur 以及 macOS Monterey 的软件更新中所做的改进;
  • Mac App Store 部署的注意事项。

API mappings

配备 M1 芯片的 Mac 让现有的 iPad 和 iPhone 应用程序轻松扩展到 Mac。无需变更 iPad 或 iPhone 应用程序,那些已在 iOS App Store 提交并获得批准的应用程序,也将通过 Mac App Store 向拥有 Macs with M1 的任何人提供服务。

为此,我们非常注重兼容性。让系统 API 尽可能自然的映射到 Mac 的等效功能上。我们的目标是确保在 Mac 上获得流畅的应用体验,而无需您进行任何更改。

Compatibility focused

目前,大多数现有应用程序在 Mac with M1 上运行良好!

【WWDC21 10056】让您的 iPad 与 iPhone 应用程序在 M1 的 Mac 上大放异彩

wwdc21-10056-3-extesnion-topics

小到 iPhone 的效率工具,大到极致的 iPad 游戏和专业应用程序,以及各种扩展。例如,分享扩展、WidgetKit 小组件、照片编辑扩展、VPN 网络扩展、音频单元等等。可以说您现有的 iPad 或 iPhone 应用程序很可能已经在 Mac 上运行良好,开箱即用。

当然,我们支持所有基本功能,例如文本交互、复制和粘贴、Mac 菜单栏等,但也有很多高级功能,例如后台应用程序刷新、用户通知、相机访问、Siri Intent 等。

Tips:iPad and iPhone apps on Apple silicon Macs 中讨论了其中许多主题,建议查看该视频以了解更多详细信息。

【WWDC21 10056】让您的 iPad 与 iPhone 应用程序在 M1 的 Mac 上大放异彩

wwdc21-10056-3-more

如果您希望您的应用程序利用 Mac 提供的更多功能,请考虑构建 Mac Catalyst 版本的应用程序。

可参阅 Qualities of a great Mac Catalyst app 和 What’s new in Mac Catalyst 以了解更多相关信息。

Keyboard input

现在,让我们深入了解我刚才提到的一些 API 的更多细节,为您在 Mac 上提供出色的功能。

【WWDC21 10056】让您的 iPad 与 iPhone 应用程序在 M1 的 Mac 上大放异彩

wwdc21-10056-4-keyboard

您可以使用 Mac 键盘将文本输入到 Text fileds 或者使用 UIKeyCommand 定义键盘快捷键。

UIKeyCommand

早在 iOS 7 里,我们就增加了 UIKeyCommand 特性来支持快捷方式。不过当外部键盘发送键盘命令时,并没有直观的办法知道他们的存在。不像 macOS 用户可以在他们常用的菜单里找到快捷方式。好在 iOS 9 上为了使 iPad 更高效的工作,我们增加了可发现特性,这是一个叠加层,用于显示一个应用程序内当前可用的键盘命令。这个微小的变化使得键盘命令瞬间变得比以往有用多了,并且也使得 UIKeyCommand 成为你的应用程序的一个必要的附加功能。

【WWDC21 10056】让您的 iPad 与 iPhone 应用程序在 M1 的 Mac 上大放异彩

wwdc21-10056-4-uikeycommand-discoverability

更多可参阅 NSHipster 的文章 UIKeyCommand。

UIPress

如果您希望编写自定义的按键处理来获取更多的控制,则可以使用 UIResponder 上的 UIPress API 来实现。毕竟所有 Mac 都有一个物理键盘,每个 UIPress 对象背后都对应一次物理按键的输入,或记录了一次手势操作。与之对应的 UITouch 则是对屏幕上虚拟键盘或手势操作输入的记录。

因此,对于那些已经花费精力支持物理键盘的 iPad 或 iPhone 的应用程序,在 Mac 上的体验同时得到了极大的改进。

Menu bar

菜单栏旨在帮助发现应用程序功能和键盘快捷键。

【WWDC21 10056】让您的 iPad 与 iPhone 应用程序在 M1 的 Mac 上大放异彩

wwdc21-10056-4-menu-bar

菜单栏结构在启动时确定,之后应该或多或少保持不变。menu items 不会被添加或删除,而是被启用或禁用,具体取决于它们当前是否适用。我们考虑到您应用功能的同时,会自动填充您应用的菜单栏。例如,我们可能会添加菜单项来创建新窗口、处理富文本或更改设备方向。

使用 keyCommands 的注意事项

  • 通过 UIResponders.keyCommands 属性直接附加的快捷方式不会出现在菜单栏中;
  • 但无论何时应用,UIResponders.keyCommands 都优先于菜单项的快捷键。

UIMenuBuilder

@MainActor protocol UIMenuBuilder

您可能已经在使用我们在 iOS 13 中更新的 UIMenuBuilder API。UIMenuBuilder 为您的 UIKeyCommands 添加了语义结构。仅需在 App DelegateViewController 中覆盖 buildMenu(with:) 方法以修改 builder 对象。覆盖后的菜单结构决定了系统如何展示菜单的内容。

override func buildMenu(with builder: UIMenuBuilder) {     if builder.system == .main {         menuController = MenuController(with: builder)     } }

要查看如何使用 UIMenuBuilder 对象的示例,请参阅 Adding Menus and Shortcuts to the Menu Bar and User Interface。

前面提到,带有键盘的 iPad 上按住 Command 键时,会展示叠加层用于显示当前应用程序可用的键盘命令。在 Mac 上,传递到构建器的默认结构会有所不同,但您对结构的自定义将反映在主菜单中。UIKeyCommands 依赖响应者链来为其操作找到适用的目标,这决定了是否启用菜单项。

【WWDC21 10056】让您的 iPad 与 iPhone 应用程序在 M1 的 Mac 上大放异彩

wwdc21-10056-4-menu-bar-tipics

有关更多信息,请参阅 “Take your iPad apps to the next level” 和 “Focus on iPad keyboard navigation,” and “Qualities of a great Mac Catalyst app” 。

Drag & Drop

对于在 iPad 和 iPhone 上使用拖放的应用程序,使用 UIDragInteractionUIDropInteraction,这也会自动转移到 Mac。这让人们可以在您的应用程序和其他应用程序之间无缝拖动内容,就像下面的示例中,我将 QR 码从 Qrafter 拖动到我的桌面。

【WWDC21 10056】让您的 iPad 与 iPhone 应用程序在 M1 的 Mac 上大放异彩

wwdc21-10056-5-drag-drop-qrcode

Printing

对于使用 UIPrintInteractionController 打印的应用程序,当在您的代码中启动打印时,它会自动桥接到 Mac 打印对话框。当您采用新的 Info.plist 键 “UIApplicationSupports PrintCommand” 并实现相应的标准打印操作,打印和导出为 PDF 菜单项将自动添加到应用程序的菜单栏中。

【WWDC21 10056】让您的 iPad 与 iPhone 应用程序在 M1 的 Mac 上大放异彩

wwdc21-10056-5-printing

有关此新 API 的更多详细信息,请参阅 What’s new in Mac Catalyst。

Settings bundle

许多应用程序使用 settings bundle,我们将由此自动生成一个 Mac 风格的首选项面板。

【WWDC21 10056】让您的 iPad 与 iPhone 应用程序在 M1 的 Mac 上大放异彩

wwdc21-10056-5-settings-bundle

在 settings bundle 中放置 credits file 也很常见,我们会识别此类情况并将该文本移至 “关于” 窗口中。
但是,如果您想要更多地控制 Mac 上 “关于” 框中显示的内容,您现在还可以选择将 credits file 添加到您的 bundle 中。

【WWDC21 10056】让您的 iPad 与 iPhone 应用程序在 M1 的 Mac 上大放异彩

wwdc21-10056-5-settings-bundle-credites

您可以使用 RTF、RTFD 或 HTML 文件,与 Mac 应用程序执行此操作的方式相同。

Multi scene support

有许多以 iPad 为中心的 API 可以帮助您的应用程序成为出色的 iPad 应用程序。这些都能在 Mac 上完美呈现。因此,通过制作出色的 iPad 应用程序,您还可以让您的应用程序在配备 M1 的 Mac 上变得更好。

如果您的应用程序根据 UIApplicationSupportsMultipleScenesInfo.plist key 支持多个场景,每个场景将被转换成一个单独的,我们自动添加一个 menu item 来创建一个新场景。

【WWDC21 10056】让您的 iPad 与 iPhone 应用程序在 M1 的 Mac 上大放异彩

wwdc21-10056-6-multi-scene-01

在 Mac 上,提供了系统级的设置决定了应用程序退出时是否关闭所有窗口,或者是否在下次启动时恢复现有窗口。如果您的应用支持多个场景,我们会尊重此设置,因此如果所有场景都未生效,或者在某些情况下未发生状态恢复,属于预期范围。

【WWDC21 10056】让您的 iPad 与 iPhone 应用程序在 M1 的 Mac 上大放异彩

wwdc21-10056-6-multi-scene-02

MultiTasking support

iPad 多任务支持会自动转换为 macOS 上可调整大小的窗口。如果您的应用程序已经支持 iPad 上的动态布局更改,则可以在 Mac 上实时调整窗口大小。您可以使用 UIWindowScene 上的 minimumSizemaximumSize API 限制允许的场景大小范围。请注意,调整 window 尺寸时,只有 window scene 尺寸会发生变化。而 UIScreen size 在这种情况下不会改变,仍旧返回的是设备大小。因此,即使在 iPad 上也不要将 UIScreen size 用于布局计算,否则您的 UI 元素最终会出现在错误的位置。

Full screen apps

【WWDC21 10056】让您的 iPad 与 iPhone 应用程序在 M1 的 Mac 上大放异彩

wwdc21-10056-7-full-screen-apps

如果您的应用程序希望控制设备的整个屏幕,我们将使用固定的场景大小和宽高比。但是 window 内容可以根据需要自动进行缩放。如果您的应用程序支持屏幕转向,则可以使用自动添加的菜单栏或通过拖动窗口边缘来更改窗口方向。

【WWDC21 10056】让您的 iPad 与 iPhone 应用程序在 M1 的 Mac 上大放异彩

wwdc21-10056-7-interface-orientations

上图中,通过菜单栏项来更改国际象棋应用程序的方向,并且用户界面会适应以最佳利用每个设备方向。

作者:土土Edmond木, CocoaPods 历险记 作者,CS & 🎿、🏃‍♀️ 爱好者。

审核:Parsifal,老司机技术周报负责人,微医集团移动诊疗团队负责人

WWDC21 Session 10056 – Qualities of great iPad and iPhone apps on Macs with M1

主讲人:Nils Beck

本文知识目录

【WWDC21 10056】让您的 iPad 与 iPhone 应用程序在 M1 的 Mac 上大放异彩

wwdc21-10056-table-content

引言

在 2020 年 11 月的发布会上,苹果正式发布了搭载自研 M1 芯片的 Mac 与 macOS Big Sur,它们的正式亮相,宣告,苹果正式打通了旗下 iOS、iPadOS 及 macOS 三大独立操作系统之间的壁垒,实现了苹果生态的大一统。

为了帮助开发者们快速过渡到 ARM 平台,苹果推出了 UniversalRosetta、虚拟化技术等一整套解决方案,它可以将现有的 Mac 应用高效快捷的移植到 ARM 架构能兼容的系统中。也使得 iPhone 和 iPad 上的各种 App 也能直接在 macOSBig Sur 且配置了 M1 芯片 的 Mac上运行。也让 Mac App Store 上有了过百万的 iPad 和 iPhone 应用程序,它们在 macOS Big Sur 上有着很棒的体验,而在 macOS Monterey 中他们的体验将会更进一步。

在本演讲中,我们将讨论 4 个主题:

【WWDC21 10056】让您的 iPad 与 iPhone 应用程序在 M1 的 Mac 上大放异彩

wwdc21-10056-00-contents

  • 如何将多个 iOS API 映射到 Mac 的相应功能上;
  • 一些通用的最佳实践,将帮助您的应用程序在配备 M1 的 Mac 上大放异彩;
  • macOS Big Sur 以及 macOS Monterey 的软件更新中所做的改进;
  • Mac App Store 部署的注意事项。

API mappings

配备 M1 芯片的 Mac 让现有的 iPad 和 iPhone 应用程序轻松扩展到 Mac。无需变更 iPad 或 iPhone 应用程序,那些已在 iOS App Store 提交并获得批准的应用程序,也将通过 Mac App Store 向拥有 Macs with M1 的任何人提供服务。

为此,我们非常注重兼容性。让系统 API 尽可能自然的映射到 Mac 的等效功能上。我们的目标是确保在 Mac 上获得流畅的应用体验,而无需您进行任何更改。

Compatibility focused

目前,大多数现有应用程序在 Mac with M1 上运行良好!

【WWDC21 10056】让您的 iPad 与 iPhone 应用程序在 M1 的 Mac 上大放异彩

wwdc21-10056-3-extesnion-topics

小到 iPhone 的效率工具,大到极致的 iPad 游戏和专业应用程序,以及各种扩展。例如,分享扩展、WidgetKit 小组件、照片编辑扩展、VPN 网络扩展、音频单元等等。可以说您现有的 iPad 或 iPhone 应用程序很可能已经在 Mac 上运行良好,开箱即用。

当然,我们支持所有基本功能,例如文本交互、复制和粘贴、Mac 菜单栏等,但也有很多高级功能,例如后台应用程序刷新、用户通知、相机访问、Siri Intent 等。

Tips:iPad and iPhone apps on Apple silicon Macs 中讨论了其中许多主题,建议查看该视频以了解更多详细信息。

【WWDC21 10056】让您的 iPad 与 iPhone 应用程序在 M1 的 Mac 上大放异彩

wwdc21-10056-3-more

如果您希望您的应用程序利用 Mac 提供的更多功能,请考虑构建 Mac Catalyst 版本的应用程序。

可参阅 Qualities of a great Mac Catalyst app 和 What’s new in Mac Catalyst 以了解更多相关信息。

Keyboard input

现在,让我们深入了解我刚才提到的一些 API 的更多细节,为您在 Mac 上提供出色的功能。

【WWDC21 10056】让您的 iPad 与 iPhone 应用程序在 M1 的 Mac 上大放异彩

wwdc21-10056-4-keyboard

您可以使用 Mac 键盘将文本输入到 Text fileds 或者使用 UIKeyCommand 定义键盘快捷键。

UIKeyCommand

早在 iOS 7 里,我们就增加了 UIKeyCommand 特性来支持快捷方式。不过当外部键盘发送键盘命令时,并没有直观的办法知道他们的存在。不像 macOS 用户可以在他们常用的菜单里找到快捷方式。好在 iOS 9 上为了使 iPad 更高效的工作,我们增加了可发现特性,这是一个叠加层,用于显示一个应用程序内当前可用的键盘命令。这个微小的变化使得键盘命令瞬间变得比以往有用多了,并且也使得 UIKeyCommand 成为你的应用程序的一个必要的附加功能。

【WWDC21 10056】让您的 iPad 与 iPhone 应用程序在 M1 的 Mac 上大放异彩

wwdc21-10056-4-uikeycommand-discoverability

更多可参阅 NSHipster 的文章 UIKeyCommand。

UIPress

如果您希望编写自定义的按键处理来获取更多的控制,则可以使用 UIResponder 上的 UIPress API 来实现。毕竟所有 Mac 都有一个物理键盘,每个 UIPress 对象背后都对应一次物理按键的输入,或记录了一次手势操作。与之对应的 UITouch 则是对屏幕上虚拟键盘或手势操作输入的记录。

因此,对于那些已经花费精力支持物理键盘的 iPad 或 iPhone 的应用程序,在 Mac 上的体验同时得到了极大的改进。

Menu bar

菜单栏旨在帮助发现应用程序功能和键盘快捷键。

【WWDC21 10056】让您的 iPad 与 iPhone 应用程序在 M1 的 Mac 上大放异彩

wwdc21-10056-4-menu-bar

菜单栏结构在启动时确定,之后应该或多或少保持不变。menu items 不会被添加或删除,而是被启用或禁用,具体取决于它们当前是否适用。我们考虑到您应用功能的同时,会自动填充您应用的菜单栏。例如,我们可能会添加菜单项来创建新窗口、处理富文本或更改设备方向。

使用 keyCommands 的注意事项

  • 通过 UIResponders.keyCommands 属性直接附加的快捷方式不会出现在菜单栏中;
  • 但无论何时应用,UIResponders.keyCommands 都优先于菜单项的快捷键。

UIMenuBuilder

@MainActor protocol UIMenuBuilder

您可能已经在使用我们在 iOS 13 中更新的 UIMenuBuilder API。UIMenuBuilder 为您的 UIKeyCommands 添加了语义结构。仅需在 App DelegateViewController 中覆盖 buildMenu(with:) 方法以修改 builder 对象。覆盖后的菜单结构决定了系统如何展示菜单的内容。

override func buildMenu(with builder: UIMenuBuilder) {     if builder.system == .main {         menuController = MenuController(with: builder)     } }

要查看如何使用 UIMenuBuilder 对象的示例,请参阅 Adding Menus and Shortcuts to the Menu Bar and User Interface。

前面提到,带有键盘的 iPad 上按住 Command 键时,会展示叠加层用于显示当前应用程序可用的键盘命令。在 Mac 上,传递到构建器的默认结构会有所不同,但您对结构的自定义将反映在主菜单中。UIKeyCommands 依赖响应者链来为其操作找到适用的目标,这决定了是否启用菜单项。

【WWDC21 10056】让您的 iPad 与 iPhone 应用程序在 M1 的 Mac 上大放异彩

wwdc21-10056-4-menu-bar-tipics

有关更多信息,请参阅 “Take your iPad apps to the next level” 和 “Focus on iPad keyboard navigation,” and “Qualities of a great Mac Catalyst app” 。

Drag & Drop

对于在 iPad 和 iPhone 上使用拖放的应用程序,使用 UIDragInteractionUIDropInteraction,这也会自动转移到 Mac。这让人们可以在您的应用程序和其他应用程序之间无缝拖动内容,就像下面的示例中,我将 QR 码从 Qrafter 拖动到我的桌面。

【WWDC21 10056】让您的 iPad 与 iPhone 应用程序在 M1 的 Mac 上大放异彩

wwdc21-10056-5-drag-drop-qrcode

Printing

对于使用 UIPrintInteractionController 打印的应用程序,当在您的代码中启动打印时,它会自动桥接到 Mac 打印对话框。当您采用新的 Info.plist 键 “UIApplicationSupports PrintCommand” 并实现相应的标准打印操作,打印和导出为 PDF 菜单项将自动添加到应用程序的菜单栏中。

【WWDC21 10056】让您的 iPad 与 iPhone 应用程序在 M1 的 Mac 上大放异彩

wwdc21-10056-5-printing

有关此新 API 的更多详细信息,请参阅 What’s new in Mac Catalyst。

Settings bundle

许多应用程序使用 settings bundle,我们将由此自动生成一个 Mac 风格的首选项面板。

【WWDC21 10056】让您的 iPad 与 iPhone 应用程序在 M1 的 Mac 上大放异彩

wwdc21-10056-5-settings-bundle

在 settings bundle 中放置 credits file 也很常见,我们会识别此类情况并将该文本移至 “关于” 窗口中。
但是,如果您想要更多地控制 Mac 上 “关于” 框中显示的内容,您现在还可以选择将 credits file 添加到您的 bundle 中。

【WWDC21 10056】让您的 iPad 与 iPhone 应用程序在 M1 的 Mac 上大放异彩

wwdc21-10056-5-settings-bundle-credites

您可以使用 RTF、RTFD 或 HTML 文件,与 Mac 应用程序执行此操作的方式相同。

Multi scene support

有许多以 iPad 为中心的 API 可以帮助您的应用程序成为出色的 iPad 应用程序。这些都能在 Mac 上完美呈现。因此,通过制作出色的 iPad 应用程序,您还可以让您的应用程序在配备 M1 的 Mac 上变得更好。

如果您的应用程序根据 UIApplicationSupportsMultipleScenesInfo.plist key 支持多个场景,每个场景将被转换成一个单独的,我们自动添加一个 menu item 来创建一个新场景。

【WWDC21 10056】让您的 iPad 与 iPhone 应用程序在 M1 的 Mac 上大放异彩

wwdc21-10056-6-multi-scene-01

在 Mac 上,提供了系统级的设置决定了应用程序退出时是否关闭所有窗口,或者是否在下次启动时恢复现有窗口。如果您的应用支持多个场景,我们会尊重此设置,因此如果所有场景都未生效,或者在某些情况下未发生状态恢复,属于预期范围。

【WWDC21 10056】让您的 iPad 与 iPhone 应用程序在 M1 的 Mac 上大放异彩

wwdc21-10056-6-multi-scene-02

MultiTasking support

iPad 多任务支持会自动转换为 macOS 上可调整大小的窗口。如果您的应用程序已经支持 iPad 上的动态布局更改,则可以在 Mac 上实时调整窗口大小。您可以使用 UIWindowScene 上的 minimumSizemaximumSize API 限制允许的场景大小范围。请注意,调整 window 尺寸时,只有 window scene 尺寸会发生变化。而 UIScreen size 在这种情况下不会改变,仍旧返回的是设备大小。因此,即使在 iPad 上也不要将 UIScreen size 用于布局计算,否则您的 UI 元素最终会出现在错误的位置。

Full screen apps

【WWDC21 10056】让您的 iPad 与 iPhone 应用程序在 M1 的 Mac 上大放异彩

wwdc21-10056-7-full-screen-apps

如果您的应用程序希望控制设备的整个屏幕,我们将使用固定的场景大小和宽高比。但是 window 内容可以根据需要自动进行缩放。如果您的应用程序支持屏幕转向,则可以使用自动添加的菜单栏或通过拖动窗口边缘来更改窗口方向。

【WWDC21 10056】让您的 iPad 与 iPhone 应用程序在 M1 的 Mac 上大放异彩

wwdc21-10056-7-interface-orientations

上图中,通过菜单栏项来更改国际象棋应用程序的方向,并且用户界面会适应以最佳利用每个设备方向。

部分转自互联网,侵权删除联系

赞(0) 打赏
部分文章转自网络,侵权联系删除b2bchain区块链学习技术社区 » 【WWDC21 10056】让您的 iPad 与 iPhone 应用程序在 M1 的 Mac 上大放异彩求职学习资料
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

b2b链

联系我们联系我们