在 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,没有改动一行代码,重新编译后就能运行:
不过,这种直接将 iPad App 转换成的 macOS App, 明显不符合 macOS 的设计风格。其实,如果想完成一个高质量的 macOS App, 在设计上,还需要做进一步的考虑。所以 WWDC 2019 也带来了一系列 Session,介绍了将 iPad App 转换为 macOS App 的时候,需要做哪些细节上的考虑。经过整理,主要有如下内容:
相关 Session:
独立的 iPadOS, 为 iPad 带来更多可能性
1. 多窗口支持
记得在之前的发布会上,苹果展示了 iPad Pro 的分屏功能后,还被人嘲笑过:「在 iPad 上,你可以同时打开一个 Word 文档和一个 Excel 文档,但不能同时打开两个 Word 文档」。
而在新版的 iPadOS 上,终于正式支持了多窗口:对于同一个 App, 能够同时创建多个窗口,这对文档类 App 十分重要,终于可以分屏打开多个文档了……
相关 Session:
2. 桌面级的浏览器
iPadOS 的 Safari 浏览器也做了不少改进:自带下载管理器、对桌面网站有了更好的支持。其中,对桌面网站的支持,并不仅仅是简单地修改 User-Agent, 而是在 WebKit 中增加了不少对桌面网站的适配,并更好地兼容需要依赖鼠标操作的网站。
另外,Safari 还能自动选择打开桌面网站,还是打开移动端网站。例如在 iPad Mini 的分屏模式下,浏览器界面比较小,这时候 Safari 能够自动选择移动端网页,带来更好的体验。或者在 App 中打开第三方登录的认证页面时,开发者也能过方便地设置为默认打开移动端网页。
实际测试了几个常用的 Web App, 兼容性如下:
能够正常使用:
无法正常使用:
可以看到,大部分复杂的 Web App 都能在 iPad 上完美使用,但对于立创 EDA 等需要大量使用鼠标的网站,与 iPad 之间还是存在兼容性问题。
相关 Session:
3. 更强大的文件管理
iPadOS 带来了更强大的文件管理功能,支持 USB 存储设备和 SMB 网络共享目录。而且还能够授权或拒绝第三方 App 访问文件夹,从而提升了安全性。
对于开发者来说,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 已经十分流畅,即使在无线连接的情况下,也很难感受到延迟。
我曾不只一次尝试将 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 自动化的重视。
而且,快捷指令增加了自动运行的功能,能够在指定的指定时间、指定地点、或特定条件下,自动执行快捷指令。
另外新版的快捷指令已经与 HomeKit 进行了较紧密的整合,能够让自己的智能家居产品更加「智能」。
新版的快捷指令也终于支持了输入参数。对于 JSBox 等 App, 就能直接通过快捷指令为脚本传入数据,实现更多功能。具体可以参考这个 Session:
网络
由于我的工作涉及到较多网络相关的知识,所以观看了 WWDC 网络相关的 Session.
在新版的 iOS 和 macOS 中,关于网络方面的改进,我关注的主要有如下几点:
WebSocket
: 不仅仅可以在网页中使用 WebSocket, 还提供了 WebSocket API, 方便在 App 中使用farming
: 在系统的网络处理线程中运行自定义网络协议,与应用程序进程分离。这样做在提高性能的同时,有助于使程序更加模块化,应用代码无需关注网络协议细节,直接读写数据即可Bonjour 支持 discover proxy
: Bonjour 能够更方便地跨网络发现设备:通过发送单播报文到 Proxy,然后 Proxy 发送组播报文到其所在的网络MPTCP 和 Wi-Fi Assist 的增强
: 新版本增加了 Wi-Fi Assist 的功能,例如可以通过 MPTCP, 实现回家路上听音乐的时候,连接到家里的 Wi-Fi 后,音乐不会因为网络切换而中断Low Data Mode
: iOS 13 的省流量模式,不仅仅针对系统有效,而且开发者也可以在 App 中,针对 Low Data Mode 做更多节省数据流量的处理
相关 Session:
开发者工具
WWDC 2019 也为开发者带来了不少惊喜,例如 SF Symbols 提供了大量的图标,而且提供了多种不同的粗细风格,与 San Francisco 字体的多种字重相匹配;再比如 SwiftUI 提供了一个新的 UI 框架,与 Xcode 结合,带来了不一样的开发体验。
虽然自己不完全算是一个 iOS 开发者,但也对 iOS 开发有着一定的兴趣,希望能多了解一些 iOS 开发的知识。所以我主要观看了如下视频:
- Introducing SF Symbols: 介绍了 SF Symbols 这套图标,对于不会设计图标的个人开发着很有帮助
- What’s New in Swift
- Modern Swift API Design
- Creating Swift Packages
- SwiftUI Essentials
- Introducing Combine
- What’s New in Clang and LLVM: 可以学习到编译器、编译优化的基础知识
- LLDB: Beyond "po": LLDB 支持用 Python 3 对数据进行格式化
- What’s New in Universal Links: Universal Links 支持 macOS
另外这几篇来自开发者的文章,也值得阅读:
- WWDC 上面值得关注的 sessions – 少数派
- 在学 SwiftUI 前,谈谈我的想法和对它的期望 | I’m TualatriX
- Swift Combine 入门导读 | icodesign
- 从 SwiftUI 谈声明式 UI 与类型系统 – 知乎
- Behind The Scenes Of Context Menus | Five Stars
更多
其实,对于每一年的 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