となりのJohnの気まぐれ

気の向くままに

【Uno Platform】Uno Platformを使うときのTips(2021年1月現在)

f:id:newbie29979:20201231175514p:plain

はじめに

Windows(UWP)やmacOSLinuxAndroidiOS,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というとても古いバージョンを使っているので注意が必要である.

F12で定義元のリンクを確認する

上記の注意点をクリアしていたとしても,デザイナでUI部品のイベントリスナを実装する際に問題に直面することがある.イベントを登録しているはずがリンクできてないことがある.
qiita.com
こんな時には該当のxamlからF12で定義元へのリンクができているかを確認する.大抵はnamespaceのミスが原因であるがリビルドしなければ解決しないこともある.F12でリンクを確認することで解決することもある.タイミングが謎である.

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を扱う開発者にはその制限のなかで成果を出すことが求められている厳しい時代となっている.
コーナーケースでつまづくこと多し.