XamarinからNetMAUIへの移行

,

GeoDiveExaの開発環境をXamarinサポートが2024年5月で終了したので、NetMAUIへ移行する事にします。

1)Xamarinについて

GeoDiveExaの開発を開始した2018年当時、iOS/Androidなど複数OSに対応するクロスプラットフォーム開発環境としてXamarin(=XAML+C#)を性能を考慮して選択しました。

各フレームワークの比較(2018年当時)
フレームワーク強み弱み
XamarinC#でネイティブアプリ開発、.NETエコシステム学習コスト、パフォーマンスがやや低いプラットフォームによっては
React NativeJavaScriptで開発、ホットリロード、大規模コミュニティJavaScriptの複雑さ、ネイティブ機能へのアクセスに制限がある場合も
Flutter高性能なUI、ホットリロード、Dart言語のシンプルさコミュニティがまだ小さい、新しいフレームワークであること
IonicWeb技術で開発、クロスプラットフォームの広範なサポートネイティブアプリほどの性能が出ない、Webビューベースであること
Geminiに聞いた結果

2024年現在で同様に比較すると以下の様になりました。現在ならば、Flutterを開発環境として選ぶのが良さそうです。

フレームワーク主な特徴強み弱み適しているプロジェクト
FlutterDart言語、高性能なUI、ホットリロード、Material Design/Cupertino Widgets高性能、美しいUI、クロスプラットフォームの統一性、Googleの強力なサポートコミュニティがまだ比較的若い、Dart言語の学習コスト大規模アプリ、高性能なUIが求められるアプリ
React NativeJavaScript/TypeScript、Reactベース、大規模コミュニティ、柔軟性Web開発者の習得が容易、大規模なエコシステムパフォーマンスがFlutterに劣る場合がある、ネイティブ機能へのアクセスがやや複雑Web開発者が多いチーム、既存のWeb資産を活用したい場合
XamarinC#、.NETエコシステム、Visual Studio統合C#開発者にとって学習コストが低い、.NETの豊富なライブラリパフォーマンスがFlutterやネイティブに劣る場合がある.NET開発者が多いチーム、既存の.NET資産を活用したい場合
IonicWeb技術(Angular, React, Vue.js)、クロスプラットフォームの広範なサポートWeb開発者にとって学習コストが低い、Web技術の知識を活かせるネイティブアプリほどの性能が出ない、WebビューベースであることWebアプリをベースにモバイルアプリを開発したい場合
UnityC#、ゲームエンジン、高性能なグラフィックス、AR/VRゲーム開発、インタラクティブなアプリ開発に最適、豊富なアセットストア学習コストが高い、モバイルアプリ開発にはオーバースペックな場合もゲーム、AR/VRアプリ、インタラクティブなUIが必要なアプリ
geminiに聞きました

ここでXamarinは2024年5月でバージョンアップ終了したので、後継のNetMAUIが比較対象になります。

Xamarinと.NET MAUIの主な違いと比較
特徴Xamarin.NET MAUI
ベースとなるテクノロジーXamarin.Forms.NET MAUI
サポート期間長期サポート版は提供されるが、新機能の追加は終了積極的に開発・サポートされる
UIXamarin.FormsのUIコンポーネントをベースに進化よりモダンでパフォーマンスの高いUIコンポーネントを提供
プラットフォームiOS, Android, UWPiOS, Android, macOS, Windows, Tizen
言語C#C#
ツールVisual StudioVisual Studio
geminiに聞きました

この様な状況なのでXamarinからの移行対象候補はNetMAUIかFullterになります。

Flutterと.NET MAUIの比較:2024年5月以降のクロスプラットフォーム開発環境

2024年8月以降、クロスプラットフォーム開発の選択肢として、Flutterと.NET MAUIが特に注目されています。両者にはそれぞれ特徴があり、どちらを選ぶかはプロジェクトの要件や開発チームのスキルによって異なります。

Flutterと.NET MAUIの比較表

特徴Flutter.NET MAUI
開発言語DartC#
UIレンダリング自前のレンダリングエンジン (Skia)ネイティブUI要素を利用 (プラットフォーム依存)
コミュニティ活発、特にGoogleのサポートが強力.NETコミュニティの一部、Xamarinからの移行者が多い
エコシステム豊富なパッケージ、プラグイン.NETエコシステムを活用、NuGetパッケージ
ホットリロード高速な開発が可能比較的遅い
プラットフォームサポートiOS, Android, Web, Desktop, EmbeddediOS, Android, macOS, Windows, Tizen
強み高性能なUI、美しいデザイン、クロスプラットフォームの統一性.NET開発者にとって学習コストが低い、.NETエコシステムの活用
弱みDart言語の学習コスト、コミュニティがまだ比較的若いUIのカスタマイズがやや複雑、プラットフォーム依存性が残る場合がある
geminiに聞きました

2)NetMAUIについて

いまから開発するならFlutterを使用したいと思いますが、すでにXamarinで開発していましたので同じC#を使えるXamarin後継のNetMAUIGeoDiveExaを移行する事にします。
昔大規模なCADをpascalからCに変換して各種Unixマシーンに移植した事に比べればOSは同じで言語も同じなので「簡単に移行」できると思って居ました(=実際は地雷の塊で挫けそうな状況です)。

蛇足ですがAmazonで本を検索するとNetMAUI本の少なささに愕然とします。

唯一見つけた日本語のNetMAUI本。

Amazonの紹介文章

.NET 6から使用可能になった .NET MAUI(Multi-platform App UI)は、従来のXamarin.Formsの後継となるマルチプラットフォームアプリを開発するためのフレームワークで、Android/iOS/Windows/macOS対応のアプリをC#を使って開発できます。 従来のXamarin.Formsでは、 .NET Standardという機能限定版のクラスライブラリしか使用できませんでしが、 .NET MAUIでは、 .NET 6で使用可能な完全なクラスライブラリが使用できるようになりました。 さらに、これまでは開発できなかったmacOSのアプリも開発できるようになりました。
 本書の前半では、 .NET MAUIを利用した、 iOS/Androidなどのマルチプラットフォーム対応の共通アプリケーションの作り方を解説します。 6章では、従来のXamarin.FormsではサポートされていなかったMVU(Model-View-Update)モデルという新たな開発パターンについても言及します。 後半では、プラットフォーム特有の操作(データベースやファイル操作など)を利用したアプリの開発を解説します。 11章では、加速センサー、GPS、カメラ、QRコードの利用方法を説明します。 MAUI自体はユーザーインターフェイスの機能しか持たないのですが、モバイルアプリを作成するときにWeb APIの利用や内部でのデータベース(SQLite)の利用が必須となるため、周辺技術も含めて解説しています。

対してFlutterならよりどりみどりですね。一冊買っておこうかな。

3)XamarinからNetMAUIへの移行手順

だいたい以下の様な作業をする必要があります。
ネットには参考になるサイトが沢山あるので参考になります。

3-1)NetMAUI形式へフォルダー・ファイルー移行

NetMAUIでアプリ名称と同じ名前でプロジェクト作成するとNetMAUIのフォルダー構造や必要なファイルが作成されますので、対応するフォルダーにXamarinのファイルをコピーする。

3-2)namespace変更

Xamarinソースのnamespaceを以下の対応表を元に全て変換する

Xamarin.Forms 名前空間.NET MAUI 名前空間
Xamarin.FormsMicrosoft.Maui と Microsoft.Maui.Controls
Xamarin.Forms.DualScreenMicrosoft.Maui.Controls.Foldable
Xamarin.Forms.MapsMicrosoft.Maui.Controls.Maps と Microsoft.Maui.Maps
Xamarin.Forms.PlatformConfigurationMicrosoft.Maui.Controls.PlatformConfiguration
Xamarin.Forms.PlatformConfiguration.AndroidSpecificMicrosoft.Maui.Controls.PlatformConfiguration.AndroidSpecific
Xamarin.Forms.PlatformConfiguration.AndroidSpecific.AppCompatMicrosoft.Maui.Controls.PlatformConfiguration.AndroidSpecific.AppCompat
Xamarin.Forms.PlatformConfiguration.TizenSpecificMicrosoft.Maui.Controls.PlatformConfiguration.TizenSpecific
Xamarin.Forms.PlatformConfiguration.WindowsSpecificMicrosoft.Maui.Controls.PlatformConfiguration.WindowsSpecific
Xamarin.Forms.PlatformConfiguration.iOSSpecificMicrosoft.Maui.Controls.PlatformConfiguration.iOSSpecific
Xamarin.Forms.ShapesMicrosoft.Maui.Controls.Shapes
Xamarin.Forms.StyleSheetsMicrosoft.Maui.Controls.StyleSheets
Xamarin.Forms.XamlMicrosoft.Maui.Controls.Xaml

3-3)パッケージの削除と追加

xamarin関連のパッケージは全て削除する。その後は必要なパッケージを追加していく。

対応するパッケージがNetMAUI環境で使えない場合は、個別対応する。

3-4)コンパイルとエラー対応

後はひたすらコンパイルしてみてエラーを出して、手動修正していく事になる。

GeoDiveExaの場合、Mapに「カスタムピン」を使用して居たり、テーブルに「カスタムセル」を使っているので、NetMAUI用に個別対応していく必要がある様だ。

4)2024年8中時点の移植状況

4-1)地図画面

左がXamarinで右がNetMAUI:地図やボタンなどほとんど同じ様な表示まで出来たが、「カスタムピン」が表示できて居ない。

4-2)設定画面

左がXamarinで右がNetMAUI:セグメントボタンが「カスタムセル」です。形や色は異なるが、大体同じ様な機能にはなった。今後は動作や色・サイズ調整を行なっていく予定。


コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

PAGE TOP