💬 Pofat 的話
I. 最近在思考 side project 時覺得那麼愛打遊戲,又在寫 Swift 週報的我應該試著用 Swift 來做一款遊戲,沒想到就看到了遊戲引擎使用 Swift 來做為開發語言的訊息!基於我本人是個行動上的侏儒,所以我打算多玩幾款遊戲收集靈感後再看要怎麼開始進行 🌚
II. Steam Deck OLED 升級超有感,最令人詬病的散熱也有改善,好心動!
🌎 On Swift Community
🎬iOS 開發配飯吃
13 的新品作品以及新的身分:YouTuber 因為太久沒錄音了
有時候我們缺少的不是更好的學習素材,而是動機。節目的目標是輕鬆觀看(配飯吃好消化)的過程中,也許讓你對某些主題產生興趣~
https://x.com/ethanhuang13/status/1720259001387221147?s=20
On-Crash Backtraces in Swift
Apple 大大地改進了 crash 的 log,原本在非 iOS 平台上 crash 時很大機率你只會看某個 child process 掛了的無用訊息,現在會正出現 call stacks,還支援 structured concurrency,可以正確地找出 call path/stack;最強大的功能還是它會停留一段時間,讓你印出call stack、register 內容等資訊,甚至 attach debugger。不過最主要受惠的會是 Linux 平台,因為在 Apple 平台可以取得 crash report ,但 Linux 並無此內建功能。
Snapshot SwiftUI Previews
我最喜歡的公司 EmergeTools 又有酷炫新作品 - SnapshotPreviews。這個工具會自動幫你截圖和比對以在 CI 階段捕捉問題,而且你不需要寫任何測試的程式碼,只要你有 Preview。EmergeTools 共同創辦人之一分享實現的密訣,首先 Apple 有些 framework 會有不公開的公開 symbol,即 linker 看得到 symbol (tbd 檔案裡有)但 compiler 看不到(swiftinterface 裡沒有宣告),透過前者找到 Preview 的 getter ,再把該方法加入 swiftinterface 就能使用該 private API,當然這只能在自已開發時使用。
SwiftGodot : Fixing the Multi-million dollar mistake
Godot 是個開源的 2D/3D 遊戲引擎,Xamarin (用 C# 開發跨平台 mobile app 的軟體)的創辦人Miguel de Icaza 受 Swift 的安全性和記憶體管理模式吸引,以及能和 C/Cpp interop 的能力,便透過 Extension 來讓 Swift 成為其開發語言之一,而且在 macOS 上還能用 Xcode 來 debug,一兼二顧。他在 godotcon 2023 中的演講介紹 Swift 生態系帶來的好處,以及 Optional 和記憶體管理、安全檢查等功能如何幫助遊戲開發。我也是看了影片才知道 Swift 有 runtime 的加法 overflow 檢查,還有「管它的我就要加」的加法可以無視檢查直加(&+
) ,看完熱血都昇溫了!
Better way to printChanges()
常用 Self._printChanges()
來 debug SwiftUI 的朋友們,Xcode 15.1 開始有更棒的工具了 - Self._logChanges()
,它使用 OSLogger 而不是 print,搭配 Xcode 15 進化的 debugger console 會讓你的 debug 體驗再上一層樓 。
https://mastodon.design/@hidde/111358108780823799
🗣️ On Swift Forum
Progress toward the Swift 6 language mode
Swift 6 已完成許多年初提案的里程碑,縱使仍有項目還在早前研究,語言掌舵小組決定 Swift 6 發佈前的最後關卡是能夠預設啟動 data-race safety,也就是要確保 data-race safety 能在 compile 階段被確保,runtime 檢查也能夠完全捕捉 compile 階段無法確認的部分;以及正確無誤的錯誤診斷。Swift 5.10 已包括不少相關的改進,前一期波報提到的 Region based isolation 也將會是提昇安全性的一大重要改進。
語言新功能也有不少,每個都有各自的 flag 獨立開啟以讓開發者逐步搬遷,比較要留意的是 @UIApplicationMain
將會被 deprecate,以及討論許久的 any
強制使用在 Swift 6 不會預設開啟,即未來使用 existential container 的方式仍然是
let a: SomeProtocol
而不是強制
let a: any SomeProtocol
BrainF*** in the Swift type system
這個好瘋好喜歡,用 Swift 的 type system (主要是泛型)來實做 Brainf*** , 其中 VM 的實做很有趣,讓我對這個完全陌生的名詞有了一點基本概念,但如果你想要真的跑起來的話需要加 flag 更改 compiler 超時的門檻(詳見內文),因為你看看一個 A 的表達長這樣:
typealias A = Succ<Succ<Succ<Succ<Succ<Succ<Succ<Succ<Succ<Succ<Succ<Succ<Succ<Succ<Succ<Succ<Succ<Succ<Succ<Succ<Succ<Succ<Succ<Succ<Succ<Succ<Succ<Succ<Succ<Succ<Succ<Succ<Succ<Succ<Succ<Succ<Succ<Succ<Succ<Succ<Succ<Succ<Succ<Succ<Succ<Succ<Succ<Succ<Succ<Succ<Succ<Succ<Succ<Succ<Succ<Succ<Succ<Succ<Succ<Succ<Succ<Succ<Succ<Succ<Succ<Zero>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
🤪 Pofat 選推
高緯度地區哭啊(我住的城市已是 4PM 🥹)
https://friendica.myportal.social/display/e65e1095-1265-481c-1fa9-21a864371194
蜘蛛人2 可以摸狗,好買了
https://x.com/CanYouPetTheDog/status/1721950649825542543?s=20
Best visionOS application: