Xamarin.Mac sorun giderme ipuçları

Genel Bakış

Bazen API'nin istediğiniz gibi çalışamayabiliyor veya bir hatayla ilgili bir soruna karşı çalışma sırasında hepimiz bir proje üzerinde çalışırken takılıyoruz. Xamarin'deki hedefimiz, mobil ve masaüstü uygulamalarınızı yazmada başarılı olmaktır ve size yardımcı olmak için bazı kaynaklar sağladık.

Bu kaynakların herhangi biri ile, sorunlarınızı hızla çözmelerine yardımcı olmak için atabilirsiniz bazı hazırlık adımları vardır:

  • Sorunun kök nedenini, kilitlenmeleri rapor etmek için mümkün olan en iyi şekilde belirleme:

    • "Uygulamam kilitleniyor" tanılaması zor. "Bu çağrıya boş bir dizi döndürürken uygulamam kilitleniyor" hatasını düzeltmek için çalışmak çok daha kolaydır.

    • "NSTable'ın çalışmasına izin vem yok", "NSTableDelegate'imde hiçbir yöntem bu durumda çağrılmıyor gibi görünüyor"dan daha az faydalıdır.

  • Mümkünse sorunu gösteren küçük bir örnek program sağlar. Sorunu arayan kaynak kodu sayfalarının araştırarak daha fazla zaman ve çabayla büyük siparişler alır.

  • Bir sorunun görünmesine neden olmak için uygulamanıza yaptığınız değişiklikleri bilmek, sorunun kaynağını hızla daraltabilirsiniz. Kısa süre önce Xamarin.Mac sürümlerini yükselterek, soruna neden olan bölümü bulmak için uygulamanın bölümlerini kırparak veya soruna neden olan değişikliği bulmak için önceki derlemeleri test etmek çok yararlı olabilir.

Çıkışınız hiç çıkışa sahip değilken uygulama kilitleniyorsa ne yapmak gerekir?

Çoğu durumda, Mac için Visual Studio hata ayıklayıcısı uygulamanıza özel durumları ve kilitlenmeleri yakalar ve kök nedeni bu konuda size yardımcı olur. Ancak bazı durumlarda, uygulamanın dock'ta geri dönen ve ardından çok az çıkışla veya hiç çıkışla çıkılamayacak durumlar vardır. Bu stratejilere şunlar örnek verilebilir:

  • Kod imzalama sorunları.
  • Belirli mono çalışma zamanı kilitleniyor.
  • Bazı Objective-c özel durumları ve kilitlenmeleri.
  • Bazıları işlem ömrü çok erken kilitleniyor.
  • Bazı yığın taşmaları.
  • Info.plist dosyanıza listelenen macOS sürümü, şu anda yüklü olan macOS sürümünüzden daha yeni veya geçersiz.

Gerekli bilgileri bulmak zor olabilir ve bu programlarda hata ayıklamak can sıkıcı olabilir. Yardımcı olacak birkaç yaklaşım şu şekildedir:

  • Info.plist'te listelenen macOS sürümünün bilgisayarda yüklü olan macOS sürümüyle aynı olduğundan emin olun.

  • Stack Mac için Visual Studio veya Cocoa'dan gelen ve çıkışı açıklaylaya kırmızı renkle çıktı için uygulama çıkışını( Görünüm - Dolgular - Uygulama Çıktısı) kontrol edin.

  • Komut satırına bakarak uygulamalarınızı çalıştırın ve şu komutu kullanarak çıktıya (Terminal uygulamasında) bakın:

    MyApp.app/Contents/MacOS/MyAppMyApp(burada, uygulamanın adıdır)

  • Komut satırınıza "MONO_LOG_LEVEL" ekleyerek çıkışı artırabilirsiniz, örneğin:

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

  • Daha fazla bilgi sağladığını görmek için işleminize bir yerel hata ayıklayıcısı ( ) lldb iliştirebilirsiniz (ücretli lisans gerekir). Örneğin, şunları yapın:

    1. lldb MyApp.app/Contents/MacOS/MyAppTerminale girin.
    2. runTerminale girin.
    3. cTerminale girin.
    4. Hata ayıklamayı tamamlarken çıkış.
  • Son çare olarak, yönteminizi çağırmadan önce (veya gerektiğinde başka yerlerde) bilinen bir konumdaki bir dosyaya metin yazarak soruna hangi fırlatma adımını takip NSApplication.InitMain etmek istediğinize bakabilirsiniz.

Bilinen sorunlar

Aşağıdaki bölümler bilinen sorunları ve bunların çözümlerini içerir.

Korumalı alanlı uygulamalarda hata ayıklayıcıya bağlanamıyor

Hata ayıklayıcısı TCP üzerinden Xamarin.Mac uygulamalarına bağlanır. Bu, korumalı alanı etkinleştirdikten sonra uygulamanın uygulamaya bağlanamadığı anlamına gelir. Bu nedenle, uygulamayı uygun izinler etkinleştirilmeden çalıştırmayı denersanız "Hataayıklayıcıya bağlanamıyor" hatasını alırsınız.

Uygulama korumalı alanı yetkilendirmelerini düzenleme.

Giden Ağ Bağlantılarına İzin Ver (İstemci) izni, hata ayıklayıcı için gereken izindir; bunun etkinleştirilmesi normalde hata ayıklamaya izin verir. Hata ayıklama olmadan hata ayıklayamayabilirsiniz. Hedefi, yalnızca hata ayıklama derlemeleri için korumalı alan olan herhangi bir uygulamanın yetkilendirmelerine otomatik olarak eklemek için CompileEntitlementsmsbuild güncelleştirildi. Yayın derlemeleri, yetkilendirmeler dosyasında belirtilen yetkilendirmeleri, değiştirilmemiş olarak kullanilmelidir.

System.NotSupportedException: 437 kodlaması için veri yok

Xamarin.Mac uygulamanıza üçüncü taraf kitaplıkları dahil etmek için uygulamayı derlemeye ve çalıştırmaya çalışırken "System.NotSupportedException: 437 kodlaması için veri yok" şeklinde bir hata alabilirsiniz. Örneğin, gibi kitaplıklar işlem Ionic.Zip.ZipFile sırasında bu özel durumu oluşturabilir.

Bu, Xamarin.Mac projesi için seçeneklerin açılması, MacDerleme Uluslararasılaştırması'na gidip Batı uluslararasılaştırması denetlenerek çözülebilir:

Derleme seçeneklerini düzenleme Derleme

Derlanamadı (mm5103)

Bu hata genellikle yeni bir Xcode sürümü yayın olduğunda ve yeni sürümü yüklemiş ancak henüz çalıştırmamışsanız meydana çıkar. Yeni bir Xcode sürümüyle derlemeye çalışmadan önce bu sürümü en az bir kez çalıştırmamız gerekir.

Xcode'un yeni bir sürümünü ilk kez çalıştıracaksanız, Xamarin.Mac için gereken birkaç komut satırı aracı yüklenir. Ayrıca, Xcode veya Xamarin.Mac sürümünü güncelleştirdikten sonra temiz bir derleme de gerekir.

Bu sorunu çözemezse lütfen bir hata kaydedin.

Eksik entitlements.plist

Mac için Visual Studio'nin en son sürümü Info.plist düzenleyicisinden Yetkilendirmeler bölümünü kaldırarak ayrı Entitlements.plist düzenleyicisine yerleştirmiştir (Xamarin.iOS ile daha iyi platformlar arası destek için).

Yeni Mac için Visual Studio ile, yeni bir Xamarin.Mac uygulama projesi güncelleştirmeyi güncelleştirmeyi tamamlarsanız proje ağacına otomatik olarak bir Entitlements.plist dosyası eklenir:

Yetkilendirmeleri seçme

Entitlements.plist dosyasına çift tıklarsanız Yetkilendirmeler Düzenleyicisi görüntülenir:

Yetkilendirmeleri düzenleme

Mevcut Xamarin.Mac projelerinde, dosyanın içinde projeye sağ tıklar ve Yeni Dosya Ekle... seçeneğini kullanarak Entitlements.plist dosyasını Çözüm Bölmesi oluşturmanız gerekir. Ardından Xamarin.Mac BoşÖzellik Listesi'ne tıklayın:

Yeni özellik listesi ekleme

Ad Entitlements olarak girin ve Entitlements Yeni düğmesine tıklayın. Projeniz daha önce bir Yetkilendirmeler dosyası eklediğinde, yeni bir dosya oluşturmak yerine projenize eklemeniz istenir:

Bir dosyanın üzerine yazmayı doğrulama

Community forumlarda destek

Xamarin ürünlerini kullanan geliştiriciler topluluğu harikadır ve çoğu kişi deneyimleri ve uzmanlıklarını paylaşmak için Xamarin.Mac forumlarımızı ziyaret ediyor. Ayrıca Xamarin mühendisleri yardım için forumu düzenli aralıklarla ziyaret eder.

Hata dosyalama

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.