仕組み
それぞれのバージョン番号がどこから来るのか、そしてインストール方法がアプリごとに異なる理由。
DuoUpdater は /Applications、/Applications/Utilities、~/Applications をスキャンし、見つけたアプリを複数の更新元と優先順位の高い順に照合します。最初にそのアプリを認識した更新元が答えを返し、残りには問い合わせません。
- Mac App Store — Apple の iTunes lookup API を、ストアフロントと地域を考慮しながら使います。ネイティブの
mac-softwareの結果だけを信頼し、iOS 版を Mac 上で動かしているアプリは除外します。バージョン番号が独自に進むため、そのままでは絶対にインストールできないアップデートとして表示されてしまうからです。 - Xcode Releases — App Store 経由ではない Xcode のビルドです。あらゆるベータとリリース候補を、実際にインストールされているチャンネルに合わせて照合します。ストアからインストールされた Xcode は、すでに上の項目で答えが出ています。
- Homebrew Cask —
.appのファイル名で照合し、見つからなければ bundle id にフォールバックするので、pkgをインストールするタイプの cask も見逃しません。Homebrew がインストールし、かつ最新に保っている cask についてだけ答えます(auto_updatesが付いた cask は対象外です)。そのため一つを更新しても Homebrew 側の記録は最新のままで、brew upgradeが同じリリースを重ねてインストールすることはありません。 - Sparkle — アプリ自身が公開する
SUFeedURLの appcast です。これはアプリ内蔵のアップデータが読むのと同じフィードです。 - GitHub Releases — その方式で配布されているアプリを、チャンネルを意識しながら照合します。個別のルールがそのアプリ向けにインストール可能な Mac 用アセットを指定し、検証済みでない限り、検出のみです。
- Alcove — 認証が必要な更新用エンドポイントで、ライセンスを入力している場合のみ使われます。入力していない場合、この更新元自体が存在せず、Alcove は下の公開ベンダープローブへとフォールバックします。
- ベンダープローブ — フィードもストアの掲載もないすべてのアプリのために、ベンダー自身のエンドポイントに対して手作業で書かれたルールです。
上の更新元リストを丸ごと飛ばす2種類のアプリ
JetBrains Toolbox が管理するアプリと、TestFlight からインストールしたアプリは、上記7つのどれかに問い合わせる前に答えが決まります。Toolbox と TestFlight がそれぞれそのアプリの更新を自分で管理しており、参考になる別の情報源が存在しないため、これらのアプリに対して上のリストが動くことはありません。
それぞれのアプリが想定するやり方でアップデートする
多くのアップデータは仕組みを一つに決め、どのアプリもそれで押し通します。DuoUpdater はアプリが元々備えている仕組みをそのまま使うため、行によって「更新」ボタンが行う内容が変わります。
| チャンネル | 「更新」を押すと何が起きるか |
|---|---|
| Sparkle | ダウンロードし、下記のチェックを行ったうえでバンドルを入れ替え、その後アプリを終了して再度開きます(オフにしていない限り) |
| Mac App Store | ストア経由の完全ダウンロードです。それができない場合 —— バックグラウンドヘルパーが承認されていない、またはアプリが別の地域にロックされている —— その行の操作は App Store アプリへ引き継がれます |
| 自己更新型(Electron、Squirrel) | アプリを開き、そのアプリ自身のアップデータに作業を任せます |
| Homebrew の app cask | brew install --cask --force |
Homebrew の pkg cask |
公式パッケージをダウンロードし、システムのインストーラを開きます |
アプリが独自のアップデータを備えている場合、DuoUpdater は張り合わずに任せます。安全に実行できないことがあれば、推測で進めずに、その行にそう表示します。
コマンドラインツールとフォント
リストの一番下にある1行は、Homebrew がインストールするもののうちアプリではないものすべてをまとめて示します —— コマンドライン形式のフォーミュラや、.app を一切インストールしないcask(CLI、フォント、ドライバなど)です。これらはアプリ単位の判断が不要で、スキャンできるバンドルも持たないため、この行がなければ完全に見えなくなってしまいます。
一方、アプリをインストールするcaskは他と同じ通常の行として扱われ、一番下の行によるアップグレードの対象には決してなりません。そのため二重にカウントされることはありません。