Unity5β で IL2CPP をコードから有効化する

先日 Unity 5.0.0b19 がリリースされ、iOS で IL2CPP をバックエンドにしたビルドが行えるようになりました。もちろんすぐに試してみたいところではありますが、出たばかりなので当然動かない可能性も高いし、従来のビルドと比較できるようにもしてみたい。IL2CPP 有効 / 無効の両方でビルドを自動化したい…となるわけです。

例によって一筋縄ではいかなかったので、やり方について簡単にまとめました。

どうすれば IL2CPP を使ってくれるのか

色々と探してみて BuildOptions.Il2CPP というのがあるのを見つけられはするのですが、これを OR してビルドしても、確かに IL2CPP はロードされ、IL2CPP 使用を表すコンパイル時定数の追加もなされてはいるのですが、肝心の出力は全く変化しません。あともうひと押しが必要らしいのです。

結論から言ってしまうと、

1
2
buildOpts |= BuildOptions.Il2CPP;
PlayerSettings.SetPropertyInt("ScriptingBackend", 1, BuildTargetGroup.iOS);

とすることで Player Settings の Scripting Backend で IL2CPP を選択するのと同等の効果が得られるみたいです。

インスペクタには設定項目が出てきていても、PlayerSettings クラスには相当するプロパティが無いので、このような悲惨な手段で有効化するしかないのですが、さすがに正式版までには改善されていると信じたい…信じたい。

逆に無効化する方法については自明なので割愛。

IL2CPP を有効化すると C++ コードが当然出力されるわけですが、さすが C++ なだけあって (?) これをビルドするとすさまじいログ出力がなされます。

1
xcodebuild ... OTHER_CFLAGS='-w'

と警告を抑止して、常識的なログ出力量とすることを強くお勧めします。

ちなみに、IL2CPP は現状 iOS でしかサポートされていないとのことなのですが、まさか…と思い、先ほどの C# コードで BuildTargetGroup.Android などととして Android でも同じことをやってみましたが、Xcode 出力がそのまま apk ファイルに含まれるという有様だったので、どうやらまだ本当にサポートされてないみたいです。

さいごに

年末年始はめんどくさくて特に (ここには) 何も書かなかったのですが、2015 年の初投稿でした。本年もよろしくお願いします。