iOS 16.4 - macOS 13.3 開發者向更新快報
2023年2月17日凌晨Apple推送了iOS 16.4和macOS 13.3 Developer Beta[1],這裡主要快速講一下我覺得比較有意思的Safari Web Extension、SwiftUI和Passkeys and Authentication Services的更新。
Safari Web Extension
三個更新:
declarativeNetRequest
支援了modifyHeaders
動作browser.storage.session
支援- 支援
browser.scripting.registerContentScript
等content script API。
這堆content script API終於有了,可以面向新版drop polyfill了。好不好用我不知道,晚點去試試。對於GreaseMonkey-compatible的user script插件來說挺重要的,polyfill因為實作上用很多hack,並不是特別靠譜,尤其是script執行時間點這一塊。
SwiftUI
照慣例修復了一堆行為bug,主要集中在去年的新Navigation API上。iOS上有一些ScrollView相關的更改,macOS上auxiliary scene、Window和List有一些行為調整去符合AppKit的行為,有用到的話需要注意一下。
iOS 16.2 / macOS 13.1 Table棄用了一些type check性能有問題的initializer,現在這版已經直接移除了。
最大的更新是.sheet
和.popover
:
- 新增
.presentationBackgroundInteraction(_:)
來控制sheet在不同detent時sheet背後是否可以操作。 - 新增
.presentationBackground(_:)
/.presentationBackground(alignment:content:)
控制backdrop的樣式,甚至加入額外的元素。 - 新增
.presentationContentInteraction(_:)
控制sheet內ScrollView的捲動行為,可以強制在較小detent下優先捲動而不是展開到更高detent。 - 新增
.presentationCompactAdaptation(_:)
,允許強制.popover
在iPhone上不回落到sheet樣式。 - 新增
.presentationCornerRadius(_:)
來控制.sheet
和.popover
的圓角大小。
這些presentation上的更新使得SwiftUI的sheet和popover的可定製性終於齊平了前年(!)WWDC21上UIKit UIPresentationController
獲得的可定製性[2]。WWDC22的時候SwiftUI sheet只放出了detent,當時讓我覺得有點奇怪,現在看來估計是比較咕。
由於為了做某種特定UI效果,寫SwiftUI會用到很多workaround,這些bug的修復通常也會導致一部分workaround失效。SwiftUI還在快速成長期,我們並不確切知道哪些是intended behavior,哪些是bug。我預計這種混亂還會持續至少一年的時間。Navigation API上的行為改變還沒有影響到商業專案,目前為了相容性我們用的還是NavigationBackport,沒有使用Apple自己的實作。
Passkeys and Authentication Services
- 有
com.apple.developer.web-browser
entitlement的瀏覽器app上,WKWebView
現在獲得了Passkey自動填充的能力,會好用很多。 - 新增
AuthorizationController
、WebAuthenticationSession
等來給SwiftUI提供更原生的SSO能力。
對我來說,這次更新補上了很多去年WWDC願望清單裡的東西。額外的,WWDC22上用來demo的Food Truck app終於也作為sample code發了出來[3],會是比較重要的參考。
還有一點值得提一下的就是iOS Beta Profiles的棄用。自iOS 16.4起,未來Developer Beta和Public Beta都需要登入有資格的Apple ID後在系統更新裡獲取,意味著更新測試版系統的門檻提高了。