どうも、流浪のエンジニアの沼田です。
cocos2d-x やったり Unity やったり節操ないです。
今回は Unity のお話です。月曜未明に書いてるので短く予告編にとどめます。
スプラトゥーンも FE if も積んでるんです。お察しください。
「64bit 対応の Unity iOS アプリって?」
2015 年の 6 月から、iOS アプリを Apple Store に出す際は、64bit 対応が義務付けられました。64bit 対応してないと、アプリを更新したり新規リリースしたりできないのです。
Unity では、64bit 対応にあたり IL2CPP という方法をとりました。IL2CPP とは、これまで mono の上で .net アプリを動かしていた方式とは異なり、C# コードを C++ に変換する方式なのです。
つまり、64bit 対応の Unity iOS アプリとは、IL2CPP を使って C++ に変換することで 64bit 対応した Uniy iOS アプリということになります。
「なんでストアにアップすると増えるの?」
64bit 対応したからです。(正確にいうとここも怪しいんだけどね)
「なんで 64bit 対応すると増えるの?」
32bit のバイナリと 64bit のバイナリは別だからです。
今まで 32bit のバイナリだけでよかったところ、これからは 32bit と 64bit のバイナリを ipa に積まないといけません。
※32bit サポートを切るというのは今回ナシね。
「今まで 64bit 端末で 32bit アプリ動いてたよね?」
うん、動いてた。それは 64bit 端末の上で 32bit アプリをエミュレートしてたのさ。(語弊あるけど流してね)
でも Apple さまがけしからん!と言ったので、これからは 64bit 端末では 32bit をエミュレートせず、64bit 端末の性能をフルに生かせる 64bit 対応アプリしかストアにリリースできなくなったとさ。
※新規リリースやアップデートが無理なだけで、既に公開されてる 32bit アプリは、アップデートがなければ 32bit のまま。
「ipa に 64bit バイナリが含まれてるのに、ストアにあげたら ipa サイズが増えるというのは変だよね?」
そうですね。普通そう思いますよね。でも増えるんですよこれが。
Unity Japan さまの記事をまずはご一読ください。
「暗号化領域」というものがあって、そこは圧縮がききにくいのです。詳しい話は後日しますが、以下の計算式でストアにアップすると増えるアプリサイズを求めることができます。
【暗号化領域】× (1 - 【圧縮率】)
たとえば、私の手元だと zip の圧縮率がだいたい 25% ほどで暗号化領域が 60MB ぐらいなんですが、60 * 0.75 = 45MB ほど増える計算です。ただしこれは最悪値で、暗号化領域の圧縮具合によってはもっと小さくて済みます。また、暗号化領域は上記記事のように otool で求めることができます。
次回予告
今回はいきなり計算式を登場させてしまいましたが、この計算式の導出方法について詳しく説明します。あと、暗号化領域って別に 64bit 対応必須の前からあるわけで、なぜ急に問題になりだしたかをもうちょっとロジカルに説明したいところ。
つづく。