Xamarin

Penting

Visual Studio App Center dijadwalkan untuk dihentikan pada 31 Maret 2025. Meskipun Anda dapat terus menggunakan Visual Studio App Center hingga sepenuhnya dihentikan, ada beberapa alternatif yang direkomendasikan yang dapat Anda pertimbangkan untuk bermigrasi.

Pelajari selengkapnya tentang garis waktu dukungan dan alternatif.

Build Xamarin.iOS saya dibangun dari file solusi (.sln) alih-alih file proyek (.csproj)

Saat build Xamarin.iOS Anda dijalankan dari file solusi (.sln), ada beberapa hal yang mungkin ingin Anda periksa.

Proyek Android dan UWP harus dinonaktifkan dalam kode Anda untuk konfigurasi build yang ditujukan untuk build iOS. Buka pemetaan konfigurasi solusi, dan untuk semua pemetaan yang menargetkan iPhone dan iPhoneSimulator, hapus centang semua proyek yang menargetkan platform yang berbeda. Konfigurasi ini memastikan ketika .sln mulai membangun, konfigurasi tidak akan mencoba membangun proyek lain.

Build Xamarin.iOS saya gagal mengklaim saya perlu memberikan informasi penandatanganan

Jika build Xamarin.iOS Anda tidak ditandatangani, tetapi proses build memerlukan penandatanganan, mungkin karena Anda telah memilih Sign builds: Off di konfigurasi cabang App Center.

Jika log build Anda berisi:

RequireProvisioningProfile: True. 

Ini berarti bahwa proyek Anda sendiri dikonfigurasi untuk menandatangani dan menerapkan penandatanganan meskipun konfigurasi App Center.

Untuk memperbaikinya, buka Opsi > Proyek Membangun > Penandatanganan Bundel iOS di IDE Anda dan pastikan konfigurasi proyek Anda (misalnya, Debug|iPhoneSimulator) tidak berisi informasi penandatanganan apa pun selain Otomatis.

Build Xamarin.Android saya gagal dengan Kesalahan: Tidak ada file APK yang ditemukan.

Salah satu alasan umum untuk build gagal selama tugas Xamarin Android Postprocess adalah nilai yang salah dalam <OutputPath> properti dalam file proyek Android. Untuk memeriksanya, buka Output Build > Opsi > Proyek Xamarin.Android > dan verifikasi bahwa konfigurasi build Anda (Debug/Rilis) menunjuk ke lokasi default. Biasanya, seharusnya YourProjectDir/bin/$(Configuration).

Saya menyiapkan cabang aplikasi Xamarin.iOS saya untuk membangun tanpa menandatangani tetapi build saya gagal mengklaim saya perlu memberikan informasi penandatanganan

Jika Anda memilih Sign builds: Off di konfigurasi cabang App Center, dan log build Anda berisi RequireProvisioningProfile: True, itu berarti bahwa proyek Anda sendiri dikonfigurasi untuk penandatanganan dan akan mencoba menerapkan penandatanganan meskipun konfigurasi App Center. Untuk memperbaikinya, buka Opsi > Proyek Build > iOS Bundle Signing di IDE Anda dan pastikan konfigurasi proyek Anda (misalnya, Debug|iPhoneSimulator) tidak berisi informasi penandatanganan apa pun selain Otomatis.

Nonaktifkan penandatanganan untuk konfigurasi Debug di aplikasi Xamarin.iOS

Build simulator Xamarin.iOS saya gagal diinstal ke Simulator iOS dengan kesalahan "Gagal chmod ... /Appname.iOS.app/Appname.iOS : Tidak ada file atau direktori seperti itu".

Saat Anda membuat proyek Xamarin.iOS di Visual Studio, konfigurasi default untuk iPhoneSimulator memiliki arsitektur i386 + x86_64 didukung. File .app yang dibangun dari konfigurasi tersebut akan gagal diunggah ke simulator. Buka Opsi > Proyek Bangun > Build iOS dan untuk konfigurasi iPhoneSimulator ubah Arsitektur yang didukung ke i386 atau x86_64.

Mengatur x86_64 dalam Arsitektur yang Didukung untuk konfigurasi iPhoneSimulator di aplikasi Xamarin.iOS

Build Xamarin saya gagal dengan kesalahan MSB4018: Tugas "WriteRestoreGraphTask" gagal secara tak terduga.

Sepertinya solusi Anda berisi proyek PCL atau .NET Standard yang lebih lama bersama dengan proyek .NET Standard yang lebih baru. Itu berarti mereka mungkin berisi referensi PackageTargetFallback dan AssetTargetFallback dalam .csproj file. Log build Anda juga akan berisi pesan seperti ini:

error MSB4018: NuGet.Commands.RestoreCommandException: PackageTargetFallback and AssetTargetFallback cannot be used together. Remove PackageTargetFallback(deprecated) references from the project environment.

Untuk mengatasi masalah ini, hapus PackageTargetFallback (cenderung berada dalam file PCL .csproj yang lebih lama) atau ganti namanya menjadi AssetTargetFallback? Solusinya juga dijelaskan dalam utas StackOverflow ini.

Build Xamarin saya gagal dengan kesalahan: Proyek ini mereferensikan paket NuGet yang hilang di komputer ini.

Sepertinya tidak semua paket dipulihkan untuk membangun aplikasi Anda. Log build Anda juga akan berisi pesan seperti ini:

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?)

Untuk mengatasi masalah ini, Anda dapat menggunakan skrip appcenter-pre-build.shpra-build dengan perintah berikut, yang memulihkan semua paket untuk setiap solusi di repositori Anda:

#!/bin/bash
find $APPCENTER_SOURCE_DIRECTORY -name '*.sln' -print0 | xargs -0 -n1 nuget restore -DisableParallelProcessing

Saya ingin menjalankan pengujian unit untuk aplikasi Xamarin saya

Untuk menjalankan pengujian unit di build Xamarin Anda, gunakan skrip pasca-build. Misalnya saat proyek berbasis NUnit Anda memiliki Uji dalam nama, Anda dapat menggunakan skrip berikut untuk membangun, menjalankan, dan menampilkan hasilnya:

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 {} \;

Saya mendapatkan kesalahan: Tidak ada proyek yang ditemukan dan Tidak ada konfigurasi yang ditemukan untuk build Xamarin

Ini bisa menjadi masalah kedalaman repositori tempat .csproj dan .sln berada. Ada batasan dalam penganalisis saat ini karena alasan performa.

Untuk .csproj file, seharusnya tidak lebih rendah dari empat direktori dalam termasuk akar repositori.

Untuk .sln file, seharusnya tidak lebih rendah dari dua direktori dalam termasuk akar repositori.

Bagaimana cara memulihkan umpan NuGet privat?

Jika file NuGet.Config dicek masuk ke repositori dan berada di samping .sln atau di tingkat akar repositori Anda, App Center memulihkan umpan NuGet privat Anda saat ditambahkan seperti yang ditunjukkan pada contoh di bawah ini. Kredensial dapat ditambahkan dengan aman menggunakan variabel lingkungan.

Untuk mesin build 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>

Untuk komputer build Windows, lihat UWP C#.

Jika Anda memiliki konfigurasi yang kompleks dan memerlukan informasi lebih lanjut, Anda dapat merujuk ke Mengonfigurasi perilaku NuGet.

Build macet di CompileToNative

Jika build mengalami gejala serupa seperti yang dijelaskan dalam masalah GitHub ini, cobalah untuk membangun hanya untuk ARM64 dengan menambahkan argumen berikut, seperti yang disarankan dalam masalah:

<MtouchArch>ARM64</MtouchArch>

Build gagal dengan kesalahan: target "_IsProjectRestoreSupported" tidak ada dalam proyek.

Anda mungkin mengalami masalah build jika Anda memiliki proyek UWP dalam solusi di mana selama pemulihan kesalahannya diabaikan secara diam-diam di versi lama NuGet. Menghapus atau memperbaiki proyek UWP tersebut dalam solusi dapat menyelesaikan masalah. Plese lihat detail dalam masalah GitHub ini.