Bağlama sorunlarını giderme

Xamarin.Mac'te macOS (eski adıyla OS X) API'lerine bağlama sorunlarını gidermeye yardımcı olacak bazı ipuçları.

Eksik bağlamalar

Xamarin.Mac, Apple API'lerinin büyük bir fazlasını kapsa da, bazen henüz bağlaması olmayan bazı Apple API'lerini çağırmanız gerekir. Diğer durumlarda, Xamarin.Mac bağlamalarının kapsamının dışında olan üçüncü taraf C/'yi Objective-C çağırmanız gerekir.

Apple API ile ilgileniyorsanız, ilk adım Xamarin'e API'nin henüz kapsamına sahip olmadığınız bir bölüme isabet etmektir. Eksik API'yi not alan bir hata kaydedin. Müşterilerin raporlarını kullanarak bir sonraki çalışmamızda hangi API'ler üzerinde çalışmamız gerektirmektedir. Buna ek olarak, İş veya Enterprise lisansınız varsa ve bu bağlama eksikliği ilerlemenizi engelliyorsa destekteki yönergeleri izleyerek bir bilet kaydedin. Bağlama taa kilemez, ancak bazı durumlarda size bir çalışma elde yız.

Xamarin'e (varsa) eksik bağlamanızı bildirerek bunu kendiniz bağlamayı göz önünde bulundurabilirsiniz. Burada eksiksiz bir kılavuz ve bağlamaları el ile sarmalamayla ilgili bazı resmi olmayan belgeler var. C API'sini çağırıyorsanız, C#'ın P/Invoke mekanizmasını kullanabilirsiniz, belgeler buradadır.

Bağlama üzerinde kendi kendinize çalışmaya karar veriyorsanız, bağlamada yapılan hataların yerel çalışma zamanında her türlü ilginç kilitlenmeye neden ola bir şey olduğunu fark edebilirsiniz. Özellikle, C# içinde imzanız bağımsız değişken sayısı ve her bağımsız değişkenin boyutu yerel imzayla eşlemektedir. Bunun yapilememasi bellek ve/veya yığında bozulmaya neden olabilir ve gelecekte verilerin hemen veya rastgele bir noktada kilitlenmeye neden olabilir.

Bağlamaya null geçirme sırasında bağımsız değişken özel durumları

Xamarin, Apple API'leri için yüksek kaliteli ve iyi test edilmiş bağlamalar sağlamak için çalışır ancak bazen hatalar ve hatalar gelir. Şu ana kadar karşılaşılan en yaygın sorun, temel alınan API'nin kabul etmesinde null değerinin geçerek bir ArgumentNullException API'nin atarak ortaya çıkar. nil API'yi tanımlayan yerel üst bilgi dosyaları genellikle hangi API'lerin nil'i kabul etmek için yeterli bilgi sağlamaz ve bu bilgileri geçersiniz kilitlenmesi.

Geçirmenin bir attığını ancak çalışması gerektiğini düşünmesi durumunda aşağıdaki adımları nullArgumentNullException izleyin:

  1. Apple belgelerini ve/veya örneklerini kontrol edin ve kabul eden kanıtı bulup bulamayabilirsiniz. nil konusunda rahatsanız Objective-C doğrulamak için küçük bir test programı yazabilirsiniz.
  2. Hata kaydedin.
  3. Hatayla ilgili bir sorun var mı? api'sini ile çağırmayı önleyemiyorsanız, çağrıların etrafında basit bir null null denetim kolayca kullanılabilir.
  4. Ancak bazı API'ler bazı özellikleri devre dışı bırakmak veya devre dışı bırakmak için null değer geçirmeyi gerektirir. Bu durumlarda, derleme tarayıcısını getirerek (bkz. Belirli bir seçici için C#üyesini bulma), bağlamayı kopyalayıp null denetimi kaldırarak sorunu ortadan kaldırabilirsiniz. Kopyalanan bağlamanız Xamarin.Mac'te yapılan güncelleştirmeleri ve düzeltmeleri almayılacağından, bunu yapmak için hata (2. adım) dosyası 2'yi mutlaka kullanın. Bunun kısa vadeli bir çalışma olduğu düşünülmelidir.

Hataları bildirme

Geri bildiriminiz bizim için önemlidir. Xamarin.Mac ile ilgili herhangi bir sorun bulursanız:

GitHub tüm sorunlar geneldir. Yorumları veya ekleri gizlemek mümkün değildir.

Lütfen aşağıdakileri mümkün olduğunca çok şekilde dahil edin:

  • Sorunu yeniden esndiren basit bir örnek. Bu mümkün olduğunca çok değerlidir.
  • Kilitlenmenin tam yığın izlemesi.
  • Kilitlenmeyi çevreleyen C# kodu.