每月收藏与分享(201906,WWDC 2019 专题)

在 6 月初的 WWDC 2019 中,苹果发布了 iOS 13, iPadOS, macOS Catalina, Mac Pro 等新产品,并为开发者带来了一系列 session.

做为一个对 iOS 和 macOS 平台感兴趣的用户,在这个月里,我也观看了不少 session 视频。本文将分享我看过的 WWDC 2019 sessions.

macOS 安全性

在 WWDC 2019 发布的几个系统更新中,个人觉得变化最大的,是 macOS Catalina. 下一个版本的 macOS 在安全性方面有了不少变化:

1. macOS 系统文件存放在只读的 APFS Volume 中,和用户数据分开存放

之前的 macOS 中,系统文件和用户数据全部存放在同一个分区。而下一个版本的 macOS,系统文件放在一个只读的 APFS Volume 中,通过 firmlink 实现统一的路径。这样一来,系统文件不可写,避免了恶意软件对系统文件的修改(同时理论上后续也能够更方便地实现系统还原、减轻 Time Machine 备份压力等功能;当然在系统发布的初期,这种大幅度的变化,估计会导致不少第三方软件出现兼容性问题)。

顺便提一下,最新的 asr 工具,已支持 APFS Volume Replication,并充分利用了 APFS 的快照等特性,对于个人来说,可以在系统迁移等场景下使用。

相关 Session:

2. 第三方软件访问文件系统,需要得到用户授权,从而减弱勒索软件的危害范围

而 macOS Catalina 中,所有第三方软件都必须得到用户的授权(旧版 macOS 只会限制沙盒中的软件),才能够访问文件系统。而且用户还可以控制是让一个软件仅访问「桌面」等文件夹,还是无限制访问整个文件系统。

这样做能够有效避免文件被勒索软件加密、同时也能在一定程度上阻止某些软件偷偷上传个人隐私。

相关 Session:

3. 屏幕录制、键盘记录都需要得到用户授权

除了软件访问文件系统,需要得到用户授权;第三方软件进行屏幕录制、键盘记录等操作时,也要得到用户的授权,从而防止恶意软件通过偷偷在后台录屏、记录按键操作等方式收集个人隐私。

相关 Session:

4. 用户态驱动

macOS Catalina 还支持了用户态驱动,支持在用户态运行 USB 设备等的驱动。用户态驱动在节省开发者的开发调试工作量的同时,也能够限制驱动的权限,避免驱动程序在内核态进行不安全的操作。

相关 Session:

5. Notarization

对于在 Mac App Store 之外发行的 App, 还可以将 App 提交到 Apple 进行 Notarization, 进行一系列的安全检查。在新版 macOS 上,默认情况下,经过 Notarization 的 App 才能直接打开,从而保证了在 macOS 上始终运行安全的 App.

相关 Session:

当然,从 macOS 最近几个版本的变化中,似乎也隐约能够看到,macOS 变得比之前「封闭」了:对于普通用户来说,确实能一定程度上避免在无意中安装恶意软件,但对有特殊需求的开发者和用户,可能会稍微麻烦一些…… 那么 macOS 未来会怎样发展?会不会变得更加「安全」但更加「封闭」?只有时间能告诉我们答案了。

在 macOS 上运行 iPad Apps

在 WWDC 2019 上正式推出的 Project Catalyst,能够将原有的 iOS App, 直接编译成 macOS App, 在电脑上运行。而且,如果一个 App 适配了 iPadOS 的新特性,例如多窗口支持、Dark Mode 等,在 macOS 上,也就能够自然地支持多窗口和 Dark Mode 等,无需重复适配,从而进一步减少了开发工作量。

我也尝试了将 AirTerminal 编译为 macOS App,没有改动一行代码,重新编译后就能运行:

在 macOS 中运行的 iOS App AirTerminal
在 macOS 中运行的 iOS App: AirTerminal

不过,这种直接将 iPad App 转换成的 macOS App, 明显不符合 macOS 的设计风格。其实,如果想完成一个高质量的 macOS App, 在设计上,还需要做进一步的考虑。所以 WWDC 2019 也带来了一系列 Session,介绍了将 iPad App 转换为 macOS App 的时候,需要做哪些细节上的考虑。经过整理,主要有如下内容:

将 iPad App 转换为 Mac App, 需要做哪些考虑
将 iPad App 转换为 Mac App, 需要考虑这些内容

独立的 iPadOS, 为 iPad 带来更多可能性

1. 多窗口支持

记得在之前的发布会上,苹果展示了 iPad Pro 的分屏功能后,还被人嘲笑过:「在 iPad 上,你可以同时打开一个 Word 文档和一个 Excel 文档,但不能同时打开两个 Word 文档」。

而在新版的 iPadOS 上,终于正式支持了多窗口:对于同一个 App, 能够同时创建多个窗口,这对文档类 App 十分重要,终于可以分屏打开多个文档了……

在 iPadOS 上,同时打开两个备忘录
在 iPadOS 上,同时打开两个备忘录

相关 Session:

2. 桌面级的浏览器

iPadOS 的 Safari 浏览器也做了不少改进:自带下载管理器、对桌面网站有了更好的支持。其中,对桌面网站的支持,并不仅仅是简单地修改 User-Agent, 而是在 WebKit 中增加了不少对桌面网站的适配,并更好地兼容需要依赖鼠标操作的网站。

另外,Safari 还能自动选择打开桌面网站,还是打开移动端网站。例如在 iPad Mini 的分屏模式下,浏览器界面比较小,这时候 Safari 能够自动选择移动端网页,带来更好的体验。或者在 App 中打开第三方登录的认证页面时,开发者也能过方便地设置为默认打开移动端网页。

在 iPadOS 的 Safari 浏览器中打开 Word Web App
在 iPadOS 的 Safari 浏览器中打开 Word Web App

实际测试了几个常用的 Web App, 兼容性如下:

能够正常使用:

无法正常使用:

可以看到,大部分复杂的 Web App 都能在 iPad 上完美使用,但对于立创 EDA 等需要大量使用鼠标的网站,与 iPad 之间还是存在兼容性问题。

相关 Session:

3. 更强大的文件管理

iPadOS 带来了更强大的文件管理功能,支持 USB 存储设备和 SMB 网络共享目录。而且还能够授权或拒绝第三方 App 访问文件夹,从而提升了安全性。

在 iPadOS 的 File App 中打开 NAS 上的共享目录
在 iPadOS 的 File App 中打开 NAS 上的共享目录

对于开发者来说,iPadOS 将外部存储设备,包括 USB 和 SMB 网络共享,抽象为 LIFS 文件系统,应用程序无需考虑底层的文件系统。另外,由于外部存储设备可能读写速度较慢,还可能存在 U 盘拔出、网络断开等情况,所以需要开发者针对外部存储设备做更多优化。具体可见如下 Session:

4. 将 iPad 做为 Mac 的第二块屏幕

iPadOS 也支持 Sidecar 功能,能够通过无线和有线的方式连接 Mac,将 iPad 用做 Mac 的第二块屏幕。而且,macOS App 的开发者还可以利用相关的 API,为 macOS App 带来 Apple Pencil 支持。

我也装上了 Developer Beta 版本的 macOS 和 iPadOS, 尝试了一下 Sidecar. 经过体验,目前 Sidecar 已经十分流畅,即使在无线连接的情况下,也很难感受到延迟。

使用 Sidecar 将 iPad 做为第二块电脑屏幕
使用 Sidecar 将 iPad 做为第二块电脑屏幕

我曾不只一次尝试将 iPad 做为自己的主力设备来使用,不过发现不论是写程序、写博客,还是浏览网页和整理文档,都不如电脑方便。所以,对我来说,最终我是拿 iPad 做为电脑的辅助设备来用的。而 Sidecar 的加入,正好能够使 iPad 成为一个更好的 macOS 辅助设备。

5. 更强大的 Swift Playgrounds

Swift Playgrounds 是 iPad 上的一款 Swift 编程 App, 不仅能用在编程教育领域,而且能够让 iOS 开发者方便地编写和调试小段程序。

新版的 Swift Playgrounds, 能够支持 modules, 方便组织多个程序文件,完成更复杂的程序。

相关 Session:

6. 我对 iPadOS 的更多期待

在 iPadOS 发布之后,iPad 离一些人眼中的「生产力工具」更近了一些。不过对于我来说,我最希望 iPadOS 能够增加如下两个功能:

a) 更好的外接显示器支持

2018 年的 iPad Pro, 带来了 USB-C 接口,能够直接通过 USB-C 接口连接显示器,输出最高 4K 分辨率的画面。

我刚好有一个支持 USB-C 输入的 4K 显示器,连接 iPad 之后,除了视频类 App, 只有 Documents, Working Copy, Blink 等少数 App 对外接显示器做了适配。

而且与 AirPlay 不同,视频类 App 只有在前台运行的时候,才能在外接显示器中播放视频,没法做到外接显示器播放视频的同时,iPad 上打开其他 App.

b) 「画中画」功能的增强

iPad 的「画中画」功能,在 iPadOS 上,其实已经有了不少进步:由于 Safari 浏览器改进,在播放 Bilibili 和 YouTube 等网站的视频时,能够方便地进入「画中画」模式。所以,在我将我的 iPad 升级到 iPadOS Deleloper Beta 之后,已经很少使用 YouTube 和 Bilibili 的 App 来观看视频,而是直接通过网页版播放。

但是,在视频聊天上,iPadOS 的「画中画」功能仍然只支持 FaceTime, 而不支持微信等第三方 App.

希望某一天能够看到这些功能正式进入 iPadOS.

自动化

在 iOS 13 中,快捷指令成为了系统原生 App, 从而能够与系统进行更紧密的整合,例如将快捷指令直接显示在 Share Sheets 中。可见 Apple 对 iOS 自动化的重视。

iOS 13 的 Share Sheet 中能显示可用的快捷指令
iOS 13 的 Share Sheet 中能显示可用的快捷指令

而且,快捷指令增加了自动运行的功能,能够在指定的指定时间、指定地点、或特定条件下,自动执行快捷指令。

另外新版的快捷指令已经与 HomeKit 进行了较紧密的整合,能够让自己的智能家居产品更加「智能」。

iOS 13 快捷指令 App 中的「自动化」页面
iOS 13 快捷指令 App 中的「自动化」页面

新版的快捷指令也终于支持了输入参数。对于 JSBox 等 App, 就能直接通过快捷指令为脚本传入数据,实现更多功能。具体可以参考这个 Session:

网络

由于我的工作涉及到较多网络相关的知识,所以观看了 WWDC 网络相关的 Session.

在新版的 iOS 和 macOS 中,关于网络方面的改进,我关注的主要有如下几点:

  1. WebSocket: 不仅仅可以在网页中使用 WebSocket, 还提供了 WebSocket API, 方便在 App 中使用
  2. farming: 在系统的网络处理线程中运行自定义网络协议,与应用程序进程分离。这样做在提高性能的同时,有助于使程序更加模块化,应用代码无需关注网络协议细节,直接读写数据即可
  3. Bonjour 支持 discover proxy: Bonjour 能够更方便地跨网络发现设备:通过发送单播报文到 Proxy,然后 Proxy 发送组播报文到其所在的网络
  4. MPTCP 和 Wi-Fi Assist 的增强: 新版本增加了 Wi-Fi Assist 的功能,例如可以通过 MPTCP, 实现回家路上听音乐的时候,连接到家里的 Wi-Fi 后,音乐不会因为网络切换而中断
  5. Low Data Mode: iOS 13 的省流量模式,不仅仅针对系统有效,而且开发者也可以在 App 中,针对 Low Data Mode 做更多节省数据流量的处理

相关 Session:

开发者工具

WWDC 2019 也为开发者带来了不少惊喜,例如 SF Symbols 提供了大量的图标,而且提供了多种不同的粗细风格,与 San Francisco 字体的多种字重相匹配;再比如 SwiftUI 提供了一个新的 UI 框架,与 Xcode 结合,带来了不一样的开发体验。

虽然自己不完全算是一个 iOS 开发者,但也对 iOS 开发有着一定的兴趣,希望能多了解一些 iOS 开发的知识。所以我主要观看了如下视频:

另外这几篇来自开发者的文章,也值得阅读:

更多

其实,对于每一年的 WWDC, 如果想要快速了解有哪些内容,还是推荐先看一下 Platforms State of the Union. 这个 Session 相当于针对开发者的第二场发布会,从开发者角度介绍这一年的 WWDC 会带来哪些内容。

另外,对于 iOS 13 和 macOS Catalina, 我印象最深的另外一点,就是原生 App 的进步。比如「提醒事项」App, 支持列表群组、列表、提醒事项、子任务四个层级管理待办事项,并支持附件,外加更方便的协作功能,对我来说已完全可以替代 Things. 估计等 iOS 正式版发布之后,我会尝试用系统自带的「提醒事项」来代替 Things.

刚好最近看到少数派的这条微博(https://weibo.com/1914010467/HAwaH8tlf),确实,对于 App 开发者来说,不能依赖单一 App……


备注:

题图来自 Unsplash, 作者为 Carl Heyerdahl

发表评论

电子邮件地址不会被公开。 必填项已用*标注