5

iOS アプリケーションを iTunes にアップロードしています。iOS 用の LibGdx ゲームをコンパイルするために MonoTouch を使用しています。Android では、ほとんど 7 ~ 8 MB ではありません。しかし、iTunes AppStore にアップロードすると、78 MB になります。どうしてか分かりません ?私にお知らせください。

Apple からもこのエラーを受け取りました。

開発者各位

「Run Panda Run: Racing」の最近の配信で 1 つまたは複数の問題が発見されました。配送を処理するには、次の問題を修正する必要があります。

無効な実行可能サイズ - 実行可能サイズの 72037504 バイトが、許可されている最大サイズの 60 MB を超えています。

4

3 に答える 3

16

詳細がわからないと、明確な答えを出すのは難しいです。アプリケーションのサイズに影響を与える可能性のあるものはたくさんあります。基本から始めましょう。

確認すべきこと:

  • まず、アプリケーションが Don't link でビルドされていないことを確認ください。Xamarin.iOS が出荷するほぼ完全な .NET フレームワークをAOT するため、非常に大きなアプリケーションが作成されます。

  • 次に、単一のアーキテクチャ (ARMv7) 用にビルドしていることを確認してください。FAT バイナリ (ARMv7 や ARMv7s など) は 2 回ビルドされ、2 倍のスペースが必要です。

  • 3 番目に、デバッグビルドを有効にしていないことを確認します(リリース ビルドでは有効にすることができます。これはチェックボックスです)。これにより、デバッグをサポートするためのより大きなバイナリが作成されます。

  • 4 番目に、 LLVMコンパイラを使用していることを確認します。コンパイルに時間がかかりますが、生成されるコードはより優れた (そしてより小さく) なります。

これらの初期チェックは非常に簡単に実行でき、非常に大きなバイナリを取得する最も一般的な理由です。

サイズの由来を理解するには、アプリケーションがどのように構築されているかを知る必要があります。

  • Android 版と iOS 版の主な違いは、iOS では JIT (ジャストインタイム コンパイル) が許可されていないことです (Apple の規則)。

  • つまり、コードを AOT 処理 (事前コンパイル) する必要があり、そのプロセスにより、はるかに大きな実行可能ファイルが作成されます (IL はネイティブ コードよりもはるかにコンパクトであるため)。

  • コードがジェネリックに重きを置いている場合、最終的なバイナリは、すべてのジェネリックの可能性をネイティブにコンパイルする必要があるため、非常に大きくなる可能性があります (多くのケースは共有できますが、値型は共有できません)。

サイズを小さくするためにできること:

  • まず、マネージコードのサイズを小さくしてみてください。これを行う簡単な方法は、すべてのアセンブリでリンカーを有効にすることです。つまり、プロジェクト オプションですべてのアセンブリをリンクします。

多くの人は、自分のコードをリンクする価値はないと考えています。なぜなら、実行時にコードが必要になることを知っているからです (したがって、リンカーはコードを削除できません)。

それは半分本当です。リンカーはアプリケーション コードのほとんどを削除できない可能性があります、サード パーティのアセンブリを使用している場合、100% 使用されているとは限りません。リンカーは、その余分なコードを削除できます (また、不要なコードをサポートするために保持されているすべてのコードを SDK から削除します)。共有コードが多ければ多いほど、リンカが役立ちます。

IL コードが少ないということは、AOT 時間が速くなることを意味し、ビルドが速くなり最終的なバイネアが小さくなります (実行可能サイズを含む)。

注: リンカを制御して一部のアセンブリ、一部の型、またはメソッドを処理/削除からスキップする方法については、多くのドキュメントとブログ エントリがあります。

  • 次に、ネイティブサイズを小さくしてみてください。ネイティブ ライブラリを構築している場合は、最終的なバイナリに (動的ではなく)静的にリンクされるため、もう一度確認してください (iOS アプリケーションの別のルール)。それらのいくつかは、最終的なバイナリで(機能的に)価値がないかもしれません(そして、より軽い代替手段があるかもしれません)。
于 2013-03-09T16:06:31.833 に答える