menu
書いてる野郎
orebike@gmail.com
普通にビルドしたライブラリをライブラリを使う側のプロジェクトに組み込んでビルドしても動かない。なぜか?
AppleがiPhoneシミュレータと言っているようにシミュレータは実行に対してiPhoneの挙動を模倣してるに過ぎない。 なのでバイナリレベルでiPhoneとそのシミュレータのアプリには互換性が無い。だから動かない。
つまりiPhoneシミュレータというのはiPhone用のソースをiPhone的な見た目で動かすMac用アプリ実行装置になる。 だから実機並みにサクサク動く。iOS自体がMac OSのサブセット的なものなので非常に再現性が高くなっている。
シミュレータで実行してる時はいつもXcodeが気を効かせてMac用にコンパイルしてくれているということだ。
ライブラリで問題になるのはライブラリがコンパイルされるタイミングとそれを使う方のコンパルされるタイミングがずれているから。 ライブラリのほうが別個に先にコンパイルされ、使う側のアプリはRubボタンを押した時にコンパイルされる。
ここでコンパイルされるバイナリにズレがあるとライブラリを正常に組み込むことができなくなる。
話は外れるがAndroidの開発用シミュレータは中身までAndroidなので動きが非常にモッサリしている。 これは構成が全く違うコンピュータ上で動かすため深いレベルで実行の変換を行う必要があるからだ。
反面作ったアプリはバイナリレベルで実機と互換性がありシミュレータで動いているものをそのまま実機に持って行っても動作する。 さらに開発環境もMac,Windows,Linuxと問わない。