Xamarin.Essentialsは、ネイティブのモバイル機能をクロスプラットフォームAPIセットに抽象化することで、簡単に使えるようにすることを狙っている。数ヶ月のプレビューを経て、コミュニティからコントリビュートされた機能強化とともに公式リリースされた。
Xamarinはこれまでもホストプラットフォームが提供するネイティブ機能を利用する手段を提供してきた。これはC#でネイティブAPIを公開するバインディングという形だった。例えば、ARKit、加速度センサー、さらにはObjective-CランタイムといったiOS機能は、Xamarin.iOSフレームワーク経由で利用できる。これにより、開発者は実際のiOS、Android、macOS APIによるネイティブ機能を使うことが可能だ。ただし、これはC#を離れずにできるというだけだった。Xamarin.Essentialsは別のアプローチを追求し、サポートする全プラットフォームで同一の単一APIに基づいている。これには、ビジネスロジックの大部分を汎用にしておけるというメリットがある。MicrosoftのXamarinエンジニアであるJames Montemagno氏によると、Xamarin.Essentialsは非常に最適化されており、Xamarinリンカは実際に使っている機能のみリンクし、それ以外を取り除くという。
現在、Xamarin.Essentialsには、コネクティビティからジオロケーション、デバイス情報からセキュアストレージ、その他30以上のネイティブ機能が含まれている。
Xamarin.Essentialsに含まれるAPIの多くは、同じデザインになるように作られている。例えば、磁力計、ジャイロスコープ、コンパスなどは全て、対応するセンサーの変更監視を開始・停止するのに、start
およびstop
メソッドを使う必要があり、変更はReadingChanged
イベントで返される。他のEssentials APIはさらに決まったスタイルにしたがっている。例えば、懐中電灯をオン/オフしたり、バイト列をセキュアに格納したり、メインスレッドでコードを実行したりするには、対応するメソッドを呼び出すだけだ。プラットフォーム間の主な違いは、それぞれのプラットフォームが採用しているパーミッションシステムと、アプリが満たさなくてはならない各種要件にある。ただし、これらについてはAPIごとに細かく文書化されている。
Xamarin.Essentialsには、Android 4.4以上、iOS 10.0以上、UWP 10.0.16299.0以上が必要だ。NuGetを使ってXamarin.Essentialsをプロジェクトに追加し、using Xamarin.Essentials;
をソースファイルに加えて参照すればよい。すでにXamarinアプリがあってXamarin.Essentialsに切り替えたければ、Montemagno氏が書いた移行ガイドは必見だ。そうでなければ、公式のXamarin GeoContactsアプリがよい出発点になる。