隱私

沒有遙測、沒有分析、沒有伺服器——以及四個會讀取我們自己容器之外資料的情況。

← 所有文件

沒有遙測、沒有分析 SDK,也沒有我們自己的伺服器。每一個網路請求都直接送往被檢查的那個 App 的廠商⁠——或是送往 api.github.com、formulae.brew.sh 和 xcodereleases.com(讀取 Xcode 版本資訊的社群維護索引)⁠——而且除了請求本身所需要的內容之外,不會夾帶任何關於你的資訊:只有 App 自己的版本號,好讓廠商的 feed 能針對正確的通道作答。

有四件事值得明確說出來,因為它們牽涉到讀取我們自己容器之外的資料。

CleanShot X。 如果你裝了它,DuoUpdater 會從它的偏好設定裡讀出 activationKey,用來請求 CleanShot 自己更新程式所使用的個人化 appcast。沒有這把金鑰,CleanShot 的 feed 會回報試用版通道,你會被告知一些其實裝不上的更新。這把金鑰只會送到 legit.maketheweb.io,絕不會寫進日誌,也不會被收進 HTTP 磁碟快取。

TablePlus。 會讀取它的 IsReceiveBetaBuild 偏好設定,讓偵測結果和 App 本身設定的通道一致。

GitHub。 為了把 API 速率限制從一小時 60 次提高到 5,000 次,會從 GITHUB_TOKEN / GH_TOKEN 取得權杖,取不到的話則改用 gh auth token。這把權杖只會送往 api.github.com,一旦重新導向離開這個主機,就會被拔除。

你的 App Store 登入狀態。 每當需要讀取 TestFlight 的資料時,都會讀取系統的帳號資料庫,且只為了一件事:目前使用中的 App Store 帳號,其媒體類型是否包含 App Store。這決定了現在能不能把某個 TestFlight Beta 版提供給你,也讓「重新整理」按鈕不會只為了要你登入而把 TestFlight 開啟。除此之外不會從中讀取任何其他東西⁠——沒有 Apple ID、沒有名稱、沒有任何識別碼⁠——在那裡讀到的任何內容也都不會離開這台 Mac。

你的 Apple Developer 登入狀態(Xcode)

Xcode 的 Beta 版與候選版,只會從 Apple 的開發者網站下載,而且需要你的 Apple ID 登入。如果你在「設定 → Xcode」裡選擇登入,登入過程會在 App 內、於 Apple 自己的頁面上完成:你的密碼和雙重認證碼會直接送到 Apple,App 本身不會讀取它們。App 保留下來的,是登入完成後的工作階段⁠——也就是 Apple 設定的那些 apple.com cookie⁠——存放在鑰匙圈和 App 自己的網頁資料儲存區裡,這樣一來重新啟動 App 也不會被登出。這些內容只會送往 *.apple.com:用於下載 Xcode、在「設定 → Xcode」裡打開或重新整理時讀取 Apple 的 Xcode 下載清單,以及每小時詢問一次 Apple 這個工作階段是否仍然有效。它們的值絕不會被寫進日誌;日誌裡只會記錄 Apple 回傳的 cookie 名稱。「設定 → Xcode → 登出並清除」會把它們連同「受信任的裝置」cookie 一併刪除,這樣下一次登入就得重新輸入驗證碼。

Apple 會在它那一端,於數小時後結束這個工作階段⁠——我們實測大約是八小時。當 App 發現工作階段已經結束時(在每小時的檢查時,或是你開始下載 Xcode 時),會在同一個網頁資料儲存區裡,隱藏地載入一次 Apple 的登入頁面。如果 Apple 仍然認得這台 Mac 的登入狀態,就會不需要你的密碼、直接核發一個新的工作階段。不會跳出任何視窗,也不需要你輸入任何東西;如果 Apple 需要你的密碼,這個頁面會在 30 秒後被捨棄,Xcode 那一列會請你重新登入。這個動作在每次工作階段結束時最多執行一次,你也可以在「設定 → Xcode → 在背景續期工作階段」裡把它關閉。

憑證都留在鑰匙圈裡

任何你自己輸入的內容⁠——GitHub 權杖、Alcove 授權、上面提到的 Apple Developer 工作階段⁠——都會以 AfterFirstUnlockThisDeviceOnly 的方式,存放在登入鑰匙圈裡。不會同步到 iCloud,也不會寫進任何 plist。

只能以廠商自家網頁形式呈現的版本說明,會在一個資料儲存區為非永久性的 WKWebView 裡顯示,所以廠商的 cookie 不會在 DuoUpdater 重新啟動後留存。唯一的例外是上面提到的 Apple Developer 登入⁠——它的視窗和那個隱藏的續期頁面⁠——會刻意保留工作階段,原因如前所述。

關於這個網站

以上說的都是這個 App。你正在讀的這個網頁是另外一回事,它確實會收集一些東西,與其讓你從 App 的行為去推測,不如在這裡直接說清楚。

這個網站執行兩支腳本,都來自 Vercel,都是第一方腳本。

Vercel Web Analytics 統計頁面瀏覽數。根據 Vercel 自己的文件,每次瀏覽會記錄:時間、網址與其路由樣式、來源網址(referrer)、經過篩選的查詢參數、大致的所在地(國家、地區、城市)、瀏覽器與作業系統及其版本,以及裝置類型。

Vercel Speed Insights 測量頁面實際的載入速度。根據 Vercel 自己的文件,每一筆量測資料會記錄:網址與其路由樣式、所回報的 Web Vital 指標及其對應的元素(例如 html>body img.header 這樣的 CSS 選擇器)、連線等級(4g、3g 等)、瀏覽器、裝置類型與裝置作業系統、以雙字母代碼表示的國家、量測套件的版本,以及事件被接收到的時間。要注意的是它記錄的位置範圍較窄:只到國家層級,而 Analytics 則會細到城市層級。

這兩支腳本都不做的事:沒有第三方 cookie。Analytics 是靠傳入請求所產生的雜湊值來辨識訪客,而不是靠儲存在你機器上的任何東西,而且這個身分會在 24 小時後被捨棄⁠——所以它無法跨網站追蹤你,也無法重建你一週前在這裡做過什麼。Speed Insights 完全沒有任何訪客身分;Vercel 表明它不會收集或儲存任何能讓瀏覽過程被跨頁重建的資訊,這兩項功能也都不會把資料點與 IP 位址綁在一起。

除此之外就沒有別的了。沒有廣告網路,沒有工作階段錄影,也沒有任何第三方腳本。下載按鈕會直接連到 GitHub,版本說明則來自這個網站自己版本庫裡的一個檔案。

如果你不希望被這樣量測,任何內容封鎖工具都能擋掉這兩支腳本,網站在沒有它們的情況下也運作得一模一樣。