測試清不掉自己留下的設定,因為 cfprefsd 過幾秒又寫回去

約 3 分鐘

說來有點荒謬。9 月 18 日晚上,驗收的 agent 在看別的功能,順手打開我自己正在用的那份 MarsDawn。設定資料夾裡躺著 235 個不屬於它的檔案,每跑一輪測試大約再多 15 個。連那份真正的設定檔,當天也被寫過。

原因短到有點失禮。單元測試一直頂著正式 App 的 bundle id 在跑。系統靠這個身分決定設定放哪。測驗跟我每晚打開的那份,住在同一個資料夾。


驗收的 agent 動 App 之前會先複製一份、換個身分,就是為了不碰到正式那份。統籌的 agent 沒有。它當晚用比較省事的方式跑完整套,真的寫過我那份設定檔。追下去,源頭是它自己。

我第一個想法是讓每顆測試跑完把自己清掉。聽起來很對吧。查下去才知道清不掉。macOS 的 cfprefsd 管設定檔,測試刪掉一份,它過幾秒又寫回去。側邊欄那批測試的清理,從來沒有真正生效過。

方向換掉。測試改用自己的身分 dev.southern-light.marsdawn.testhost,跟正式的 dev.southern-light.marsdawn 分家。需要設定的測試走記憶體裡的 ScratchDefaults,不寫硬碟。測試目標若掛著正式 App 的身分,根本建不起來。tools/test.sh 每跑完一輪去比對正式 App 的設定資料夾,還有 ~/Library/Preferences/dev.southern-light.marsdawn.plist。多一個、少一個、改一個,整輪失敗。

刪檔那一步我自己點的頭。agent 停下來,沒有自己清我的資料夾。後來刪的是檔名完全對得上的那批:測試和驗收留下的 244 個,加上另一組的 66 個。

同一晚要發 1.0.1 之前,還有一個長得很像的洞。.txt 在畫面上寫著唯讀,選單裡的「儲存」卻按得下去。按下去真的覆寫原檔。用 UTF-16 存的檔案,人一個字都沒改,存回去變成 UTF-8。唯讀文件的儲存和另存全部停用,只留「複製一份」。

凌晨我還問過要不要埋 PostHog,或是 GA4。商店隱私標示已經是「不收集資料」,文案寫了不追蹤,審核也在走。我回:先不用收,有需要再說。

探索可以很兇。它不該跟我正在用的那份 App 住在同一個身分裡。

收尾

好習慣停在驗收那一關,每天例行的那輪測試就還是會寫進我家。分家之後,主題設定那組測試當晚也被擋下來,十一點多改成只用記憶體。

先不說了,我得去看今天的測試有沒有又在正式設定裡留下新檔名。

這件事發生於 2026 年 9 月 18 日,文章整理於 2026 年 10 月。