# 我是怎麼在 Mac 上開發 Mole for Windows 的

Mole for Mac 發布以後，一直有不少朋友問什麼時候出 Windows 版，當時給大家的答覆是等 Mac 完善以後才有空來做，10 月 14 日 Windows 版終於上線了。上線之前其實已經在小範圍裡迭代了 20 多個版本，又經過 Mole 天使使用者多天內測，大家提了非常多的建議，非常感謝大家幫忙，這一次的開發挺有意思的，記錄一下我是怎麼在 Mac 上把它做出來的。

<figure class="blog-diagram">
  <img src="/img/windows/clean.webp" width="2584" height="1741" loading="lazy" alt="Mole for Windows 的清理頁，頂部是五個頁面的導覽，中間是地球">
</figure>

## 幾乎從零開始

為了更好的使用體驗和效能，這次用的是 Windows 原生的 C# 和 WinUI 3，沒有套 Electron，加上 Windows 和 Mac 的系統特性、要清理的東西完全不一樣，除了設計和文案，Mac 版十幾萬行 Swift 幾乎沒有可以重用的程式碼，來來回回差不多寫了一個月，大約 7.8 萬行程式碼和 4000 多個測試案例。

## 一台 Mac，一台虛擬機器，一台 ThinkPad

開發和除錯的難度也遠大於熟悉的 Mac，WinUI 的介面在 Mac 上編譯不了，我的做法是寫程式和 AI 的上下文都留在 Mac 這一台機器上，Mac 上裝 Parallels Desktop 開一台 Windows 虛擬機器做除錯驗證，再弄一台 ThinkPad X1 讓它 24 小時開著，看虛擬機器裡看不到的真實效果。這是我現在的工作桌，中間是 Mac，左邊是 ThinkPad X1，幾塊螢幕上開著的都是 Mole。

<figure class="blog-diagram">
  <img src="/img/windows/workspace.webp" width="1600" height="1200" loading="lazy" alt="作者的工作桌，中間是 Mac 和外接螢幕，左邊是 ThinkPad X1，螢幕上開著的都是 Mole">
</figure>

## 幾個好用的做法

用 Mac 開發 Windows 軟體這一個月，有幾個做法覺得挺好用，分享給有同樣需求的朋友：

- 程式碼分層，清理、解除安裝這些核心邏輯和介面狀態放在不依賴 Windows 的 .NET 專案裡，呼叫系統 API 的那一層開了 `EnableWindowsTargeting`，在 Mac 上也能編譯，4000 多個測試大部分在 Mac 上就能跑，只有 WinUI 介面這一層必須到 Windows 裡編譯。
- 儲存庫直接作為 Parallels 的共用資料夾掛到虛擬機器裡，Mac 上改完程式碼，虛擬機器裡直接編譯執行，不用來回複製，兩邊的編譯產物要分到不同目錄，不然 `obj` 裡記錄的絕對路徑會互相打架。
- 虛擬機器用指令碼來驅動，`prlctl exec` 在裡面執行命令，再按控制項的協助工具名稱（UI Automation）去點按鈕、擷取視窗，AI 不靠座標也能準確點中，介面稍微變動也不會點偏。
- ThinkPad 透過 UU 遠端和 ssh 連過去，真實的 x64、高解析度縮放、電池、SmartScreen 和 Defender 都在它上面看，每次發版前都要在它上面裝一遍、點一遍。
- 實在沒有命令列能走的地方，在 Claude 裡透過 lcu 讓它去呼叫 Codex 的 computer use，老實說 Codex 的 computer use 是真的好用，不過 UAC 提示它是點不動的，這時候還得我自己來，哈哈。

平時一般是 Kaku 裡 7 到 10 個分頁的 Agent 同時在跑任務。

## Windows 開發者憑證很麻煩

Windows 上沒簽章的安裝檔，一打開就會被「Windows 已保護您的電腦」擋下，Windows 11 的智慧型應用程式控制更是直接不讓執行，所以發布前我得先買一張程式碼簽章憑證。查的時候發現 EV 憑證現在對 SmartScreen 已經沒有加分，簽了章的新程式一樣要等安裝的人多了才不再提示無法辨識，微軟自己的 Azure Artifact Signing 一個月不到 10 美元最省事，可惜個人只開放給美國和加拿大，我用不上，Certum 便宜的開源憑證又不允許商用。

最後買的是 Certum 的雲端 OV 憑證，一年一兩百美元，金鑰放在它的雲端 HSM 裡，簽章時用手機上的 SimplySign 給一組動態碼，憑證上的名字是審核過的法定名稱，SmartScreen 的信譽也跟著這個名字累積。用下來遇過幾次 SimplySign 的連線閒置幾個小時後中斷，打包到一半才報簽章失敗，後來我每次打包前都先試簽一個檔案。

## 花最多時間的是測軟體

清理工具最怕刪錯東西，Windows 上每個軟體的安裝程式和解除安裝程式又各有各的寫法，只能一款一款裝上去試。我按國內外工程師常用的列了一份名單，編輯器、IDE、瀏覽器、聊天、雲端硬碟、資料庫、AI 工具都有，每一款裝上、開起來用一下，再看 Mole 的解除安裝、更新、殘留清理和啟動項目認不認得它，到現在實測了 372 款，其中 72 款測出了問題，都是當輪修掉、補上測試再重測。有的問題還是我自己的環境帶出來的，VS Code 第一次測就把 Parallels 替 Mac 版 VS Code 建立的同名捷徑也當成了它的殘留，差點誤刪。

<figure class="blog-diagram">
  <img src="/img/windows/uninstall.webp" width="2584" height="1741" loading="lazy" alt="Mole for Windows 的軟體頁，列出已安裝的軟體和各自的大小">
</figure>

功能上和 Mac 版基本一致，清理、軟體（解除安裝與更新）、最佳化、分析、狀態五個頁面，加上系統匣面板、防止睡眠和清潔螢幕，支援 Windows 10 22H2 和 Windows 11，x64 和 ARM64 都有原生安裝檔。

## 還有一個命令列版

除了桌面版，Mole 的 Windows 命令列版其實年初就開始做了，最早是一位印度開發者提的需求，還順手給我送了 PR，非常感謝，到現在 9 個半月發了 9 個版本，最近一個月我也在密集迭代，用法和體驗基本和 Mac 的命令列版對齊了，開源免費，喜歡命令列的朋友可以直接到 [GitHub](https://github.com/tw93/Mole/tree/windows) 上用，它和桌面版的差別可以看[這一篇](/tw/windows/blog/mole-cli-vs-windows-app)。

<figure class="blog-diagram">
  <img src="/img/windows/cli-menu.webp" width="1814" height="741" loading="lazy" alt="PowerShell 裡的 Mole CLI for Windows 主選單，列出清理、解除安裝、最佳化、分析和狀態">
</figure>

桌面版的下載和價格在 [mole.fit/windows](/windows)，每個功能都可以先免費用兩次再決定，歡迎有 Windows 電腦的朋友試試。


Canonical: https://mole.fit/tw/windows/blog/building-mole-for-windows-on-a-mac
