VisualStudioを使ってiOSアプリを開発するときgoodAdの広告を表示させるためにネイティブSDKをBindingを使用して表示させる必要が出てきた。
他の方でもよく書かれているが
1.Binding用のプロジェクトを作成
2.Objective Sharpieを使用してhファイルからラッパークラス(実際はインターフェース)
を作成
3.iOSプロジェクトでBinding用プロジェクトを参照
4.iOSプロジェクトでBindingしたクラスを使用する
ざっくりとして、このような流れになった。
しかしここからが問題が起きた
goodAd広告特有なのかもしれないが下記の例外が起きる。
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時のコンパイラを下記のように設定