Aracılığıyla paylaş


Xamarin.Mac sorun giderme ipuçları

Genel bakış

Bazen bir API'yi istediğimiz gibi çalıştıramama veya bir hataya çözüm bulmaya çalışma konusunda bir proje üzerinde çalışırken hepimiz takılırız. Xamarin'deki hedefimiz, mobil ve masaüstü uygulamalarınızı yazmada başarılı olmanızdır ve size yardımcı olacak bazı kaynaklar sağladık.

Bu kaynaklardan herhangi biriyle, sorununuzu hızla çözmelerine yardımcı olmak için uygulayabileceğiniz bazı hazırlık adımları vardır:

  • Kilitlenmeleri bildirmek için sorunun kök nedenini en iyi şekilde belirleyin:

    • "Uygulamam kilitleniyor" tanılaması zor. "Bu çağrıya boş bir dizi döndürdiğimde uygulamam kilitleniyor" düzeltme üzerinde çalışmak çok daha kolay.

    • "NSTable'ı çalıştıramıyorum", "NSTableDelegate'imdeki yöntemlerin hiçbiri bu durumda çağrılmıyor gibi görünüyor" değerinden daha az yararlı.

  • Mümkünse sorunu gösteren küçük bir örnek program sağlayın. Sorunu bulmak için kaynak kodu sayfalarını araştırmak daha fazla zaman ve çaba gerektirir.

  • Bir sorunun görünmesine neden olmak için uygulamanızda yaptığınız değişiklikleri bilmek, sorunun kaynağını hızla daraltabilir. Yakın zamanda Xamarin.Mac sürümlerini yükseltip yükseltmediğinize dikkat edin, soruna neden olan bölümü bulmak için uygulamanızın bölümlerini kırpın veya soruna hangi değişikliğin yol açtığını bulmak için önceki derlemeleri test edin.

Uygulamanız çıkış olmadan kilitlendiğinde yapılması gerekenler

Çoğu durumda, Mac için Visual Studio hata ayıklayıcısı uygulamanızdaki özel durumları ve kilitlenmeleri yakalar ve kök nedeni izlemenize yardımcı olur. Ancak, uygulamanızın dock'ta geri dönüp çok az çıkışla veya hiç çıkışla çıkmadığı bazı durumlar vardır. Bu tür işlemler şunları içerebilir:

  • Kod imzalama sorunları.
  • Bazı mono çalışma zamanı kilitleniyor.
  • Bazı Objective-C özel durumları ve kilitlenmeleri.
  • Bazıları işlem ömrünün çok erken bir aşamasında kilitleniyor.
  • Bazı yığın taşması.
  • Info.plist dosyanızda 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 olabileceğinden, bu programlarda hata ayıklamak sinir bozucu olabilir. İşte size yardımcı olabilecek birkaç yaklaşım:

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

  • Cocoa'dan gelen ve çıktıyı açıkleyebilecek yığın izlemeleri veya kırmızı çıktı için Mac için Visual Studio Uygulama Çıktısını (View ->Pads ->Application Output) denetleyin.

  • Uygulamanızı komut satırından çalıştırın ve şu komutu kullanarak çıkışa ( Terminal uygulamasında) bakın:

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

  • Komut satırındaki komutunuza "MONO_LOG_LEVEL" ekleyerek çıktıyı artırabilirsiniz, örneğin:

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

  • Daha fazla bilgi sağlandığını (ücretli lisans gerektirir) görmek için işleminize yerel bir hata ayıklayıcı (lldb) ekleyebilirsiniz. Örneğin, aşağıdakileri yapın:

    1. Terminale girin lldb MyApp.app/Contents/MacOS/MyApp .
    2. Terminale girin run .
    3. Terminale girin c .
    4. Hata ayıklamayı bitirdiğinizde çıkın.
  • Son çare olarak, yönteminizde NSApplication.Init (veya gerektiğinde başka yerlerde) çağırmadan Main önce, hangi başlatma adımında sorunla karşılaşabileceğinizi izlemek için bilinen bir konumdaki bir dosyaya metin yazabilirsiniz.

Bilinen sorunlar

Aşağıdaki bölümlerde bilinen sorunlar ve bunların çözümleri ele alınıyor.

Korumalı uygulamalarda hata ayıklayıcıya bağlanılamıyor

Hata ayıklayıcısı TCP üzerinden Xamarin.Mac uygulamalarına bağlanır; bu da korumalı alanı etkinleştirdiğinizde varsayılan olarak uygulamaya bağlanamadığı anlamına gelir, bu nedenle uygun izinler etkinleştirilmeden uygulamayı çalıştırmayı denerseniz "Hata ayıklayıcıya bağlanılamıyor" hatasını alırsınız.

Uygulama korumalı alanında yetkilendirmeleri düzenleme.

Giden Ağ Bağlantılarına İzin Ver (İstemci) izni, hata ayıklayıcı için gereken izindir ve bunu etkinleştirmek hata ayıklamaya normal şekilde izin verir. Bu olmadan hata ayıklayamazsınız çünkü hedefini CompileEntitlementsmsbuild , yalnızca hata ayıklama derlemeleri için korumalı alan olan tüm uygulamalar için yetkilendirmelere otomatik olarak bu izni ekleyecek şekilde güncelleştirdik. Sürüm derlemeleri, yetkilendirmeler dosyasında belirtilen yetkilendirmeleri değiştirilmemiş olarak kullanmalıdır.

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

Xamarin.Mac uygulamanıza 3. taraf kitaplıkları eklerken, uygulamayı derlemeye ve çalıştırmaya çalışırken "System.NotSupportedException: 437 kodlaması için kullanılabilir veri yok" biçiminde bir hata alabilirsiniz. Örneğin, gibi Ionic.Zip.ZipFilekitaplıklar işlem sırasında bu özel durumu oluşturabilir.

Bu sorun, Xamarin.Mac projesinin seçeneklerini açarak, Mac Derleme> gidip Batı uluslararasılaştırmasını denetleyerek çözülebilir:

Derleme seçeneklerini düzenleme

Derleme başarısız oldu (mm5103)

Bu hata genellikle yeni bir Xcode sürümü yayınlandığında ve yeni sürümü yüklediyseniz ancak henüz çalıştırmadığınızda oluşur. Xcode'un yeni bir sürümüyle derlemeye çalışmadan önce bu sürümü en az bir kez çalıştırmanız gerekir.

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

Bu sorunu çözemiyorsanız lütfen bir hata oluşturun.

Eksik entitlements.plist

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

Yeni Mac için Visual Studio yüklendiğinde, yeni bir Xamarin.Mac uygulama projesi oluşturduğunuzda, 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 projeleri için, Çözüm Bölmesi'nde projeye sağ tıklayıp Yeni Dosya Ekle...'yi seçerek Entitlements.plist>gerekir. Ardından Xamarin.Mac Boş Özellik Listesi'ne tıklayın:>

Yeni özellik listesi ekleme

Ad için girin Entitlements ve Yeni düğmesine tıklayın. Projeniz daha önce bir Entitlements dosyası eklemişse, yeni bir dosya oluşturmak yerine projeye eklemeniz istenir:

Dosyanın üzerine yazılmasını doğrulama

Forumlarda topluluk desteği

Xamarin ürünlerini kullanan geliştiriciler topluluğu şaşırtıcıdır ve çoğu deneyim ve uzmanlıklarını paylaşmak için Xamarin.Mac forumlarımızı ziyaret eder. Ayrıca, Xamarin mühendisleri düzenli aralıklarla forumu ziyaret eder.

Hata bildirme

Görüşleriniz bizim için önemlidir. Xamarin.Mac ile ilgili herhangi bir sorun bulursanız:

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

Lütfen aşağıdakilerden mümkün olduğunca fazlasını ekleyin:

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