AOTコンパイルってなんぞ?
C#などの.Net言語はCILという中間言語にコンパイルして、それをVM上で動かすようにできています。
しかし、実際にVM上で走らせなければどんなコードが動くか分からないってのはセキュリティ上よくないので、iOSではそれを許していません。
UnityはVMからJITコンパイルする部分を排除し、事前にネイティブコードを吐くようにすることでこの問題を回避しています。
事前にコンパイルしていることから、この部分のコンパイルをAOT(Ahead of Time)コンパイルと言います。
しかし、この事前コンパイル、そのそも.Net言語が想定していたものではないため(たぶん)、いろいろと制限があるそうです。
わかり易い例として、C#にはReflection.EmitというCILコードを直接生成する関数があるのですが、これはAOTでは使えません。
そのような制限があることから、UniRxを使用する際にbackendとしてMonoを選択するとエラーが発生するようです。
UniRxは正式にAOTのサポートを切っているそうなので、おとなしくIL2CPPを使うしかなさそうです。
デバッグ向けにコンパイルする時はbackendとしてMonoを選択したほうが圧倒的にビルドが早く多用していたので、ちょっとどうするか悩んでます。
参照:iPhoneでC#アプリが審査に通るワケ − @IT
参照:neue cc - UniRx 5.0 - 完全書き直しによるパフォーマンス向上とヒューマンリーダブルなスタックトレース生成