だらだら〜個人事業〜

HatenaDiaryから引っ越してきました。Githubもnyakagawanです。

unityのiphoneアプリサイズ

                                                                      • -

3/10:タイムリーな事にAppleが3Gでのアプリサイズ制限を50MBに緩和したらしいです。
ここで書いてるのは20MB制限時代のことなので、ちょっとしたアプリならAssetBundleとか使わなくても出せちゃいそうですね(Androidマーケットはどうなんだって話ですが、よくわからん)
ページが見つかりませんでした- [ファミ通app]

                                                                      • -

UnityでIPhoneアプリをつくって、先日審査に出したのだが20MBを遙かに超えるサイズになってるけど大丈夫?的なメールが返ってきたらしい(らしいというのは、自分が管理しているメールアドレスじゃないところにメールがきたのでまだ未確認なため)
ArchiveしてSubmitする前にできたipaを確認して20MB以内だったので大丈夫と思ったのだが、制限の掛かっているものはこのipaのことじゃないのかもしれない・・・。オーガナイザで出来たArchiveを右クリックしてFinderで見た先の.xarchiveファイルを見ると50MB超だった。
結局なにが20MB以内である必要があるのかよく分からない・・・。実際にメール見たらなにか分かるのかも。

Unityだからバイナリサイズがでかくなるのはわかりやすい話かもしれないが、ミニゲームみたいなアプリで制限を超えるとなるときついなー。Pro版のStripLevelをいじれたらましになるのかもしれない。じゃなければAssetBundle必須になっちゃうよね事実上。

ちなみにどの程度のアプリかというと。

  • 画像ファイルは大体8Mぐらい(フォント含む)
  • 音楽が1Mぐらい
  • クラスはよく分からんが50個ぐらい?
  • シーンは4つ
  • 2Dのシューティングゲーム
  • エフェクト関係が自分がやってないのでよく分からん。

Xcode4.2のほぼデフォルトのReleaseビルドでこのぐらい。素材以外がどんな感じでサイズに響いてくるのか見当つかないけど大きいとは思えないんだよなぁ。

  • ScriptCallOptimaizationがSlow and Safeになってる
  • Target iOS Versionが4.0
  • TargetPlatformがArmv6+7

この辺りの設定がサイズに効いてきそうな感はあるのでやってみるか?

あぁあと、InAppPurchaseとGamekitのためにFrameworkリンクしてるからそれも関係するだろうなサイズ

追記

ScriptCallOptimaization->Fast but no Execptions

2MBへって50MBになったw

TargetPlatform->Armv6

何も変わらず。おかしいと思ってXcodeの方でValidArchitexturesを『arcv6 armv7』->『armv6』に。
15Mへって35Mに・・・!
ちなみにarmv7にすると数百KB増えた。でもやっぱり15Mくらい減る。ハイブリットだとサイズがどうたらって記事はこのことをいってたのか?これでも足らないけど。

Target iOS Version -> 4.1

数百MBへった。たしかGameCenterサポートが4.1からだったような気がするがその辺が関係するのかさてはて。

DynamicBatching -> OFF

なんも変わらず。関係無し?これもXcode側の設定か?

TargetResolutions -> HDのみ

同上

Api Compatibility level -> .NET 2.0

7MB増えて42MBに!うぼぁ。subsetのままでおk

true colorの1024x1024テキスチャを16bitに

2MBへって33MBに。まぁ減らせるのはこれぐらいだろうな。

色々変えたけど効果があるのはScriptCallOptimaizationとでかいのはTargetPlatformか。でも動作は確認してないんだよね・・・。そもそもSlowAndSafeにしてたのはつぶせなかったバグがあるせいだし・・・。Xcodeのほうでもうちょっとなんとかならんのかこれは

Assetサイズ詳細

おぉ!というかこんなところにAssetサイズの詳細がでるとはしらなかった。
http://unity3d.com/support/documentation/Manual/Reducing%20File%20size.html

Textures 12.0 mb 70.8%
Meshes 0.0 kb 0.0%
Animations 0.0 kb 0.0%
Sounds 665.1 kb 3.8%
Shaders 1.1 kb 0.0%
Other Assets 210.5 kb 1.2%
Levels 25.6 kb 0.1%
Scripts 260.0 kb 1.5%
Included DLLs 3.8 mb 22.4%
File headers 20.2 kb 0.1%
Complete size 16.9 mb 100.0%

詳細をみていくと使ってないと思っていたフォントが入ってたり、自分の知らないエフェクト画像があったりで4MBも見積もりOverとは。まぁ問題はこの17MBからArchiveした後に50MBに増えるのはなぜ?ってところなんだけど。

結論?

結局Xcodeプロジェクトのなかのmscorlib.dll.sがどう考えてもでかいよなー(17MBあった)とおもって調べたらUnityの公式にiOSアプリのサイズ削減の手引きがあるじゃないかw
http://unity3d.com/support/documentation/Manual/iphone-playerSizeOptimization.html

iOSPro(Advanced)じゃないとStrippingできませんとか書いてあるけど気になる文章はこちら

Can I produce apps of less than 20 megabytes with Unity?

Yes. An empty project would take about 13 MB in the AppStore if all the size optimizations were turned off. This gives you a budget of about 7MB for compressed assets in your game. If you own an Advanced License (and therefore have access to the stripping option), the empty scene with just the main camera can be reduced to about 6 MB in the AppStore (zipped and DRM attached) and you will have about 14 MB available for compressed assets.

英語が出来ない人なので推測で詠むけどつまり

  • 最適化オプション全部OFFで空のアプリ作るとそれだけで13MB食う
  • なのでUnity使う側は7MBしか使えない。
  • AdvancedLicenceで最適化ばりばりで空のアプリ作るとサイズが6MBになる
  • なのでUnity使う側は14MBも使える!十分だろ?

ということで、自分の今のアプリはAssetががんばっても14,5MBってところなのでAdavancedLicenceでStripping最大にしても20MBぎりぎりアウトってところ。画像ファイル小さくして圧縮率あげるしかない。というわけでAdvancedLicence買うか。ってなるほど金持ちじゃないからどうしよかなw

そうだ!Unity3.5にあげるのを試してなかった!これしかないw