[iOS] アップデート時のアプリサイズを最適化する方法について

2017.03.24

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

はじめに

こんにちは。モバイルアプリサービス部の平屋です。

前回の記事では新規インストール時のアプリサイズを最適化をする方法を紹介しました。

[iOS] 新規インストール時のアプリサイズを計測し、最適化を行なう方法について

本記事では、アップデート時のアプリサイズを最適化する方法を紹介します。

目次

  • アップデート処理の仕組み
    • アップデートパッケージ
    • インストール時の処理
  • アプリサイズの最適化
  • その他
  • さいごに

アップデート処理の仕組み

アップデートパッケージ

iOS 6以降、App storeは、storeにサブミットされる全てのアップデート版のアプリに関して、自動的に「アップデートパッケージ」を作成します。アップデートパッケージ作成時に、App storeは以下の処理を行います。

  • 「新しいバージョンのアプリ」と「旧バージョンのアプリ」を比較する
  • 最適化されたアップデートパッケージを作成する
    • 最適化
      • バージョン間で変更があったファイルのみ含む
      • 変更のなかったファイルは取り除く

上記比較作業は、アプリケーションバンドルの全てのファイルが対象です。アプリケーションバンドルは以下のようなファイルを含みます。

  • 実行可能ファイル
  • .nib
  • 画像
  • ビデオ
  • オーディオ
  • テキストファイル

最適化によって、アップデートパッケージはフルパッケージ(新規インストール時のパッケージ)よりも大幅に小さくなり、アップデート版のインストールがより迅速になります。

また、この仕組みを活用すれば、サイズ制限にひっかかるくらいの巨大なアプリでも、モバイル回線経由でアップデートを実行できるかもしれません。

インストール時の処理

アップデートパッケージには、「旧バージョンのアプリ」を「新しいバージョンのアプリ」に変換する方法が記載されていて、変換処理は以下のように実行されます。

  • 新しいファイルは単純に追加される
  • 変更されたファイルは更新されたファイルに置き換えられる
  • 削除されたファイルは単純に削除される

「アップデート処理によって出来上がるアプリケーション」と「新規インストール時のアプリケーション」は同じものになるので、開発者やユーザーは上記処理が行われていることに気づくことはないでしょう。

アプリサイズの最適化

アップデート時のアプリサイズを最適化するには、以下の2点に気をつけるようにします。

  • [Tips 1] 不必要な変更を行わない
    • diffを表示するツールなどを使用して、「旧バージョンのアプリ」と「新しいバージョンのアプリ」を比較する
      • 本当に変更が必要なファイルだけが変更されているかどうかを検証する
  • [Tips 2] 1つのファイルの中に「変更が必要な部分」と「変更が不要な部分」がある場合、ファイルを分割する
    • これによって、アップデートパッケージのサイズは縮小し、インストール時間は短くなる

iOS 7.1以上が動作するデバイスでは、アップデートパッケージの中に、ファイル全体ではなく、ファイルの中の変更があった部分だけを含むことが出来る場合があります。

これによって、大きなサイズのファイルの中の一部だけに変更があった場合に、アップデートパッケージのサイズが大幅に縮小する可能性はあります。しかし、インストール時間は長くなるかもしれません。

このような理由からも上記の2つのTipsは重要です。

ファイルへの変更を出来る限りなくし、巨大なファイルを小さいファイルに分散させることによって、ダウンロードサイズは縮小し、インストール時間は短縮されます。

その他

  • アプリケーションバンドル内のファイルのメタデータ(作成日や変更日など)に依存するべきではない
    • アップデートパッケージを使用したアップデート処理では、ファイルの内容に変更がある場合のみ処理が行われる
    • メタデータのみの変更だけの場合は処理が行われない
  • アップデートパッケージを使用したアップデート処理は、App Storeからのダウンロードの場合のみ行われる
    • エンタープライズプログラムを利用した配布などでこの処理を利用することはできない

さいごに

本記事では、アップデート時のアプリサイズを最適化する方法を紹介しました。

新規インストール時のアプリサイズ最適化の場合と同様に、アプリケーションバンドル内の各ファイルの状態を把握しておくことが重要ですね。

参考資料