ぴーさんログ

だいたいXamarin.Formsのブログ

なぜXamarinから.NET 6+, MAUIへ移行しなければならないのか

Xamarin、およびXamarin.Formsのサポート終了期日(2024年5月1日)まで半年を切りました。

今回はなぜ移行が必要なのか、どんな作業が発生するのかといった事について書いていきます。

なお、本記事では.NET 6とそれ移行のバージョンについて.NET 6+と表記します。

移行のモチベーション

なぜXamarinから.NET 6+へ移行が必要なの?

(ここはXamarin.Formsを使っていないアプリにも共通するお話です)

サポートが切れてもXamarinを使い続ければ良いのでは?

最大の動機は ストアにアプリを公開し続けるため です。これにつきます。

iOS, Androidどちらのアプリストアも提出要件に対象OS、SDKの最低バージョンを設けており、徐々にこれを引き上げています。 一方でXamarinのサポートポリシーでは「Android API 34 と Xcode 15 SDK (iOS および iPadOS 17、macOS 14)」を最後の対象バージョンと定めています。(2023年11月12日時点 Xamarin 公式サポートポリシー | .NET)

Xamarin SDKで開発を続けた場合、ストアの提出要件がXamarinのサポート範囲を超えた時に アプリの新規公開や、アップデートができなくなってしまいます。 だから新しいSDKを使ってストアにアプリを公開し続けるのために Xamarinから.NET 6+への移行が必要 なのです。

Xamarin.Formsから.NET MAUIへの移行は必須なの?

.NET 6+の新規プロジェクトに既存のXamarin.Formsアプリを移植すれば最低限の工数で対応できるのでは?

残念なことにこの試みは失敗します。

Xamarin.iOS向けのライブラリは.NET 6+とバイナリ互換がなくなってしまったため利用できません。 AndroidではXamarin.FormsのNuGetパッケージはインストールできるものの、ビルドツールが対応できないようでやはりビルド失敗となりました。

そのため、Xamarin.Formsアプリは.NET MAUIへの移行が必須となります。

.NET MAUIへの移行はどのくらい大変?

アプリの規模や作りによって変わってきますが、たいてい1か月以上かかる作業と考えてもらって良いと思います。 必然的に既存のXamarin.Forms版と並行開発する期間が発生しますので運用についても工夫しましょう。

いくつかMAUIへの移行に取り組んだ感触として、大きく次のような段階に分けられると思います。

  • 新規MAUIプロジェクトへ既存Xamarin.Formsアプリのソースコードを移植、ビルドできるように修正する
  • 動かしてみて実行時エラーを出しながら修正する
  • レイアウト崩れ、破綻を修正する

特にライブラリ移行の影響が大きく、どうしてもMAUIで利用できない場合は代わりを自作する、もしくは仕様の方を変更して調整する必要が出てきます。 移行作業を始める前に調査して目処をつけておくことをオススメします。

新規MAUIプロジェクトへ既存Xamarin.Formsアプリのソースコードを移植、ビルドできるように修正する

移植したソースコードのエラーをひたすら解消しつつ、MAUIアプリとしてビルドできるようにする作業です。 なんだかんだ、これらの作業で2〜4週間くらいかかると思います。

  • MAUI方式のプロジェクトへ組み換え
  • MAUIで名前空間やクラスが変更された箇所への対応
  • 今まで利用していたライブラリの互換性調査、移行

MAUI方式のプロジェクトへ組み換え

MAUIは1つのプロジェクト(csproj)から複数の成果物をビルドするSingle Projectというスタイルを採用しています。 Xamarin.Formsでは最低3プロジェクト構成が基本なので、1つにまとめる際にディレクトリ構造をどうまとめるかなど、検討ポイントがあります。 csprojで使用する設定も変わっているため、何をいじれば良いのか把握するのも大変だと思います。

MAUIで名前空間やクラスが変更された箇所への対応

主にXamarin.Forms, Xamarin.EssentialsからMAUI, MAUI Essentialsへの移行作業です。 公式ドキュメントに情報があって比較的取り組みやすい部分です。

今まで利用していたライブラリの互換性調査、移行

今まで利用していたライブラリのMAUI, .NET 6+対応版が出ているか調査して、あれば乗り換えます。 初期化方法MAUI向けになっていたり使い方が変わっていることが多いです。

後継ライブラリが存在しない場合、独自に同じ機能を実装できそうか、他に乗り換えられるライブラリがないか検討する必要があります。 あまりに労力が大きすぎる場合、MAUIへの移行そのものに影を落とすかもしれません。

一見MAUI対応版が出ていても一部の機能が削除されているケースもありますので根気よく取り組みましょう。

動かしてみて実行時エラーを出しながら修正する

ここまで全く動作確認できずにコードを修正しているので、ちょっと動かすとすぐに問題が出ます。 主要なシナリオや移行時に変更した箇所を重点的にチェックしましょう。

レイアウト崩れ、破綻を修正する

MAUIでレイアウト仕様に見直しが入っているため、Xamarin.Formsで問題ないXAML記述でもUIが崩れる場合があるため、最終的には全画面を確認したいです。 軽微なものは余白の大きさが変わっている程度ですが、Viewが重なってボタンが押せなくなってしまう場合もあります。

終わり

つまるところアプリをリリースし続けるならば.NET 6+, MAUIへ移行は避けられないというお話でした。 会社のお仕事でXamarin.FormsからMAUIへの移行サポートをやっていますので、ご入用でしたらいったん@ticktackmobileの方までご連絡ください。