隱私
沒有遙測、沒有分析、沒有伺服器——以及四個會讀取我們自己容器之外資料的情況。
沒有遙測、沒有分析 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。
廠商頁面不會留下 cookie
只能以廠商自家網頁形式呈現的版本說明,會在一個資料儲存區為非永久性的 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,版本說明則來自這個網站自己版本庫裡的一個檔案。
如果你不希望被這樣量測,任何內容封鎖工具都能擋掉這兩支腳本,網站在沒有它們的情況下也運作得一模一樣。