C#
iOS
VisualStudio
Xamarin

VisualStudio(Xamarin) iOSネイティブSDKをBindingで使用する時にDebugモード実行中に例外が起きる

VisualStudioを使ってiOSアプリを開発するときgoodAdの広告を表示させるためにネイティブSDKをBindingを使用して表示させる必要が出てきた。

他の方でもよく書かれているが
1.Binding用のプロジェクトを作成
2.Objective Sharpieを使用してhファイルからラッパークラス(実際はインターフェース)
を作成
3.iOSプロジェクトでBinding用プロジェクトを参照
4.iOSプロジェクトでBindingしたクラスを使用する

ざっくりとして、このような流れになった。

しかしここからが問題が起きた
goodAd広告特有なのかもしれないが下記の例外が起きる。
スクリーンショット 2017-07-20 14.10.17.png


System.ExecutionEngineException

Attempting to JIT compile method 'testBinding.goodAdSDK:.ctor (testBinding.GoodAdDelegate)' while running in aot-only mode. See https://developer.xamarin.com/guides/ios/advanced_topics/limitations/ for more information.


JITやらAOTやらどうやらコンパイルした時におかしいらしい。
デバッグモードでコンパイルした影響が出てるのかと思いリリースモードで実機に転送したら
この例外が出なかった。
Binding用のプロジェクトを右クリックしてオプションを開いて、デバッグとリリースでの違いを比べてみた。

ツリービューで[ビルド]-[コンパイラ]をクリック
構成をDebugとReleaseで変えてみて比較したらもっとも怪しかったのが<<最適化を有効にする>>のチェックボックスにチェックが"ある"か"ない"かの違いだった。

結論としては、Binding用のプロジェクトでデバッグモード時のコインパイラの設定で最適化を有効にすることでgoodAd広告は例外を出さずに表示されることができる。
このやり方は、たまたまなので理由を聞かれてもコンパイラじゃないですか?ってなるのでコメントもらっても返事できないかもしれないですがお困りの方いれば参考にしてみてください。


Binding用のプロジェクトでDebug時のコンパイラを下記のように設定

スクリーンショット 2017-07-20 13.31.06.png

例外を回避したのを確認する
スクリーンショット 2017-07-20 14.11.26.png