今年 iPlayground,我自告奮勇接下了 iOS app 的開發(按這裡下載)。開發背後的一些小故事,我覺得可以拿出來分享,就寫了這篇文章。
接手理由
參加 try! Swift Tokyo 時,發現它們的 app 做得不錯,而且有開源。在第一天活動時,遇到 app 有個使用者體驗上的困擾,但應該不難修。想說我如果能修好,可以去發個 PR。
結果等想到時上去一看,已經有人發了 PR 搞定了。這就是一個熱衷開發的社群會有的樣貌,真的很貫徹開源精神,我覺得超棒。

另一方面,try! Swift Tokyo 的 app 使用 SwiftUI 與 TCA,跟我熟悉的框架一模一樣。於是產生了一個念頭:如果我來寫 iPlayground 的 app,也許有機會在國際 iOS 社群之間做個比較、互相學習。
再者,雖然我錄製過多集的 iOS 開發配飯吃 • SwiftUI + TCA 系列,也寫過一些 TCA 相關文章,但是從來沒有一個比較複雜的開源 app 作為範例。這會是個很實際的 sample project。
規劃與資料準備
一個研討會的 app 會有哪些功能,不難想像。主要就是顯示議程、講者、工作人員、贊助商、場地資料,以及重要連結等等。
iPlayground 的官網已經使用一個開源 repo 放一些 JSON 檔,所以 app 只需要沿用即可。
不過我想說,既然是 JSON,如果多人協作時不小心改壞就不好了。就用 Claude Code 寫出一個 Swift Package,用 Codable
確保資料欄位,並且寫一些測試來確保格式與欄位正確。
這些 GitHub Actions 的 CI 工作流程,都可以在這裡看到。比較有趣的是,這邊用的是 Ubuntu 的 runner 來跑測試,而不需要 Mac。算是利用了一下 Swift 跨平台的特性。
注入現在時間,進行時空跳轉
上述的部分,我有在開發時直播與錄影(作為宣傳活動的手段)展示,都在這個 iOS 開發配飯吃 iPlayground 2025 App 開發特別篇播放清單。
後面的部分,因為時間的因素,就沒有錄影了。以下我用文字補充。