せっかくインストールしたアプリを削除されたくないので、インストール後のバイナリサイズを削ってみました。
今年は細かい作業やりたくないので、忘れないうちに記録に残しておくことにしました。
まず見るWWDCのセッション
App ThiningとかAssets Catalogのことを知っておけば、アーカイブ前にもろもろ対策できます。
- https://developer.apple.com/videos/play/wwdc2015/404/
- https://developer.apple.com/videos/play/wwdc2018/227/
アプリのサイズ
手元やCIでarchiveした.ipa
のサイズと、App Store上のサイズと、インストール後のサイズの3つはそれぞれ異なります。
これは、App ThiningやApp Store向けの暗号化などの影響によるもので、 主に後者の理由で、App Store上で表示されるアプリサイズ(やApp Store Connectに表示される想定サイズ)は、端末にインストール後のサイズより大体大きくなります。
Assetsの中でかさばっているものを調べる
Xcodeでarchiveすると、.app
の中にAssets.car
という圧縮ファイルが生成されます。
この中で大きいものは、端末にインストールした後も嵩張ることが多いので、そこを重点的に削っていきます。
assetutil
というツールを使って、Assets.car
のメタ情報を一度展開します。
xcrun --sdk iphoneos assetutil --info Assets.car >> extracted
ここで吐き出されたファイルはJSON形式で、アセットごとに
{ ... "AssetType" : "Vector", "SizeOnDisk" : 1234567, "Name" : "hoge", ... }
というような形式で吐き出されます。
SizeOnDisk
のところに注目すればいいので、気合のある人はJSONをパースしてソートします。
気合のない人は、
cat extracted | grep -n5 -E "\"SizeOnDisk\" : [0-9]{7}"
のようなコマンドを打てば、大体1MB以上の大きなファイルが引っかかってくれます。
画像を小さくする
Assets Catalogのコンパイラオプションを一応確認しておきます。
- 何も指定していない場合、上のセッションのように適切にAssetsが使われていれば、PNGはいい感じになっている場合が多いので、減色処理などをしてもあまり効果がない
- JPEGはそのままなので、大きい場合は適宜リサイズやqualityを下げたりが必要
- PDFなどベクター画像に関しても、なぜかそのままのことが多いので、ファイルを小さくするか、JPEG,PNGなどの他のフォーマットの変換する
App Store上のサイズは、少ししか減らなかったのですが、端末インストール後のサイズは、ほとんど上の手法で削減したのサイズと同じくらい小さくなりました。