はじめに
Windows(UWP)やmacOS,Linux,AndroidやiOS,WebAssembly等さまざまなプラットフォームにC#での実装のみで対応できるという触れ込みのUno Platformは,確かに実現するとスゴそうだが実際にはいまだに開発途上で,まだまだ実用的とは言えない側面がある.
Pixel-Perfect Multi-Platform Applications with C# and WinUI
The first and only UI Platform for single-codebase applications for Windows, WebAssembly, iOS, macOS, Android and Linux―Uno Platform公式サイトトップからの引用(https://platform.uno/)
今回の成果物制作で私はこのフレームワークを使用したのだが,様々な課題に直面した.開発途上なだけありweb上にもそれほど記事は多くなく,かつ日本語も限られているので,メモ書き程度の記事を書こうと思う.
www.rect29.com
基本的にUno Platformでの実装を行うにあたっては,@Okazuki氏の記事を参考にすればよい.氏はQiitaに必要最小限の記事を寄稿している.
qiita.com
qiita.com
ここではそれではフォローできないような,コーナーケースに対応するためのノウハウの共有を行う.
対応バージョン
ビルドできないとき
.Netライブラリのバージョンを確認する
せっかく実装したコードが,シンタックスエラーが原因でないにも関わらずビルドできないことがある.
そんなときには,まずは.Netライブラリのバージョンをよく確認する.
stackoverflow.com
開発していると無意識のうちにライブラリのバージョンを上げてしまうことがある.Uno Platformを使う場合,これは慎重に確認しなければならない.
特にLogging.Consoleのバージョンについてはv1.1.1というとても古いバージョンを使っているので注意が必要である.
Preference
Uno PlatformのPreference
これはエラーではなく警告が表示される問題である.
Androidでは時折データの保存にPreferenceを使うことがある.これは簡単に説明するとアプリケーションごとにデータを保存するマップなのだが,Uno Platformでこれを使用する場合に問題がある.
developer.android.com
なんと最新バージョンのAPI Levelに対応するPreferenceManagerのバージョンがdeprecatedなのである.これは現在開発途上にありまだ対応できていないということ.具体的にはAndroid.Preferences.PreferenceManagerではなく,Androidx.Preferences.PreferenceManagerへ対応する必要がある.
github.com
実装上は確かに問題なく動作する.しかし実際にdepricatedをこのまま使っていくのは不安なところがある.
Contextの取得方法
これはエラーでも警告でもなく,単なるtips.
Androidを扱う上では,Preferenceに限らずApplicationのContextを取得することがある.そんなときには,Uno.UI.ContextHelper.Currentを使う.
stackoverflow.com
まとめ
Uno Platformはまだ開発途上のフレームワークなので,対応しているもの/いないもの,安定していること/不安定なことがある.GetFilesAsync()ですら最近のバージョンであるv3.2.0でリリースされたほどだ.
github.com
アナウンスされてから時間が経つライブラリでありながらのいまの実装であり,Preferenceの件といい少し不安もあるが,これから巻き返す日が来るのか…?
マルチプラットフォームはライブラリの互換性にも苦労する.ここもケアできるのかが注目される.
いまはUno Platformを扱う開発者にはその制限のなかで成果を出すことが求められている厳しい時代となっている.
コーナーケースでつまづくこと多し.