背景と目的
「.NET CLI を使用して Mac Catalyst アプリを構築する」をやってみたら・・・すんなりできないじゃん。以前プレビュー版を入れていたからだと思いますが、エラーと対処方法を残しておきます。
前提条件
コマンドの実施環境は、Mac + .NET CLI です。
$ sw_vers
ProductName: macOS
ProductVersion: 12.4
BuildVersion: 21F79
$ dotnet --version
6.0.300
.NET CLI を使用して Mac Catalyst アプリを構築する
こちらのドキュメントの通り進めてみます。
# .NET MAUI の最新のパブリック ビルドをインストールします
sudo dotnet workload install maui --source https://api.nuget.org/v3/index.json
# .NET CLI を使用して新しい .NET MAUI アプリを作成します
dotnet new maui -n "MyMauiApp"
以下のようなメッセージが表示され MyMauiApp ディレクトリが作成されます。
テンプレート ".NET MAUI App (Preview)" が正常に作成されました。
テンプレートパッケージ 'Microsoft.Maui.Templates::6.0.101-preview.10.2068' の更新プログラムを使用できます。
パッケージを更新するには、以下を使います:
dotnet new --install Microsoft.Maui.Templates::6.0.312
'Optional workloads' プロバイダーで利用可能なテンプレート パッケージ 'Microsoft.Maui.Templates::6.0.312' の更新プログラムを使用できます。
組み込みのテンプレート パッケージを使用するには、インストールされたテンプレート パッケージを、次を使用して手動でアンインストールします:
dotnet new --uninstall Microsoft.Maui.Templates
ディレクトリを MyMauiApp に変更しアプリをビルドして実行します。
# ディレクトリを MyMauiApp に変更しします
cd MyMauiApp
# アプリをビルドして実行します
dotnet build -t:Run -f net6.0-maccatalyst
以下のようなエラーメッセージが表示されます。
.NET 向け Microsoft (R) Build Engine バージョン 17.2.0+41abc5629
Copyright (C) Microsoft Corporation.All rights reserved.
復元対象のプロジェクトを決定しています...
/Users/testuser/Work/MyMauiApp/MyMauiApp.csproj を復元しました (482 ms)。
Detected signing identity:
Bundle Id: com.companyname.MyMauiApp
App Id: com.companyname.MyMauiApp
/Users/testuser/Work/MyMauiApp/MainPage.xaml.cs(3,22): error CS0234: 型または名前空間の名前 'Essentials' が名前空間 'Microsoft.Maui' に存在しません (アセンブリ参照があることを確認してください) [/Users/testuser/Work/MyMauiApp/MyMauiApp.csproj]
ビルドに失敗しました。
/Users/testuser/Work/MyMauiApp/MainPage.xaml.cs(3,22): error CS0234: 型または名前空間の名前 'Essentials' が名前空間 'Microsoft.Maui' に存在しません (アセンブリ参照があることを確認してください) [/Users/testuser/Work/MyMauiApp/MyMauiApp.csproj]
0 個の警告
1 エラー
経過時間 00:00:11.82
MainPage.xaml.cs を修正する対処方法
MainPage.xaml.cs の using Microsoft.Maui.Essentials; が存在しないようなので、一旦コメントアウトしてエラーメッセージの変化を確認してみます。
# using Microsoft.Maui.Essentials; をコメントアウトします
gsed -i 's?using Microsoft.Maui.Essentials;?// using Microsoft.Maui.Essentials;?' MainPage.xaml.cs
# アプリをビルドして実行します
dotnet build -t:Run -f net6.0-maccatalyst
以下のようなエラーメッセージが表示されます。
.NET 向け Microsoft (R) Build Engine バージョン 17.2.0+41abc5629
Copyright (C) Microsoft Corporation.All rights reserved.
復元対象のプロジェクトを決定しています...
復元対象のすべてのプロジェクトは最新です。
Detected signing identity:
Bundle Id: com.companyname.MyMauiApp
App Id: com.companyname.MyMauiApp
/Users/testuser/Work/MyMauiApp/MainPage.xaml.cs(21,4): error CS0103: 現在のコンテキストに 'SemanticScreenReader' という名前は存在しません [/Users/testuser/Work/MyMauiApp/MyMauiApp.csproj]
ビルドに失敗しました。
/Users/testuser/Work/MyMauiApp/MainPage.xaml.cs(21,4): error CS0103: 現在のコンテキストに 'SemanticScreenReader' という名前は存在しません [/Users/testuser/Work/MyMauiApp/MyMauiApp.csproj]
0 個の警告
1 エラー
経過時間 00:00:00.81
つまり SemanticScreenReader を使うために Microsoft.Maui.Essentials があるようです。
こちらのドキュメントによると Microsoft.Maui.Essentials の SemanticScreenReader は Microsoft.Maui.Accessibility に名前空間を変更されたことがわかります。
# コメントアウトを外して Essentials を Accessibility に変更します
gsed -i 's?// using Microsoft.Maui.Essentials;?using Microsoft.Maui.Accessibility;?' MainPage.xaml.cs
# アプリをビルドして実行します
dotnet build -t:Run -f net6.0-maccatalyst
無事ビルドが通りアプリが実行できました。
MAUI テンプレートを更新する対処方法
上の方で dotnet new maui -n "MyMauiApp"
した時のメッセージにあるように MAUI テンプレートを更新します。
# MAUI テンプレートを更新します
dotnet new --install Microsoft.Maui.Templates::6.0.312 --force
以下のようなメッセージが表示されます。
次のパッケージがインストールされます:
Microsoft.Maui.Templates::6.0.312
テンプレート パッケージをインストールすると、使用可能なテンプレート パッケージがオーバーライドされます。
次のテンプレート パッケージは既に使用可能です。
Microsoft.Maui.Templates::6.0.312
Microsoft.Maui.Templates は既にインストールされています。バージョン: 6.0.101-preview.10.2068、バージョン 6.0.312 に置き換えられます。
Microsoft.Maui.Templates::6.0.101-preview.10.2068 が正常にアンインストールされました。
成功: Microsoft.Maui.Templates::6.0.312により次のテンプレートがインストールされました。
テンプレート名 短い名前 言語 タグ
----------------------------------- ---------------- ---- ---------------------------------------------------------
..NET MAUI ContentPage (C#) maui-page-csharp [C#] MAUI/Android/iOS/macOS/Mac Catalyst/WinUI/Tizen/Xaml/Code
.NET MAUI Blazor アプリ maui-blazor [C#] MAUI/Android/iOS/macOS/Mac Catalyst/Windows/Tizen/Blazor
.NET MAUI ContentPage (XAML) maui-page-xaml [C#] MAUI/Android/iOS/macOS/Mac Catalyst/WinUI/Tizen/Xaml/Code
.NET MAUI ContentView (XAML) maui-view-xaml [C#] MAUI/Android/iOS/macOS/Mac Catalyst/WinUI/Tizen/Xaml/Code
.NET MAUI ResourceDictionary (XAML) maui-dict-xaml [C#] MAUI/Android/iOS/macOS/Mac Catalyst/WinUI/Xaml/Code
.NET MAUI アプリ maui [C#] MAUI/Android/iOS/macOS/Mac Catalyst/Windows/Tizen
.NET MAUI クラス ライブラリ mauilib [C#] MAUI/Android/iOS/macOS/Mac Catalyst/Windows/Tizen
.NET MAUI コンテンツ ビュー (C#) maui-view-csharp [C#] MAUI/Android/iOS/macOS/Mac Catalyst/WinUI/Tizen/Xaml/Code
# .NET CLI を使用して新しい .NET MAUI アプリを作成します
dotnet new maui -n "MyMauiApp2"
# ディレクトリを MyMauiApp2 に変更しします
cd MyMauiApp2
# アプリをビルドして実行します
dotnet build -t:Run -f net6.0-maccatalyst
テンプレートが変わるとコードもかなり変わるんですね。