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

1)Xamarinについて
GeoDiveExaの開発を開始した2018年当時、iOS/Androidなど複数OSに対応するクロスプラットフォーム開発環境としてXamarin(=XAML+C#)を性能を考慮して選択しました。
各フレームワークの比較(2018年当時)
フレームワーク | 強み | 弱み |
---|---|---|
Xamarin | C#でネイティブアプリ開発、.NETエコシステム | 学習コスト、パフォーマンスがやや低いプラットフォームによっては |
React Native | JavaScriptで開発、ホットリロード、大規模コミュニティ | JavaScriptの複雑さ、ネイティブ機能へのアクセスに制限がある場合も |
Flutter | 高性能なUI、ホットリロード、Dart言語のシンプルさ | コミュニティがまだ小さい、新しいフレームワークであること |
Ionic | Web技術で開発、クロスプラットフォームの広範なサポート | ネイティブアプリほどの性能が出ない、Webビューベースであること |
2024年現在で同様に比較すると以下の様になりました。現在ならば、Flutterを開発環境として選ぶのが良さそうです。
フレームワーク | 主な特徴 | 強み | 弱み | 適しているプロジェクト |
---|---|---|---|---|
Flutter | Dart言語、高性能なUI、ホットリロード、Material Design/Cupertino Widgets | 高性能、美しいUI、クロスプラットフォームの統一性、Googleの強力なサポート | コミュニティがまだ比較的若い、Dart言語の学習コスト | 大規模アプリ、高性能なUIが求められるアプリ |
React Native | JavaScript/TypeScript、Reactベース、大規模コミュニティ、柔軟性 | Web開発者の習得が容易、大規模なエコシステム | パフォーマンスがFlutterに劣る場合がある、ネイティブ機能へのアクセスがやや複雑 | Web開発者が多いチーム、既存のWeb資産を活用したい場合 |
Xamarin | C#、.NETエコシステム、Visual Studio統合 | C#開発者にとって学習コストが低い、.NETの豊富なライブラリ | パフォーマンスがFlutterやネイティブに劣る場合がある | .NET開発者が多いチーム、既存の.NET資産を活用したい場合 |
Ionic | Web技術(Angular, React, Vue.js)、クロスプラットフォームの広範なサポート | Web開発者にとって学習コストが低い、Web技術の知識を活かせる | ネイティブアプリほどの性能が出ない、Webビューベースであること | Webアプリをベースにモバイルアプリを開発したい場合 |
Unity | C#、ゲームエンジン、高性能なグラフィックス、AR/VR | ゲーム開発、インタラクティブなアプリ開発に最適、豊富なアセットストア | 学習コストが高い、モバイルアプリ開発にはオーバースペックな場合も | ゲーム、AR/VRアプリ、インタラクティブなUIが必要なアプリ |
ここでXamarinは2024年5月でバージョンアップ終了したので、後継のNetMAUIが比較対象になります。
Xamarinと.NET MAUIの主な違いと比較
特徴 | Xamarin | .NET MAUI |
---|---|---|
ベースとなるテクノロジー | Xamarin.Forms | .NET MAUI |
サポート期間 | 長期サポート版は提供されるが、新機能の追加は終了 | 積極的に開発・サポートされる |
UI | Xamarin.FormsのUIコンポーネントをベースに進化 | よりモダンでパフォーマンスの高いUIコンポーネントを提供 |
プラットフォーム | iOS, Android, UWP | iOS, Android, macOS, Windows, Tizen |
言語 | C# | C# |
ツール | Visual Studio | Visual Studio |
この様な状況なのでXamarinからの移行対象候補はNetMAUIかFullterになります。
Flutterと.NET MAUIの比較:2024年5月以降のクロスプラットフォーム開発環境
2024年8月以降、クロスプラットフォーム開発の選択肢として、Flutterと.NET MAUIが特に注目されています。両者にはそれぞれ特徴があり、どちらを選ぶかはプロジェクトの要件や開発チームのスキルによって異なります。
Flutterと.NET MAUIの比較表
特徴 | Flutter | .NET MAUI |
---|---|---|
開発言語 | Dart | C# |
UIレンダリング | 自前のレンダリングエンジン (Skia) | ネイティブUI要素を利用 (プラットフォーム依存) |
コミュニティ | 活発、特にGoogleのサポートが強力 | .NETコミュニティの一部、Xamarinからの移行者が多い |
エコシステム | 豊富なパッケージ、プラグイン | .NETエコシステムを活用、NuGetパッケージ |
ホットリロード | 高速な開発が可能 | 比較的遅い |
プラットフォームサポート | iOS, Android, Web, Desktop, Embedded | iOS, Android, macOS, Windows, Tizen |
強み | 高性能なUI、美しいデザイン、クロスプラットフォームの統一性 | .NET開発者にとって学習コストが低い、.NETエコシステムの活用 |
弱み | Dart言語の学習コスト、コミュニティがまだ比較的若い | UIのカスタマイズがやや複雑、プラットフォーム依存性が残る場合がある |
2)NetMAUIについて
いまから開発するならFlutterを使用したいと思いますが、すでにXamarinで開発していましたので同じC#を使えるXamarin後継のNetMAUIヘGeoDiveExaを移行する事にします。
昔大規模な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を以下の対応表を元に全て変換する
3-3)パッケージの削除と追加
xamarin関連のパッケージは全て削除する。その後は必要なパッケージを追加していく。
対応するパッケージがNetMAUI環境で使えない場合は、個別対応する。
3-4)コンパイルとエラー対応
後はひたすらコンパイルしてみてエラーを出して、手動修正していく事になる。
GeoDiveExaの場合、Mapに「カスタムピン」を使用して居たり、テーブルに「カスタムセル」を使っているので、NetMAUI用に個別対応していく必要がある様だ。
4)2024年8中時点の移植状況
4-1)地図画面
左がXamarinで右がNetMAUI:地図やボタンなどほとんど同じ様な表示まで出来たが、「カスタムピン」が表示できて居ない。

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

コメントを残す