💬 Pofat 的話
今年 WWDC 話題性十足,非開發者圈的討論度不下開發者,而我的預測一如往常全部落馬🤪,Apple 今年就推出了 Vision Pro、採用 AR + VR 都有的混合模式,widget 沒有在牆壁上,Apple 直接鎖定運作姿勢(室內,多坐姿)來增加體驗的良好度。從開發角度來看,用 SwiftUI 寫 3D app 在影片中是那麼地輕鬆愉悅,但我們都已不是 2019 年的那個小伙子了,SwiftUI 糖衣裡的毒藥我們都懂 🥲。想了解更多吐嘈看法, weak self 新集數(終於更新啦,變季更)裡都有,是久違的錄音,喬喬、13 和我從天南到地北地大聊特聊,別錯過!
Swift 的更新都很重大,雖然波報一直有在關注,實際看到 demo 那個感覺還是不一樣的;另外 iOS 的部分更新雖不多,但有要緊的 privacy manifest 要加入,保持開發者有活幹。
WWDC 提供的資訊量總是過載,可以先從WWDC23 更新概覽中瀏覽哪些相關或有興趣的再往下走,這期我就聊幾個我有在關注的方向。
最後這週不只是 WWDC 有 one more thing,Xbox Showcase 也有!(不是完全未公佈過的東西就是)
🌎 WWDC23
Swift macros
相關的 evolution SE-0382,SE-0389,SE-0394 和 SE-0397 我們先前都有討論過了,過程中我一直比較感到擔心的是開發和 debug 體驗,因為真的沒有人想去追祖宗十八代留下來的不明 macros,幸好最後的結果令人相當滿意!使用錯誤時 Xcode 編輯器上的錯誤提示非常明確(不過這有賴你的實作),而且可以即時右鍵展開,也可以從 breakpoint 中 step in 展開,展開的程式碼區塊中雖能下 breakpoint 但實測不會動,不過至此我的疑慮都己被完全消除,不得不說蘋果在「令人一眼就感到愉悅」實在是很會。主力不使用 Xcode 的朋友也別擔心,這個展開的功能由 SourceKit 支持,他們也加了新的 request,所以未來 VSCode 也能用得上的。
與 C/Obj-C 這種基於詞(lexical)的 macro 不同,Swift macros 可以做到改變宣告或語法,簡直就是藏汙納垢的好幫手啊,我已經可想見未來使用時的情境:
「這個 macro 用起來好簡便,來看看裡面怎麼實作的」
「哇咧,這坨糞扣是怎麼樣啦!?」
「啊是我寫的,那沒事了😌」
其實 Swift macros 已經可以視為一種 compiler 的 api,因為你可以在程式碼層級中操作 compiler 的輸出結果,如此一來不需走過提案或等到 compiler 改 code 就能實現一定程度的客製功能,當然這也使其開發較為不易,以及需要引入 SwiftSyntax 的幾個依賴來操控和取得原始碼的力,一點 SwiftSyntax 的基本概念也是不可或缺的。其運作原理也相當有趣,實作會放在一個 dylib 裡,然後當 compiler 讀到使用的地方時就會去問這個 dylib 怎麼改變程式碼,所以 macros 的實作程式碼並不會佔去你 app 的空間,推薦觀乕 WWDC23 的影片: Expand on Swift macros。
相信今年應該會如同 Property Wrapper 般,在公佈後也興起一波熱潮出現各種創作。
Mergeable Libraries
又是個幹一年不如等一年的功能,有在搞啟動速度的朋友們應該都記得 Apple 總是推薦大家 dynamic framework 不要太多(曾經有個數字是六個),一個方法是合併 dynamic framework,但對於第三方的套件又談何容易進行,如果全部設 static linking 又會影響開發速度。這次換蘋果說我全都要了,開啟這個功能能夠自動幫你合併,也可以手動選擇要怎麼合併,同時合併過程中也能享受到 static linking 才能做的最佳化。
這麼做還有另一個 WWDC 裡沒有明確提到的優勢,如果有在做 profiling 以調整 binary 結構來做最佳化時(LTO),對大塊的 binary 做效果會更好,因為有更多空間來最佳化,這個也是今年務必要啟用的功能之一。
Design with SwiftUI
今年的影片中,這一個影片完全切合我長久以來的想法,我去年還跟影片中的講者聊過這個概念 - 以 SwiftUI 做為 prototyping 工具。
SwiftUI 對工程師的傷害以及危害大型舊專案的能力我就不贅述了,不過做為用來嘗試新設計或互動的工具則非常適合。這裡的重點不是「讓設計師寫出你的 UI code」,而是讓設計師在「取得更多真實能取得到的裝置資源與體驗真實互動」終於不會再拿 Anrdoir 的設計叫你實做了,各位趕快找你們家的產品部門來看看和教他們基礎吧,下次 PM 拍腦袋後就能叫他先自己搞出 PoC 再來了!
另外今年的 SwiftUI 更新中,讓開發者能直接使用 shader effect 而不用再搞一個 MTKView 以及跟那些 context 搞來搞去了,考慮到 Vision Pro 的到來,我相信各種精美的 shudder function 也會大量出現(至少下雨毛玻璃效果一定會有吧!)
🌎 Swift Community
weak self 106: WWDC23 最令人興奮的事
無需多言,聽吧!
Why Ownership Matters
Swift 的大變動之一,不理解為什麼要有這功能的請看這篇清楚的說明。
Swift Foundation is here
用 Swift 重寫的 Foundation 已經在各 Beta OS 裡,不只是少了轉換成本,本身的效能也是更好,貌似 ObjC 的介面也是呼叫 Swift 實作。
Port Game to Mac
今年最最最重要的大事啊!!!支援轉譯 DirectX12,已經有大量網友在嘗試各 3A 大作了,我期待的 Gamin on Mac 的未來終於要來了嗎?
🤪 Pofat 選推
Ben Thompson 在他最近一篇公開文章中談到他認為 Quest 的其中一個問題是太沉浸,連戴著喝咖啡都不太可能,而 Vision Pro 解決了這個問題。Well, think again!