AppStoreでは100MBを超えるとLTEでアプリをダウンロードできなくなります。ダウンロード数を増やすには、アプリサイズ(圧縮後)を100MB以下に抑える必要があります。

しかし、Unityを使用して開発していると、iOSのアプリサイズがAndroidよりも大幅に大きくなります。その原因の多くは、テクスチャの容量です。

Androidでアルファ付き画像を使用すると、デフォルトでETC2+ALPHAが選択され、1画素8bitになります。また、非正方形の画像も4x4画素の倍数であれば圧縮可能です。対して、iOSの場合はデフォルトでPVRTC 4bitが選択されますが、PVRTCは正方形かつ2の乗数しか扱えないため、往々にしてRGBA無圧縮が選択され、1画素32bitになります。その結果、iOSのアプリサイズがAndroidの4倍になります。

この問題を解決するには、UnityのSpritePackerを使用して、2の乗数の解像度に複数の画像をまとめる必要があります。具体的に、テクスチャのSprite ModeにPolygonに指定した上で、Packing Tagを指定すると、自動的にパッキングすることができます。

Packingによって、テクスチャの解像度は正方形になります。その結果、PVRTCでの圧縮が有効になります。アルファ値が存在しない場合は、PVRTC 4bitでも十分な画質が確保できるため、これだけで問題は解消です。しかし、UI画像など、アルファ値が存在する場合は、PVRTC 4bitが非常に汚いため、実用的ではありません。

アルファ値が存在する画像を使用する場合は、iOSのTexture CompressionでASTC 4x4を指定します。これを使用すると、1画素8bitになり、とても綺麗です。しかし、ASTC 4x4はiPhone6以降にのみ対応しており、iPhone5SではランタイムでRGBA無圧縮に展開されるため、1枚につき数百ミリ秒程度の展開コストがかかります。そのため、全ての画像にASTC 4x4を使用すると非常に重いです。そのため、全てのUI画像に適用するのではなく、Sprite Packingする画像にのみ適用することを推奨します。

推奨設定:
・画像は4x4の倍数で作成する (ETC2およびASTCの制約)
・テクスチャはSpritePackerでまとめる (PVRTCを使用できるようにする)
・アルファなしの場合はPVRTCを使用する (iPhone5Sのパフォーマンス向上のため)
・アルファ付きの場合はASTC 4x4を使用する (画質を上げるため)

注意:
・iPhone5SではASTCがソフトデコードになるので使いすぎない