Pemecahan masalah pengikatan
Beberapa tips untuk memecahkan masalah pengikatan ke API macOS (sebelumnya dikenal sebagai OS X) di Xamarin.Mac.
Pengikatan yang hilang
Meskipun Xamarin.Mac mencakup banyak API Apple, terkadang Anda mungkin perlu memanggil beberapa APPLE API yang belum memiliki pengikatan. Dalam kasus lain, Anda perlu memanggil pihak ketiga C/Objective-C bahwa itu di luar cakupan pengikatan Xamarin.Mac.
Jika Anda berurusan dengan Apple API, langkah pertama adalah memberi tahu Xamarin bahwa Anda mencapai bagian API yang belum kami cakup. Ajukan bug yang mencatat API yang hilang. Kami menggunakan laporan dari pelanggan untuk memprioritaskan API mana yang kami kerjakan berikutnya. Selain itu, jika Anda memiliki lisensi Bisnis atau Perusahaan dan kurangnya pengikatan ini memblokir kemajuan Anda, ikuti juga instruksi di Dukungan untuk mengajukan tiket. Kami tidak bisa menjanjikan pengikatan, tetapi dalam beberapa kasus kami bisa membuat Anda bekerja sekitar.
Setelah Anda memberi tahu Xamarin (jika berlaku) tentang pengikatan Anda yang hilang, langkah selanjutnya adalah mempertimbangkan untuk mengikatnya sendiri. Kami memiliki panduan lengkap di sini dan beberapa dokumentasi tidak resmi di sini untuk membungkus pengikatan Objective-C dengan tangan. Jika Anda memanggil C API, Anda dapat menggunakan mekanisme P/Invoke C#, dokumentasi ada di sini.
Jika Anda memutuskan untuk mengerjakan pengikatan sendiri, ketahuilah bahwa kesalahan dalam pengikatan dapat menghasilkan semua jenis crash yang menarik dalam runtime asli. Secara khusus, berhati-hatilah bahwa tanda tangan Anda di C# cocok dengan tanda tangan asli dalam jumlah argumen dan ukuran setiap argumen. Kegagalan untuk melakukannya dapat merusak memori dan/atau tumpukan dan Anda dapat langsung mengalami crash atau di beberapa titik arbitrer di data yang akan datang atau rusak.
Pengecualian argumen saat meneruskan null ke pengikatan
Sementara Xamarin bekerja untuk memberikan pengikatan berkualitas tinggi dan teruji dengan baik untuk API Apple, terkadang kesalahan dan bug tergelincir. Sejauh ini masalah paling umum yang mungkin Anda jalankan adalah pelemparan ArgumentNullException
API saat Anda melewati null ketika API yang mendasarinya nil
menerima . File header asli yang menentukan API sering kali tidak memberikan informasi yang cukup tentang API mana yang menerima nihil dan yang akan crash jika Anda meneruskannya.
Jika Anda mengalami kasus di mana passing in null
melemparkan ArgumentNullException
tetapi Anda pikir itu harus berhasil, ikuti langkah-langkah berikut:
- Periksa dokumentasi apple dan/atau contoh untuk melihat apakah Anda dapat menemukan bukti bahwa ia menerima
nil
. Jika Anda nyaman dengan Objective-C, Anda dapat menulis program pengujian kecil untuk memverifikasinya. - Ajukan bug.
- Dapatkah Anda bekerja di sekitar bug? Jika Anda dapat menghindari panggilan API dengan
null
, pemeriksaan null sederhana di sekitar panggilan dapat menjadi pekerjaan yang mudah. - Namun, beberapa API mengharuskan passing dalam null untuk menonaktifkan atau menonaktifkan beberapa fitur. Dalam kasus ini, Anda dapat mengatasi masalah ini dengan memunculkan browser rakitan (lihat Menemukan anggota C# untuk pemilih tertentu), menyalin pengikatan, dan menghapus pemeriksaan null. Pastikan untuk mengajukan bug (langkah 2) jika Anda melakukan ini, karena pengikatan yang disalin tidak akan menerima pembaruan dan perbaikan yang kami buat di Xamarin.Mac, dan ini harus dianggap sebagai pekerjaan jangka pendek.
Melaporkan bug
Tanggapan Anda sangat penting bagi kami. Jika Anda menemukan masalah dengan Xamarin.Mac:
- Periksa Forum 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.