- GDIFF プログラムで使用されているようなアルゴリズムを使用していますか?
- iOS バイナリの代わりに中間コードをユーザーに出荷しますか?
- Windows で iOS を更新しているときにデルタ更新を実行できないのはなぜですか?
1 に答える
差分更新は、「プログラム全体ではなく、変更されたコードのみをユーザーがダウンロードする必要がある更新」と定義されています。
実際、iOS はデルタ アップデートを実行します。Ralph のコメントとは逆に、私たちはそれがどのように機能するかを正確に知っています。
- アプリケーション
iOS アプリケーションの場合、差分更新を使用して、新しいバージョンのダウンロード サイズを最小限に抑え、インターネット トラフィックを節約します。通常、プログラムのサイズの大部分を占めるのは、静止画像やその他のメディアです。バグ修正などの単純な更新中は、通常、これらの静的イメージは同じままであり、ネットワーク経由で再度送信する必要はありません。送信される唯一のものは、バグのあるコードを含む実際の Mach-O バイナリと、変更されたファイルだけです。
そのため、デルタ更新はチェックサムによって実行される可能性が最も高くなります。アプリのアップデートを送信すると、Apple は送信されたすべてのファイルのチェックサムをいくつかのアルゴリズム (SHA1 または MD5 に最もよく似ています) を使用してチェックし、変更をスキャンします。実行可能ファイルが変更されているが、特定のイメージまたはその他のファイルが変更されていない場合、ユーザーは既にダウンロードしており、再度ダウンロードする必要がないため、イメージには更新が含まれていません。この方法は、他のタイプのファイルと共に実行可能ファイルを含むため、差分更新の定義に正確には関係しない場合がありますが、概念は非常に似ています。
- OTA アップデート
Apple は、iOS の無線アップデートでもデルタ アップデートを使用します。これは、ジェイルブレイクされた iOS デバイスで表示されます。アップデートは にダウンロードされます/var/MobileSofwareUpdate/softwareupdate.xxxx
。xxxx
おそらく はビルド/リリース番号です。各ソフトウェア アップデートにはルート ファイルシステムのイメージが含まれていますが、iOS のバージョン全体が含まれているわけではありません。ユーザーが現在使用しているバージョンから変更されたファイルのみを置き換える必要があるため、それらのファイルのみが更新パッケージに含まれます。これらの変更を見つける方法は、チェックサムがファイルの変更を見つける iOS アプリと同じである可能性が高いです。
- アルゴリズム
基本的に、あなたの質問に答えるために、Apple のアルゴリズムは 2 つの個々のファイルの違いを送信するのではなく (git コミットで見られるものと同様)、更新されたファイル全体を送信します。彼らの「アルゴリズム」は、最後のバージョン間の変更を探すだけで、実際の変更自体は探しません。これは、OTA 更新パッケージでは、変更のログだけでなく、完全なファイルが利用可能であるという事実によって証明されています。