仕組み

それぞれのバージョン番号がどこから来るのか、そしてインストール方法がアプリごとに異なる理由。

← すべてのドキュメント

DuoUpdater は /Applications、/Applications/Utilities、~/Applications をスキャンし、見つけたアプリを複数の更新元と優先順位の高い順に照合します。最初にそのアプリを認識した更新元が答えを返し、残りには問い合わせません。

  1. Mac App Store — Apple の iTunes lookup API を、ストアフロントと地域を考慮しながら使います。ネイティブの mac-software の結果だけを信頼し、iOS 版を Mac 上で動かしているアプリは除外します。バージョン番号が独自に進むため、そのままでは絶対にインストールできないアップデートとして表示されてしまうからです。
  2. Xcode Releases — App Store 経由ではない Xcode のビルドです。あらゆるベータとリリース候補を、実際にインストールされているチャンネルに合わせて照合します。ストアからインストールされた Xcode は、すでに上の項目で答えが出ています。
  3. Homebrew Cask — .app のファイル名で照合し、見つからなければ bundle id にフォールバックするので、pkg をインストールするタイプの cask も見逃しません。Homebrew がインストールし、かつ最新に保っている cask についてだけ答えます(auto_updates が付いた cask は対象外です)。そのため一つを更新しても Homebrew 側の記録は最新のままで、brew upgrade が同じリリースを重ねてインストールすることはありません。
  4. Sparkle — アプリ自身が公開する SUFeedURL の appcast です。これはアプリ内蔵のアップデータが読むのと同じフィードです。
  5. GitHub Releases — その方式で配布されているアプリを、チャンネルを意識しながら照合します。個別のルールがそのアプリ向けにインストール可能な Mac 用アセットを指定し、検証済みでない限り、検出のみです。
  6. Alcove — 認証が必要な更新用エンドポイントで、ライセンスを入力している場合のみ使われます。入力していない場合、この更新元自体が存在せず、Alcove は下の公開ベンダープローブへとフォールバックします。
  7. ベンダープローブ — フィードもストアの掲載もないすべてのアプリのために、ベンダー自身のエンドポイントに対して手作業で書かれたルールです。

上の更新元リストを丸ごと飛ばす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は他と同じ通常の行として扱われ、一番下の行によるアップグレードの対象には決してなりません。そのため二重にカウントされることはありません。