如何為單一 Feature 建立 Swift Package

在專案開發到一定規模後,你可能會發現某些 feature 其實相對獨立:它們有自己的流程、畫面、資源檔,甚至可以被其他專案重用。這時候,最乾淨、最有彈性的做法,就是把它抽成 Swift Package

以我最近在做的功能為例,它是一個完整的獨立模組 - 有多個頁面、支援多國語言、使用圖片與動畫資源。為了避免日後整合時出現命名衝突、相依過重或編譯過慢的問題,我選擇把它獨立成一個 Swift Package。在將 feature 抽出到 Package 的過程我也踩到了一些坑,趁著這個機會記錄下來,以免日後忘記。

為什麼要把 Feature 打包成 Swift Package?

建立專屬的 Swift Package 有幾個明顯的好處:

  • 可獨立開發與測試:模組化後不必依賴主專案,可單獨編譯與驗證。
  • ⚙️ 降低相依與衝突:減少命名重複、依賴鏈過長等問題。
  • 🚀 加快編譯速度:主專案不需每次都重新編譯整個功能。
  • 🔄 方便整合與重用:未來可以直接被其他 app 或團隊使用。
繼續閱讀 ➜

我的 Mac 設定

工程師都會有自己習慣的電腦設定,我自然也不例外。本文記錄了我自己的環境建置,方便以後換電腦或換工作時可以快速 setup。

繼續閱讀 ➜

必備的 Google Chrome Extension

我用的瀏覽器主要是 Chromium based,從早期愛用的 Google Chrome,到現在改用 VivaldiBrave BrowserArcDia。有時還會用 WebKit based 而且支援 Chrome/Firefox 套件的 Orion Browser

每次換工作都是一次整理工作環境的機會,我的瀏覽器也藉此重裝,雖然每次的工作都不完全一樣,但我發現有些 extension 是不管在之前還是現在的工作、不管是公司還是家裏都會安裝的。以下就是我必備的幾個 extension:

繼續閱讀 ➜

一個自訂 KOReader 書籍排序的腳本

我在 KOBO 電子書閱讀器上額外安裝了 KOReader 系統,它的眾多設定讓我可以調整出自己最喜歡的樣子來觀看電子書,無論是 ePUB、PDF、CBZ 格式,高度自訂化佈局讓閱讀成為一件舒服的事。

最近有一個困擾我的地方,就是它的書本排序方式雖然很多,但卻沒有我想要的排序方式,我想要讓書本「先按照作者排序,然後如果是系列套書就按照系列順序排序,最後再按照書名或是出版日期排序」,這樣才符合我整理書本的習慣。

還好 KOReader 提供了讓使用者開發與安裝 user patch 的功能,那就自己來寫一個 patch 滿足我的需求吧!

p.s.: 也有開發者搜集了很多實用的 user patch,可以來這裡看看

繼續閱讀 ➜

FormattedListKit: Elegant List Displays Made Easy

When developing iOS and macOS applications, formatting lists is a common requirement. Whether it's terms and conditions, setting options, or tutorial steps, we often need to present ordered or unordered list content. However, Apple's native frameworks have relatively limited support for list formatting, which often puts developers in a dilemma: existing solutions aren't perfect, while heavier solutions seem like overkill.

To solve this problem, I developed FormattedListKit, a lightweight yet fully-featured Swift Package specifically designed for creating beautifully formatted ordered and unordered lists.

繼續閱讀 ➜

在 KOReader 使用偽直排字體

我很喜歡閱讀中文書籍,有些類型的中文書在直排版面下閱讀總是特別有韻味。然而在電子閱讀器上,要享受直排閱讀的體驗並不容易。今天要分享一個在 KOReader 上實現「偽直排」的方法,讓我們能在電子書閱讀器上,也能享受傳統直排的閱讀樂趣。

繼續閱讀 ➜