標籤: SwiftUI

我偏好的 Coordinator Pattern

前言

當我實作畫面流程時,我會為一組「流程」建立一個 Coordinator。如果這組流程很複雜,它可以拆分成多個「子流程」,那每一個子流程也會有對應的 Sub-Coordinator。主流程的 Coordinator 可以管理子流程的 Sub-Coordinator。

Coordinator 用來管理流程的畫面,它負責建立畫面、傳遞資料給畫面、回應畫面的請求、移除畫面等等。如果用 tree 來理解畫面流程的話,Coordinator 就是 root,各個畫面就是 leaf。換個角度看,Coordinator 像一個容器 — 它自己不產出畫面內容,而是決定裡面放哪些畫面、什麼時候切換。

繼續閱讀 ➜

watchOS app 開發筆記:Complications

這一篇主要是要紀錄如何設定 Apple Watch 的 Complication。

Complications 是錶面上可讓使用者選擇的小元件,需要使用 ClockKit 開發 (有些畫面可以用 SwiftUI 開發),它的用途是在特定的時間,顯示相對應的資訊。

Apple Watch 內建數十種錶面,每種錶面支援的 complications 數量 / 位置 / 尺寸都不盡相同,根據不同的尺寸跟風格,定義了多種不同的 families,每個 familiy 支援不同的 templates,我們使用 template 來設定要顯示的文字、圖片、或儀表圖。各種不同 families 的長相可以參考這份文件

繼續閱讀 ➜

整合 Unity 到 SwiftUI App

最近剛好有機會要整合 Unity 到 SwiftUI 開發的 app 裡頭,整個過程不算難,但是蠻繁瑣的。網路上的資料絕大部分都是跟 Objective-C / UIKit 的整合,比較少 Swift / SwiftUi 相關資料,所以趁著記憶猶新的時候把它記錄下來,希望可以幫助到其他人以及未來的自己。

從 Unity 2019.4 的版本開始,它提供了 UaaL (Unity as a Library) 功能,可以把 Unity 專案匯出成 framework 讓其他程式使用,開啟了原生平台與 Unity 互動的更多可能性。你可以只用 Unity 開發遊戲或其他精美畫面的部分,剩下的則是使用原生平台(例如 iOS 或 Android)開發。

我使用的開發環境是 Xcode 12.5 + Unity 2020.3.15f2 LTS,預期達成以下目標:

  1. 在 SwiftUI 顯示 Unity 的畫面
  2. iOS 跟 Unity 可以雙向傳遞訊息

先附上 sample code。這篇文章會有大量程式碼,也會假設你對 Xcode 跟 Unity 的操作有基本的認知,廢話不多說,讓我們開始吧!

繼續閱讀 ➜