Version: 2018.4
言語: 日本語
iOS 2D テクスチャ オーバーライド
Unity Remote

64 ビット iOS へのアップグレード

64 ビット iOS のサポートは、IL2CPP と呼ばれるスクリプティングバックエンドによって実装されます。これは、C# コードによって実行されます。

IL2CPP ランタイムは標準で使用するプラットフォームの C++ コンパイラーを活用して、アセンブリを C++ に変換するために事前コンパイルと仮想マシンを組み合わせ、ネイティブバイナリを生成します。これにより、パフォーマンス、プラットフォーム間の互換性、メンテナンス性が向上します。

IL2CPP は、iOS の ARM 64 ビットへのデプロイをサポートする唯一のスクリプティングバックエンドであるため、新しいアプリをリリースするためには Apple App Store へのデプロイが必須です。

IL2CPP に関する詳しい情報は、ブログの The future of scripting in UnityApple iOS 64-bit support in Unity を参照してください。

iOS で IL2CPP を使用する方法

Player ウィンドウの Scripting Backend ドロップダウンから IL2CPP を選択します。

Scripting Backend の選択
Scripting Backend の選択

デフォルトでは、Universal アーキテクチャ (ARM64ARMv7 の両方を含む) 用にビルドされます。必要に応じて Player ウィンドウで特定のアーキテクチャに切り替えることができます。64 ビットでアプリケーションを起動して実行するには、以下のような多くのことを行う必要があります。

  • テスト用に 64 ビットが可能なデバイスが必要です。A7 以降のチップを使用する iOS デバイス (現在 iPhone 5S、iPad Air、iPad Mini Retina、iPhone 6、iPhone 6 Plus、iPad Mini 3 とそれ以降の新しいデバイスすべて) が該当します。
  • 64 ビットのサポートを適用してコンパイルする (または、ソースコードとして提供する) には、ネイティブプラグインすべてが必要です。サードパーティのプラグインを使っている場合は、プラグインのベンダーに連絡して、64 ビットが可能で IL2CPP と互換性があるプラグインのバージョンを取得する必要があります。現時点で、最新の prime31 のプラグインは使用できます。
  • プラグインのベンダーであるか、または、ネイティブプラグインを自作している場合は、以下のことに気を付ける必要があります。
    • Mono Runtime API では、IL2CPP は API と互換性がありません (このことは、公開されていません)。つまり、プラグインを使うと、mono_* 関数はリンクしません。この問題を解決する最善策は、マネージデリゲート (または、マネージコールバック) のアプローチに切り替え、マネージコールバックをプラグインのネイティブ側に渡し、ネイティブのデータやイベントを取得したらネイティブ側からコールバックを呼び出すことです。
    • すべての事前コンパイルされている静的ライブラリ (.a ファイル) 由来のプラグインは、現在 ARM64 スライスを含んでいます。
    • ネイティブのコード/型の変換を行うときは、ポインターと long は 64 ビット幅で、int は 32 ビット幅であることに注意してください。
  • C++ コードの生成量を最小限に抑えるために、IL2CPP は常に (Stripping levelDisabled (無効) に設定されている場合でも) ある種のマネージコードストリップを実行しています。 時には自身でそれを補う必要があるかもしれません。 iOS プレイヤーのサイズ最適化マニュアルで link.xml ガイドを参照してください。

トラブルシューティング

  • Q: 私のコードは、Mono で実行しているときに比べ IL2CPP での実行時にスピードが遅くなります。 どうしてですか。 A: Xcode Release に設定してコードのパフォーマンスをテストしていることを確認してください。それでも問題が解決しない場合は、バグレポートを送ってください。
  • Q: Unity で生成された Xcode プロジェクトは以下のようなエラーでコンパイルに失敗します。Method not found: 'Default constructor not found...ctor() of System.ComponentModel.Int64Converter'
    A: デシリアライザーやシリアライザーは、.NET Reflection API のみを通してのみ一部の型を参照することが多く、そのような場合は、これらのメソッドやクラスさえもプロジェクトから削除される可能性があります。マネージコードストリッパーに、特定のクラス/メソッドは link.xml を通して使用されている、または、スクリプトで明示的にダミーコードを参照するダミーコードの導入を通して使用されていること、を示唆するとよいでしょう。 Q: Unity が生成した Xcode プロジェクトは、他のエラーでコンパイルに失敗します。 A: すべてのプラグインが ARM64 と IL2CPP をサポートしていることを確認してください。サポートされている場合は、プロジェクト (またはそのスクリプト部分のみ) をバグレポートに添付してレポートを提出してください。

iOS 2D テクスチャ オーバーライド
Unity Remote