Bagikan melalui


Tips pemecahan masalah Xamarin.Mac

Gambaran Umum

Terkadang kita semua terjebak saat mengerjakan proyek, baik pada ketidakmampuan untuk mendapatkan API untuk bekerja seperti yang kita inginkan atau dalam mencoba mengatasi bug. Tujuan kami di Xamarin adalah agar Anda berhasil menulis aplikasi seluler dan desktop Anda, dan kami telah menyediakan beberapa sumber daya untuk membantu.

Dengan salah satu sumber daya ini, ada beberapa langkah persiapan yang dapat Anda lakukan untuk membantu mereka menyelesaikan masalah Anda dengan cepat:

  • Tentukan akar penyebab masalah sebaik mungkin untuk melaporkan crash:

    • "Aplikasi saya mengalami crash" sulit untuk didiagnosis. "Aplikasi saya mengalami crash ketika saya mengembalikan array kosong ke panggilan ini" jauh lebih mudah untuk bekerja pada perbaikan.

    • "Saya tidak bisa membuat NSTable berfungsi" kurang membantu daripada "Tidak ada metode di NSTableDelegate saya yang tampaknya dipanggil dalam kasus ini."

  • Jika memungkinkan, berikan program contoh kecil yang menunjukkan masalah. Menggali halaman kode sumber yang mencari masalah membutuhkan urutan lebih banyak waktu dan upaya.

  • Mengetahui perubahan apa yang telah Anda buat pada aplikasi Anda untuk menyebabkan masalah muncul dapat dengan cepat mempersempit sumber masalah. Mencatat apakah Anda baru saja meningkatkan versi Xamarin.Mac, memangkas bagian aplikasi Anda untuk menemukan bagian yang menyebabkan masalah, atau menguji build sebelumnya untuk menemukan perubahan apa yang memperkenalkan masalah dapat sangat membantu.

Apa yang harus dilakukan saat aplikasi Anda mengalami crash tanpa output

Dalam kebanyakan kasus, debugger di Visual Studio untuk Mac akan menangkap pengecualian dan crash di aplikasi Anda dan membantu Anda melacak akar penyebabnya. Namun ada beberapa kasus di mana aplikasi Anda akan terpental di dermaga dan kemudian keluar dengan sedikit atau tanpa output. Titik masuk ini dapat mencakup:

  • Masalah penandatanganan kode.
  • Runtime mono tertentu mengalami crash.
  • Beberapa pengecualian dan crash Objective-c.
  • Beberapa crash sangat awal masa pakai proses.
  • Beberapa luapan tumpukan.
  • Versi macOS yang tercantum di Info.plist Anda lebih baru dari versi macOS yang saat ini diinstal atau tidak valid.

Penelusuran kesalahan program ini dapat membuat frustrasi, karena menemukan informasi yang diperlukan bisa sulit. Berikut adalah beberapa pendekatan yang dapat membantu:

  • Pastikan versi macOS yang tercantum di Info.plist sama dengan versi macOS yang saat ini diinstal di komputer.

  • Periksa Visual Studio untuk Output Aplikasi Mac (Lihat ->Pads ->Output Aplikasi) untuk jejak tumpukan atau output berwarna merah dari Kakao yang dapat menggambarkan output.

  • Jalankan aplikasi Anda dari baris perintah dan lihat output (di aplikasi Terminal ) dengan menggunakan:

    MyApp.app/Contents/MacOS/MyApp (di mana MyApp adalah nama aplikasi Anda)

  • Anda dapat meningkatkan output dengan menambahkan "MONO_LOG_LEVEL" ke perintah Anda pada baris perintah, misalnya:

    MONO_LOG_LEVEL=debug MyApp.app/Contents/MacOS/MyApp

  • Anda dapat melampirkan debugger asli (lldb) ke proses Anda untuk melihat apakah itu memberikan informasi lebih lanjut (ini memerlukan lisensi berbayar). Misalnya, lakukan hal berikut:

    1. Masukkan lldb MyApp.app/Contents/MacOS/MyApp di Terminal.
    2. Masukkan run di Terminal.
    3. Masukkan c di Terminal.
    4. Keluar setelah penelusuran kesalahan selesai.
  • Sebagai upaya terakhir, sebelum memanggil NSApplication.Init metode Anda Main (atau di tempat lain sebagaimana diperlukan), Anda dapat menulis teks ke file di lokasi yang diketahui untuk melacak pada langkah peluncuran apa yang Anda mengalami masalah.

Masalah yang diketahui

Bagian berikut mencakup masalah yang diketahui dan solusinya.

Tidak dapat tersambung ke debugger di aplikasi terkotakpasir

Debugger terhubung ke aplikasi Xamarin.Mac melalui TCP, yang berarti bahwa secara default saat Anda mengaktifkan sandboxing, tidak dapat terhubung ke aplikasi, jadi jika Anda mencoba menjalankan aplikasi tanpa izin yang tepat diaktifkan, Anda mendapatkan kesalahan "Tidak dapat terhubung ke debugger".

Editing the entitlements in the App sandbox.

Izin Izinkan Jaringan Keluar Koneksi (Klien) adalah izin yang diperlukan untuk debugger, mengaktifkan yang satu ini akan memungkinkan penelusuran kesalahan secara normal. Karena Anda tidak dapat men-debug tanpanya, kami telah memperbarui CompileEntitlements target untuk msbuild secara otomatis menambahkan izin tersebut ke pemberian hak untuk aplikasi apa pun yang dikotakpasir untuk build debug saja. Build rilis harus menggunakan hak yang ditentukan dalam file pemberian hak, tidak dimodifikasi.

System.NotSupportedException: tidak ada data yang tersedia untuk pengodean 437

Saat menyertakan pustaka pihak ketiga di aplikasi Xamarin.Mac, Anda mungkin mendapatkan kesalahan dalam bentuk "System.NotSupportedException: Tidak ada data yang tersedia untuk pengodean 437" saat mencoba mengkompilasi dan menjalankan aplikasi. Misalnya, pustaka, seperti Ionic.Zip.ZipFile, dapat melemparkan pengecualian ini selama operasi.

Ini dapat diselesaikan dengan membuka opsi untuk proyek Xamarin.Mac, pergi ke Mac Build>Internationalization dan memeriksa internasionalisasi Barat:

Editing the build options

Gagal mengkompilasi (mm5103)

Kesalahan ini biasanya disebabkan ketika versi baru Xcode dirilis dan Anda telah menginstal versi baru tetapi belum menjalankannya. Sebelum mencoba mengkompilasi dengan versi baru Xcode, Anda harus terlebih dahulu menjalankan versi tersebut setidaknya sekali.

Pertama kali Anda menjalankan versi Xcode baru, Xcode menginstal beberapa alat baris perintah yang diperlukan oleh Xamarin.Mac. Selain itu, Anda harus melakukan build bersih setelah memperbarui Xcode atau versi Xamarin.Mac Anda.

Jika Anda tidak dapat mengatasi masalah ini, silakan ajukan bug.

Entitlements.plist hilang

Versi terbaru Visual Studio untuk Mac telah menghapus bagian Pemberian Izin dari editor Info.plist dan menempatkannya di editor Entitlements.plist terpisah (untuk dukungan lintas platform yang lebih baik dengan Xamarin.iOS).

Dengan Visual Studio untuk Mac baru diinstal, saat Anda membuat proyek aplikasi Xamarin.Mac baru, file Entitlements.plist akan secara otomatis ditambahkan ke pohon proyek:

Selecting entitlements

Jika Anda mengeklik dua kali file Entitlements.plist , Editor Pemberian Izin akan ditampilkan:

Editing the entitlements

Untuk proyek Xamarin.Mac yang ada, Anda harus membuat file Entitlements.plist secara manual dengan mengklik kanan proyek di Solution Pad dan memilih Tambahkan>File Baru.... Selanjutnya, pilih Daftar Properti Kosong Xamarin.Mac>:

Adding a new property list

Masukkan Entitlements untuk nama dan klik tombol Baru . Jika proyek Anda sebelumnya menyertakan file Pemberian Hak, Anda akan diminta untuk menambahkannya ke proyek alih-alih membuat file baru:

Verifying the overwrite of a file

Dukungan komunitas di forum

Komunitas pengembang yang menggunakan produk Xamarin luar biasa dan banyak yang mengunjungi forum Xamarin.Mac kami untuk berbagi pengalaman dan keahlian mereka. Selain itu, teknisi Xamarin secara berkala mengunjungi forum untuk membantu.

Mengajukan bug

Tanggapan Anda sangat penting bagi kami. Jika Anda menemukan masalah dengan Xamarin.Mac:

  • Cari repositori masalah
  • Jika Anda tidak dapat menemukan masalah yang cocok, silakan ajukan masalah baru di repositori masalah GitHub.

Masalah GitHub semuanya bersifat publik. Tidak dimungkinkan untuk menyembunyikan komentar atau lampiran.

Harap sertakan sebanyak mungkin hal berikut:

  • Contoh sederhana yang mereprodusi masalah. Ini sangat berharga jika memungkinkan.
  • Jejak tumpukan penuh dari crash.
  • Kode C# yang mengelilingi crash.