zirconsoft’s blog

Microsoft関係について取り上げます。

Xamarinの仕組みを勉強したらiOSとAndroidの仕様を少し理解できた

少しだけXamarinの勉強してみました。
今日のブログは備忘録的な面が強いかもしれません。

『xamarin 仕組み』で検索

XamarinがどのようにiOSAndroidというクロスプラットフォームに対応しているのか気になって、
Bingで『xamarin 仕組み』で検索してみました。
すると次の良記事を発見!!
Xamarinの仕組み ( 超簡単バージョン ) | Developers.IO
Xamarin 2.0 | ++C++; // 未確認飛行 C ブログ
Xamarin.Androidの仕組みと、ソフトウェア構成 - Build Insider
Xamarin.iOSの仕組みとアプリケーションの構成 - Build Insider

クロスプラットフォームの仕組み、まとめ

Androidの場合

Android上でmonoVMと呼ばれる仮想マシーンを実行する。
JIT(Just-In-Time)での動作する。
C#はもともとJITで動作することを前提に作られているので、本来の力を発揮できる。
JITとは、中間コードを解読しながら動作する仕組み。
ちなみにC#スクリプト言語と違い、あらかじめプログラミング言語を中間コードにコンパイルすることで、高速化を実現している。
AndroidではJavaで作られたものと同じぐらい高速で、C#本来の力が発揮できるJITで動作できるが、
monoVMはアプリケーションと一緒にインストールする必要があるため、アプリケーションのファイルが大きくなりがちである。

iOSの場合

iOSの仕様上、VM及びJITでの動作は許可されていないため、事前に完全にコンパイルしないといけない。
そのため、iOS向けにはJITではなく、AOT(Ahead-Of-Time)でのコンパイルをmonoコンパイラによって行う。
AOTとは、プログラムを事前に完全に実行コードにコンパイルし、実行時は実行コードを直で実行する仕組み。
C#JITでの動作を想定して作られたため、AOTだとC#の機能を完全に利用することはできない。
たとえばDynamicsやジェネリックな virtual メソッドなど。

デメリットがありながらもXamarinを使う理由

かなりのコードを共通して、書き直すことなく再利用することができる。
HTML5ハイブリットアプリより高速だから。

エンタープライズ向けのアプリならCordovaの方がよいかも

Apache Cordovaは、Xamarinのようにクロスプラットフォームを実現する技術です。
CordovaはHtml5JavascriptCSSといったWebのフロントの技術で、スマホアプリを開発します。
オープンソースのCordovaにもMicrosoftがかなり出資をしているらしく、Visual StudioVisual Studio Codeでの開発も可能です。
エンタープライズ向けのアプリ開発にかなりの実績があります。
Onsen UIでモバイルアプリっぽくデザインすることで、スマホアプリらしい雰囲気を出すこともできます。

もっとクロスプラットフォームアプリ開発を勉強したい

今回Xamarinの勉強してみて、Androidの仕組み、iOSの仕組みを改めて理解をすることができました。
実際に開発してみたときの感覚や、さらに詳しいところで、クロスプラットフォーム開発について勉強したくなりました。
XamarinとCordova、近いうちにどちらも開発を試してみたいと思います。