Xamarin
重要
Visual Studio App Center は、2025 年 3 月 31 日に廃止される予定です。 完全に廃止されるまで Visual Studio App Center を引き続き使用できますが、移行を検討できる推奨される代替手段がいくつかあります。
Xamarin.iOS ビルドは、プロジェクト ファイル (.csproj) ではなくソリューション ファイル (.sln) からビルドされます
Xamarin.iOS ビルドがソリューション ファイル (.sln) から実行される場合は、いくつかの点を確認する必要があります。
iOS ビルドを対象としたビルド構成のコードでは、Android プロジェクトと UWP プロジェクトを無効にする必要があります。 ソリューションの構成マッピングに移動し、iPhone と iPhoneSimulator を対象とするすべてのマッピングについて、異なるプラットフォームを対象とするすべてのプロジェクトをオフにします。 この構成により、 .sln
がビルドを開始したときに、他のプロジェクトのビルドが試行されなくなります。
Xamarin.iOS ビルドが失敗し、署名情報を提供する必要がある
Xamarin.iOS ビルドが署名されていないが、ビルド プロセスで署名が必要な場合は、App Center ブランチ構成で Sign builds: Off
を選択した可能性があります。
ビルド ログに次のものが含まれている場合:
RequireProvisioningProfile: True.
これは、プロジェクト自体が署名用に構成され、App Center の構成にもかかわらず署名を適用することを意味します。
これを修正するには、IDE で Project Options > Build > iOS Bundle Signing を開き、プロジェクト構成 (Debug|iPhoneSimulator など) に Automatic 以外の署名情報が含まれていないことを確認します。
Xamarin.Android のビルドが Error: APK ファイルが見つかりませんでした。
Xamarin Android Postprocess タスク中にビルドが失敗する一般的な理由の 1 つは、Android プロジェクト ファイルの <OutputPath>
プロパティの値が正しくない場合です。 これを確認するには、 Xamarin.Android > プロジェクト オプション > ビルド > 出力に移動し ビルド構成 (デバッグ/リリース) が既定の場所を指していることを確認します。 通常は、 YourProjectDir/bin/$(Configuration)
する必要があります。
署名なしでビルドするように Xamarin.iOS アプリ ブランチを設定しましたが、署名情報を提供する必要があるという要求がビルドに失敗しました
App Center ブランチ構成で Sign builds: Off
を選択し、ビルド ログに RequireProvisioningProfile: True
が含まれている場合は、プロジェクト自体が署名用に構成されており、App Center の構成にもかかわらず署名の適用が試行されることを意味します。 これを修正するには、IDE で Project Options > Build > iOS Bundle Signing を開き、プロジェクト構成 (たとえば、 Debug|iPhoneSimulator) に Automatic 以外の署名情報が含まれていないことを確認します。
Xamarin.iOS シミュレーターのビルドが、"Failed to chmod ... /Appname.iOS.app/Appname.iOS : No such file or directory" (Chmod に失敗しました:/Appname.iOS.app/Appname.iOS: そのようなファイルまたはディレクトリがありません) エラーで iOS シミュレーターにインストールできません。
Visual Studio で Xamarin.iOS プロジェクトを作成する場合、iPhoneSimulator の既定の構成には、 i386 + x86_64 サポートされているアーキテクチャがあります。 このような構成からビルドされる .app ファイルは、シミュレーターへのアップロードに失敗します。 iOS ビルド>ビルド>プロジェクト オプションを開き iPhoneSimulator の構成の変更サポートされているアーキテクチャi386またはx86_64に変更します。
"WriteRestoreGraphTask" タスクが予期せず失敗し、Xamarin ビルドがエラー MSB4018で失敗しました。
ソリューションに新しい .NET Standard プロジェクトと共に PCL または古い .NET Standard プロジェクトが含まれているように見えます。 つまり、.csproj
ファイルにPackageTargetFallback
参照とAssetTargetFallback
参照の両方が含まれている可能性があります。 ビルド ログには、次のようなメッセージも含まれます。
error MSB4018: NuGet.Commands.RestoreCommandException: PackageTargetFallback and AssetTargetFallback cannot be used together. Remove PackageTargetFallback(deprecated) references from the project environment.
この問題を解決するには、PackageTargetFallback (古い PCL .csproj
ファイルにある傾向があります) を削除するか、名前を AssetTargetFallback に変更しますか? このソリューションについては、この StackOverflow スレッドでも説明します。
Xamarin ビルドがエラーで失敗する: このプロジェクトは、このコンピューターに存在しない NuGet パッケージを参照します。
アプリケーションをビルドするためにすべてのパッケージが復元されたとは思われません。 ビルド ログには、次のようなメッセージも含まれます。
warning MSB3245: Could not resolve this reference. Could not locate the assembly "ASSEMBLY_NAME". Check to make sure the assembly exists on disk. If this reference is required by your code, you may get compilation errors.
error CS0246: The type or namespace name 'TYPE_OR_NAMESPACE_NAME' could not be found (are you missing a using directive or an assembly reference?)
この問題を解決するには、 pre-build スクリプト appcenter-pre-build.sh
次のコマンドを使用して、リポジトリ内の各ソリューションのすべてのパッケージを復元します。
#!/bin/bash
find $APPCENTER_SOURCE_DIRECTORY -name '*.sln' -print0 | xargs -0 -n1 nuget restore -DisableParallelProcessing
Xamarin アプリケーションの単体テストを実行する
Xamarin ビルドで単体テストを実行するには、 post-build スクリプトを使用します。 たとえば、NUnit ベースのプロジェクトの名前に Test がある場合は、次のスクリプトを使用して結果をビルド、実行、および表示できます。
echo "Found NUnit test projects:"
find $APPCENTER_SOURCE_DIRECTORY -regex '.*Test.*\.csproj' -exec echo {} \;
echo
echo "Building NUnit test projects:"
find $APPCENTER_SOURCE_DIRECTORY -regex '.*Test.*\.csproj' -exec msbuild {} \;
echo
echo "Compiled projects to run NUnit tests:"
find $APPCENTER_SOURCE_DIRECTORY -regex '.*bin.*Test.*\.dll' -exec echo {} \;
echo
echo "Running NUnit tests:"
find $APPCENTER_SOURCE_DIRECTORY -regex '.*bin.*Test.*\.dll' -exec nunit3-console {} \;
echo
echo "NUnit tests result:"
find . -name 'TestResult.xml' -exec cat {} \;
エラーが発生する: プロジェクトが見つからない、Xamarin ビルドの構成が見つかりません
.csproj
と.sln
が配置されているリポジトリの深さの問題である可能性があります。 パフォーマンス上の理由から、現在のアナライザーには制限があります。
.csproj
ファイルの場合は、リポジトリ ルートを含む 4 つ未満のディレクトリにする必要があります。
.sln
ファイルの場合は、リポジトリ ルートを含む 2 つのディレクトリより深い場所にしないでください。
プライベート NuGet フィードを復元操作方法?
NuGet.Config ファイルがリポジトリにチェックインされ、.slnの横またはリポジトリのルート レベルに配置されている場合、App Center では、次の例に示すように、プライベート NuGet フィードが追加されたときに復元されます。 資格情報は、 environment 変数を使用して安全に追加できます。
Mac ビルド マシンの場合:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<packageSources>
<add key="nuget" value="https://api.nuget.org/v3/index.json" />
<add key="MyGet" value="https://www.myget.org/F/MyUsername/api/v2/index.json" />
<add key="MyAuthNuget" value="https://nuget.example.com/v2/index.json" />
</packageSources>
<activePackageSource>
<add key="All" value="(Aggregate source)" />
</activePackageSource>
<packageSourceCredentials>
<MyAuthNuget>
<add key="Username" value="%USER_VARIABLE%" />
<add key="ClearTextPassword" value="%PASSWORD_VARIABLE%" />
</MyAuthNuget>
</packageSourceCredentials>
</configuration>
Windows ビルド マシンについては、「 UWP C#」を参照してください。
複雑な構成があり、さらに詳しい情報が必要な場合は、「NuGet の動作の構成を参照してください。
CompileToNative でスタックしているビルド
この GitHub の問題 説明したようにビルドで同様の症状が発生する場合問題で提案されているように、次の引数を追加して ARM64 用にのみビルドしてみてください。
<MtouchArch>ARM64</MtouchArch>
ビルドに失敗し、エラーが発生しました。ターゲット "_IsProjectRestoreSupported" がプロジェクトに存在しません。
ソリューションに UWP プロジェクトがある場合、ビルドの問題が発生する可能性があります。復元中に、そのエラーは古いバージョンの NuGet で暗黙的に無視されていました。 ソリューションでこのような UWP プロジェクトを削除または修正すると、問題が解決される可能性があります。 この GitHub の問題 詳細を確認してください。