プライバシー
テレメトリなし、解析なし、自前のサーバなし —— そして私たちのコンテナの外を読む4つのケース。
テレメトリも、解析用のSDKも、私たちが運用するサーバもありません。すべてのネットワークリクエストは、チェック対象のアプリの提供元 —— あるいは api.github.com、formulae.brew.sh、xcodereleases.com(Xcodeのバージョンを読み取っているコミュニティ運営のインデックス)—— に直接送られ、そのリクエストに必要な情報以外、あなたについて何も含みません。含まれるのはアプリ自身のバージョンだけで、これはベンダーのフィードが正しいチャンネルで答えられるようにするためのものです。
私たちのコンテナの外を読み取る4つのケースは、はっきり書いておく価値があります。
CleanShot X。 インストールされている場合、その activationKey が設定ファイルから読み取られ、CleanShot自身のアップデータが使うのと同じ、パーソナライズされたappcastを要求するために使われます。この鍵がないと、CleanShotのフィードは試用版チャンネルとして応答し、インストールできないアップデートを案内されることになります。この鍵の送信先は legit.maketheweb.io だけで、ログに書き込まれることはなく、HTTPのディスクキャッシュからも除外されます。
TablePlus。 その IsReceiveBetaBuild 設定が読み取られ、アプリ自身が設定されているのと同じチャンネルで検出が行われます。
GitHub。 APIのレート制限を1時間あたり60リクエストから5,000リクエストに引き上げるため、GITHUB_TOKEN / GH_TOKEN、それがなければ gh auth token からトークンを取得します。送信先は api.github.com だけで、そのホストから離れるリダイレクトからは除去されます。
あなたのApp Storeサインイン。 TestFlightのデータを読み取るたびに、システムのアカウントデータベースを一つの目的だけで読み取ります —— アクティブなApp Storeアカウントのメディアタイプに App Store が含まれているかどうかです。これによって、TestFlightのベータをいま提示できるかどうかが決まり、更新ボタンを押すたびにサインインを求めてTestFlightが起動してしまうことを防いでいます。それ以外は何も読み取りません —— Apple ID も、名前も、識別子も —— そして、そこで読み取ったものが Mac の外に出ることもありません。
あなたのApple Developerサインイン(Xcode)
Xcodeのベータとリリース候補は、Appleのデベロッパーサイトから、あなたのApple IDの認証を経てのみダウンロードされます。設定 → Xcode の下でサインインを選ぶと、サインイン自体はアプリの中にあるApple自身のページ上で行われます。パスワードと二要素コードはAppleに送られ、アプリ側がそれを読み取ることはありません。アプリが保持するのは、その結果として得られるセッション —— Appleが設定する apple.com のクッキー —— であり、キーチェーンとアプリ自身のWebデータストアの両方に保存されるため、再起動してもサインアウト状態にはなりません。送信先は *.apple.com だけです:Xcodeのダウンロード時、設定 → Xcode を開いたり更新したりしてAppleのXcodeダウンロード一覧を読み取るとき、そして1時間ごとにセッションがまだ有効かAppleへ確認するときです。これらの値がログに書き込まれることはなく、ログに残るのはAppleが返してくるクッキーの名前だけです。設定 → Xcode →「サインアウトして消去」 はこれらを、「信頼済みデバイス」用クッキーとともに削除するので、次回のサインインでは改めてコードの入力が求められます。
Appleは数時間後 —— 私たちのテストではおよそ8時間 —— に、Apple側からセッションを終了させます。アプリがセッションの終了を検知すると(1時間ごとのチェック時、またはXcodeのダウンロードを開始したとき)、同じWebデータストア内で、非表示のままAppleのサインインページを一度読み込みます。この Mac のサインインをAppleがまだ認識していれば、パスワードなしで新しいセッションが返されます。ウインドウは表示されず、何も入力されません。Appleがパスワードを求めてきた場合は、そのページは30秒後に破棄され、Xcodeの行が改めてサインインを求めます。これはセッションが終了するたびに最大1回だけ行われ、設定 → Xcode →「バックグラウンドでセッションを更新」 でオフにできます。
認証情報はキーチェーンにとどまる
自分で入力したもの —— GitHubトークン、Alcoveのライセンス、上記のApple Developerセッション —— は、いずれもログインキーチェーンに AfterFirstUnlockThisDeviceOnly として保存されます。iCloudには同期されず、plistにも書き込まれません。
ベンダーのページはクッキーを残さない
ベンダー自身のWebページとしてしか表示できないリリースノートは、永続化しないデータストアを持つ WKWebView 内でレンダリングされるため、ベンダーのクッキーが再起動を越えて残ることはありません。唯一の例外は上記のApple Developerサインインで、そのウインドウと非表示の更新用ページだけは、意図的にセッションを保持します。
このウェブサイトについて
ここまではアプリについての説明です。いま読んでいるこのページは別物で、実際に何かを収集しているため、アプリの挙動から推測させるのではなく、はっきり書いておく価値があります。
このサイトが実行しているスクリプトは2つで、どちらもVercel製、どちらもファーストパーティです。
Vercel Web Analytics はページビューを数えます。Vercel自身のドキュメントによれば、各ビューについて次を記録します:時刻、URLとそのルートパターン、リファラ、フィルタされたクエリパラメータ、おおよその位置情報(国、地域、市区町村)、バージョン情報を含むブラウザとOS、デバイスの種類。
Vercel Speed Insights は、このページが実際にどれだけ速く読み込まれたかを計測します。Vercel自身のドキュメントによれば、各計測は次を含みます:URLとそのルートパターン、報告対象のWeb Vitalとそれが紐づけられた要素(html>body img.header のようなCSSセレクタ)、接続クラス(4g、3g など)、ブラウザ、デバイスの種類とデバイスのOS、2文字の国コード、計測パッケージのバージョン、イベントを受信した時刻。位置情報の粒度がAnalyticsより狭く、国までしか記録されない点に注意してください(Analyticsは市区町村まで記録します)。
どちらも行っていないこと:サードパーティのクッキーは一切ありません。Analyticsは、あなたのマシンに保存された何かではなく、受信したリクエストから導出したハッシュで訪問者を識別し、その識別情報は24時間後に破棄されます —— そのため、サイトをまたいであなたを追跡することはできませんし、1週間前にここで何をしたかを再構築することもできません。Speed Insightsには訪問者の識別情報そのものがありません。Vercelは、複数ページにまたがって閲覧セッションを再構築できるような情報は一切収集・保存しておらず、どちらの機能もデータポイントをIPアドレスに紐づけていないと表明しています。
それ以外には何もありません。広告ネットワークも、セッション録画も、いかなるサードパーティスクリプトもありません。ダウンロードボタンはGitHubに直接リンクしており、リリースノートはこのサイト自身のリポジトリ内のファイルから来ています。
計測されたくない場合、どのコンテンツブロッカーでもこの2つのスクリプトを止められ、サイトはそれがあってもなくてもまったく同じように動作します。