Uno Platformの仕組み
Uno Platformの仕組みは、「How It Works - Uno Platform」で次の図のように説明されています。
まず一番左のUWPは、通常のUWPアプリとまったく同じです。つまり、UWP APIと.NET Core(の一部)を使って動きます。
残り3つは、.NET Framework互換環境であるMonoの上に構築されています。そのうちの右2つ、iOSとAndroidではMonoの上でXamarinも使っています。また、左から2番目のWebアプリは、図には描いてありませんがWebAssemblyという仕組みを使って、Webブラウザー上でMonoを実行します。
UWPアプリのコード(図の「APPLICATION CODE」と書いてある青色の部分)からMonoやXamarinのAPIを呼び出す仕組みがUno Platformだということになります。大雑把な言い方をするならば、Uno PlatformとはUWP互換のAPIです。
具体的には、同じ名前のAPIであっても、実装されているバイナリが異なります。例えば、画面の親クラスであるPageクラス(Windows.UI.Xaml.Controls名前空間)の定義を見てみましょう。UWPアプリのプロジェクトでは、Windows.Foundation.UniversalApiContractに定義されている通常のUWP APIの実装が使われています(次の画像)。
ところが、AndroidアプリのプロジェクトではAndroid用の実装が、iOSアプリのプロジェクトではiOS用の実装が使われるようになっているのです(次の画像)。残念ながらWebAssemblyでの実装は、私(=筆者)にはまだよく理解できていません。
大雑把にこんな仕組みになっているので、UWPアプリのコードがそのまま通るのです。Uno Platformとは、いわば「UWP→iOS/Android/WebAssemblyブリッジ」のようなものです。
Uno Platformの仕組みをもっと学ぶには?
実際には、上に書いたような単純な話では終わりません。より詳しく学ぶには、本稿執筆時点ではJérôme Laban氏(Uno PlatformのCTO)とDavid Oliver氏(Uno Platformコントリビューター)の記事が役に立ちます。
- Under the Hood: an Introduction to Uno Platform(2018/8/9, Oliver)
- Pushing the right buttons : How Uno implements views — Under the hood(2018/8/30, Oliver)
- Talkin’ ‘bout my generation: How the Uno Platform generates code, part 1 — Under The hood(2018/9/7, Oliver)
- Talkin’ ‘bout my generation: How the Uno Platform generates code, part 2 — Under the hood(2018/10/14, Oliver)
- Introduction to WebAssembly for the Uno Platform (Part 1)(2018/10/3, Laban)
- Introducing Uno WebAssembly Projects and Debugging(2019/1/17, Laban)