tafuji's blog

C#, Xamarin, Azure DevOps を中心に書いています。

Xamarin.Essentials から .NET MAUI Essentials へ

はじめに

この記事は、Xamarin / MAUI Advent Calendar 2021 の 23日目の記事です。2019年の Xamarin Advent Calendar 2019 で 「Xamarin.Essentials 入門 - #1 Xamarin.Essentials とは」という記事で、Xamarin.Essentials を紹介しましたが、このアナウンスにあるように、.NET MAUI がリリースされるにあたり、Xamarin.Essentials も .NET MAUI Essentials に移行されるようです。今回の記事は、.NET MAUI Essentials について少し書いてみようと思います。

.NET MAUI Essentials を利用する

.NET MAUI はまだ Preview リリースの段階ですので、Microsoft Visual Studio Enterprise 2022 17.1.0 Preview 1.1 を利用して書いています。.NET MAUI Essentials は、Xamarin.Essentials と違って、NuGet からパッケージを直接追加できないようになっています。利用するには、プロジェクトファイルに設定を追加する必要があります。

.NET MAUI プロジェクトから利用する

.NET MAUI プロジェクト(.NET MAUI App, .NET MAUI Blazor App, .NET MAUI Class Library)では、デフォルトで .NET MAUI Essentials を利用するための設定がプロジェクトファイルに指定されています。<UseMaui>true</UseMaui> の部分がそれに相当します。

<Project Sdk="Microsoft.NET.Sdk">
    <PropertyGroup>
        <!-- 省略-->
        <UseMaui>true</UseMaui>
        <!-- 省略-->

.NET 6 Android / iOS プロジェクトから利用する

.NET 6 の Andorid / iOS プロジェクトから .NET MAUI Essentials を利用する場合には、プロジェクトファイルに設定を追加する必要があります。こちらの Blog では、<UsingMauiEssentials>true</UsingMauiEssentials> という設定を .NET 6 の Android / iOS プロジェクトに追加すればよいと書かれていましたが、Microsoft Visual Studio Enterprise 2022 17.1.0 Preview 1.1 では、利用できませんでした。

いろいろと調べた結果、プロジェクトファイルに、<UseMauiEssentials>true</UseMauiEssentials> を追加することで、.NET MAUI Essentials を .NET 6 の Andorid / iOS プロジェクトから利用できるようになりました。このあたりの設定値は、リリースされるまでに変わる可能性がありますね。

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <!-- 省略-->
    <!-- この設定では、利用できなかった
        <UsingMauiEssentials>true</UsingMauiEssentials>
    -->
    <UseMauiEssentials>true</UseMauiEssentials>
  </PropertyGroup>
</Project>

.NET MAUI Essentials のソースコード

.NET MAUI Essentials のソースコードは、dotnet/mauiリポジトリに組み込まれていて、 ここで確認することができます。

プロジェクトファイルのこのあたりを確認してみると、<TargetFrameworks> で指定する値は .NET 6 でかわるものの、ターゲットフレームワークごとにビルド対象になるソースコードを指定しているようで、このあたりは Xamarin.Essentials のときと変わらないようです。

  <ItemGroup Condition=" '$(TargetPlatformIdentifier)' == 'android' ">
    <Compile Include="**\*.android.cs" Exclude="$(DefaultItemExcludes);$(DefaultExcludesInProjectFolder)" />
    <Compile Include="**\*.android.*.cs" Exclude="$(DefaultItemExcludes);$(DefaultExcludesInProjectFolder)" />
    <AndroidResource Include="Resources\xml\*.xml" />
    <PackageReference Include="Xamarin.AndroidX.Browser" />
    <PackageReference Include="Xamarin.AndroidX.Security.SecurityCrypto" />
    <PackageReference Include="Xamarin.Google.Crypto.Tink.Android" />
  </ItemGroup>

実際、Preferences のコードを確認してみても、Xamarin.Essentials のころと特に変わりはなさそうです。

Preferences

ただ、.NET MAUI Essentials には、SemanticScreenReader というクラスがリポジトリに追加されているので、新機能のウオッチには .NET MAUI Essentials のリポジトリを見ていく必要がありそうです。

まとめ

  • Xamarin.Essentials は、 .NET MAUI Essentials に変わる
  • Xamarin.Essentials のサポート期間は、Xamarn.Forms と同じで、今後、新規機能は、.NET MAUI Essentials に追加されていくとのこと
  • .NET MAUI Essentials のソースコードは、GitHub に公開されており、Xamarin.Essentials の時と同じように Pull Request も受け付ける
  • .NET MAUI Essentials は NuGet では公開されないようで、利用するには、プロジェクトファイルの設定を修正する必要がある
    • .NET MAUI プロジェクトの場合は、<UseMaui>true</UseMaui> の設定が既定で追加されているので、何もしなくても .NET MAUI Essentials を利用できる
    • .NET 6 の Android / iOS プロジェクトの場合は、プロジェクトファイルに <UseMauiEssentials>true</UseMauiEssentials> を追加すればよい

参考資料