.NET MAUIでマルチプラットフォームのアプリを作成する際に各プラットフォーム毎に異なる処理を実装する場合があると思います。
この場合にMAUIではプラットフォーム毎に処理を分けて実装することができます。
今回はその方法をメモ。
環境
- .NET 7
- VisualStudio 2022 Version 17.5.0 Preview 1.0
WindowsとAndroidで異なる実装する
MAUIのプロジェクト作成した時にデフォルトで出来上がる画面とコードを少し変更して実装していきます。
手順としては
- partial クラスを作成し、partial メソッドを定義
- 各プラットフォームのフォルダに同様のpartial クラスを作成し、メソッドを実装
です。
partialクラス、partialメソッド
まずは以下のようにそれぞれの場所にpartialクラス(PartialTest.cs)を3つ作成します。
それぞれのクラスの中身です。
- 直下に作成したPartialTest
namespace MauiPartial
{
public partial class PartialTest
{
public partial int TestMethod(int a, int b);
}
}
- Platforms/Android/PartialTest
namespace MauiPartial
{
public partial class PartialTest
{
public partial int TestMethod(int a, int b)
{
return a * b;
}
}
}
- Platforms/Windows/PartialTest
namespace MauiPartial
{
public partial class PartialTest
{
public partial int TestMethod(int a, int b)
{
return a + b;
}
}
}
上記で作成したクラス、メソッドを呼び出すMainPage.xaml.csを修正します。
namespace MauiPartial;
public partial class MainPage : ContentPage
{
int count = 0;
public MainPage()
{
InitializeComponent();
}
private void OnCounterClicked(object sender, EventArgs e)
{
count++;
PartialTest p = new PartialTest();
int print = p.TestMethod(count, 10);
CounterBtn.Text = $"Clicked {print} time";
SemanticScreenReader.Announce(CounterBtn.Text);
}
}
これを実行していきます。
Android(エミュレータ)で実行すると画面上のボタンのテキストが10 –> 20 –> 30…と変化していきます。
Windowsでは実行すると画面上のボタンのテキストが11 –> 12 –> 13…と変化していきます。
これである程度共通的な処理を書きつつ、プラットフォームで異なる実装が必要な場合には個別処理を実装できます。
ビルドエラーの解消(CS8795 部分メソッド ‘XXXXX’ にはアクセシビリティ修飾子が指定されているため、実装部分が必要です。)
エラー CS8795 部分メソッド 'PartialTest.TestMethod(int, int)' にはアクセシビリティ修飾子が指定されているため、実装部分が必要です。 MauiPartial (net7.0-ios), MauiPartial (net7.0-maccatalyst) C:\source\repos\MauiPartial\MauiPartial\PartialTest.cs 5 アクティブ
今までの修正のみだと上記のエラーが発生していると思います。
今回はAndroidとWindowsのみ実装しているためその他のプラットフォームでも実装してねというエラーです。たぶん。
エラーが出ているプラットフォームにもリリースする場合、実装すれば良いだけの話ですがターゲットを絞っているならば邪魔なだけです。
ちなみにこのエラーが出ていても実行自体はできるので気にならない人はそのままでもいいでしょう。
.csprojを修正
.csprojを開き、以下のように必要のないプラットフォームの定義をコメントアウト、修正します。
<!--<TargetFrameworks>net7.0-android;net7.0-maccatalyst</TargetFrameworks>-->
<TargetFrameworks>net7.0-android</TargetFrameworks>
<!--<SupportedOSPlatformVersion Condition="$([MSBuild]::GetTargetPlatformIdentifier('$(TargetFramework)')) == 'ios'">13.3</SupportedOSPlatformVersion>
<SupportedOSPlatformVersion Condition="$([MSBuild]::GetTargetPlatformIdentifier('$(TargetFramework)')) == 'maccatalyst'">13.1</SupportedOSPlatformVersion>-->
<SupportedOSPlatformVersion Condition="$([MSBuild]::GetTargetPlatformIdentifier('$(TargetFramework)')) == 'android'">21.0</SupportedOSPlatformVersion>
<SupportedOSPlatformVersion Condition="$([MSBuild]::GetTargetPlatformIdentifier('$(TargetFramework)')) == 'windows'">10.0.17763.0</SupportedOSPlatformVersion>
<TargetPlatformMinVersion Condition="$([MSBuild]::GetTargetPlatformIdentifier('$(TargetFramework)')) == 'windows'">10.0.17763.0</TargetPlatformMinVersion>
<!--<SupportedOSPlatformVersion Condition="$([MSBuild]::GetTargetPlatformIdentifier('$(TargetFramework)')) == 'tizen'">6.5</SupportedOSPlatformVersion>-->
本当なら画像の設定画面で修正していきたかったのですが、この画面の設定を少しでもいじると固まってVisual Studioが落ちるという謎の現象に陥るため諦めました。
私の環境のみなのかVisual Studioのバグなのかわかりませんがそのうち修正されると信じています。。
Platforms下のフォルダを削除
上記でコメントアウトした不要なプラットフォームのフォルダも削除しましょう。
今回の場合はWindowsとAndroidだけ残して他は全部削除しました。
コメント