Aracılığıyla paylaş


Xamarin.iOS 9 – Sorun Giderme

Bu makalede, Xamarin.iOS uygulamalarında iOS 9 ile çalışmaya yönelik çeşitli sorun giderme ipuçları sağlanır.

iOS 8 Simülatörleri nerede?

Xcode 7 (veya üzeri) yüklediyseniz, tüm iOS 8 simülatörlerini varsayılan olarak iOS 9 simülatörleriyle otomatik olarak değiştirir. Yine de iOS 8'de test etmeniz gerekiyorsa Xcode'u başlatabilir, ardından iOS 8 simülatörlerini indirip yükleyebilirsiniz.

Xcode'da Xcode menüsünü ve ardından Tercihler... öğesini seçin.>İndirmeler:

iOS 8 Simülatör İndirmeleri

iOS 8 simülatörlerini yeniden yüklemek için Şimdi Denetle ve Yükle düğmesini seçin.

Sol/Sağ Öznitelik Hatalarıyla Düzen Kısıtlaması

iOS 8'de (ve önceki) görsel taslaklardaki kullanıcı arabirimi öğeleri, aynı düzende hem Sağ hem De Sol Özniteliklerin (NSLayoutAttributeRight & NSLayoutAttributeLeft) ve Baştaki ve Sondaki Özniteliklerin (NSLayoutAttributeLeading & NSLayoutAttributeTrailing) bir karışımını kullanabilir.

Aynı Görsel Taslak iOS 9'da çalıştırılırsa aşağıdaki formda bir özel durumla sonuçlanır:

Yakalanmayan 'NSInvalidArgumentException' özel durumu nedeniyle uygulama sonlandırılıyor, neden: '*** +[NSLayoutConstraint constraintWithItem:attribute:relatedBy:toItem:attribute:multiplier:constant:]: Baştaki/sondaki öznitelik ile sağ/sol öznitelik arasında kısıtlama yapılamaz. Hem hem de hiçbiri için baştaki/sondakini kullanın.'

iOS 9, düzenleri Sağ & Sol veya Baştaki ve Sondaki öznitelikleri kullanacak şekilde zorlar, ancak ikisini birden kullanmaz. Bu sorunu düzeltmek için tüm düzen kısıtlamalarını Görsel Taslak dosyanızda ayarlanan öznitelik kümesini kullanacak şekilde değiştirin.

Daha fazla bilgi için bkz . iOS 9 kısıtlama hatası Stack Overflow tartışması.

HATA ITMS-90535: Beklenmeyen CFBundleExecutable Anahtarı

iOS 9'a geçtikten sonra, bir uygulamadan iOS 8 (veya daha önceki) sürümlerinde derlenen ve çalıştırılan üçüncü taraf bileşenleri (özellikle mevcut Google Haritalar bileşenimiz) kullanır. Yeni derlemeyi iTunes Connect'e göndermeye çalışırken şu biçimde bir hata alabilirsiniz:

HATA ITMS-90535: Beklenmeyen CFBundleExecutable Anahtarı. 'Payload/app-name.app/component.bundle' içindeki paket bir paket yürütülebilir dosyası içermiyor...

Bu sorun genellikle projede adlandırılmış paketin bulunmasıyla (hata iletisinin önerdiği gibi) anahtarı kaldırarak paketteki paketi düzenleyerek Info.plist CFBundleExecutable çözülebilir. Anahtar CFBundlePackageType da olarak ayarlanmalıdır BNDL .

Bu değişiklikleri yaptıktan sonra temiz bir işlem yapın ve projenin tamamını yeniden oluşturun. Bu değişiklikleri yaptıktan sonra sorunsuz bir şekilde iTunes Connect'e gönderebilirsiniz.

Daha fazla bilgi için lütfen bu Stack Overflow tartışmasını inceleyin.

CFNetwork SSLHandshake başarısız oldu (-9824) Hatası

Doğrudan veya iOS 9'daki bir web görünümünden İnternet'e bağlanmaya çalışırken şu biçimde bir hata alabilirsiniz:

2015-09-04 14:38:05.757 FormsWebViewiOS[2553:30362] CFNetwork SSLHandshake failed (-9824)
2015-09-04 14:38:05.758 FormsWebViewiOS[2553:30363] NSURLSession/NSURLConnection HTTP load failed (kCFStreamErrorDomainSSL, -9824)

Veya formda:

2015-09-04 14:39:17.881 FormsWebViewiOS[2568:30974] App Transport Security has blocked a cleartext HTTP (http://) resource load since it is insecure.
Temporary exceptions can be configured via your app's Info.plist file.

iOS9'da, Uygulama Aktarım Güvenliği (ATS) İnternet kaynakları (uygulamanın arka uç sunucusu gibi) ile uygulamanız arasında güvenli bağlantıları zorlar. Buna ek olarak, ATS protokol kullanılarak iletişimin ve üst düzey API iletişiminin HTTPS tls sürüm 1.2 kullanılarak iletme gizliliği ile şifrelenmesini gerektirir.

ATS, iOS 9 ve OS X 10.11 (El Capitan) için oluşturulan uygulamalarda varsayılan olarak etkinleştirildiğinden , CFURLNSURLSession veya kullanan NSURLConnectiontüm bağlantılar ATS güvenlik gereksinimlerine tabi olacaktır. Bağlantılarınız bu gereksinimleri karşılamıyorsa bir özel durumla başarısız olur.

Bu sorunun nasıl çözüldüğü hakkında bilgi için App Transport Security kılavuzumuzun ATS'yi Geri Çevirme bölümüne bakın.

Mevcut uygulamalarım iOS 9'da çalışmıyor

Mevcut uygulamalarınızı iOS 9'da çalışacak şekilde yeniden oluşturma ve yeniden dağıtma yönergeleri için iOS 9 uyumluluk bilgilerimize bakın.

Oluşturucularda UICollectionViewCell.ContentView Null

Neden: iOS 9'dainitWithFrame:, UICollectionView belgelerinde belirtildiği gibi iOS 9'daki davranış değişiklikleri nedeniyle oluşturucu artık gereklidir. Belirtilen tanımlayıcı için bir sınıf kaydettiyseniz ve yeni bir hücre oluşturulması gerekiyorsa, hücre artık yöntemini çağırarak initWithFrame: başlatılır.

Düzeltme: Oluşturucuyu initWithFrame: şöyle ekleyin:

[Export ("initWithFrame:")]
public YourCellClassName (CGRect frame) : base (frame)
{
    Initialize (); // refactor initialize code into a method
}

İlgili örnekler: MotionGraph, TextKitDemo

Xib/Nib'den Görünüm Yüklenirken UIView Coder ile Başlatılamıyor

Neden: initWithCoder: Bir Interface Builder Xib dosyasından görünüm yüklenirken oluşturucu çağrılır. Bu oluşturucu dışarı aktarılmazsa yönetilmeyen kod yönetilen sürümünü çağıramaz. Daha önce (örneğin, iOS 8'de) IntPtr oluşturucu görünümleri başlatmak için çağrıldı.

Düzeltme: Oluşturucuyu initWithCoder: şu şekilde oluşturun ve dışarı aktarın:

[Export ("initWithCoder:")]
public YourClassName (NSCoder coder) : base (coder)
{
    Initialize (); // refactor initialize code into a method
}

İlgili örnek: Sohbet

Dyld İletisi: Adı Olan Önbellek Görüntüsü Yok...

Günlükte aşağıdaki bilgilerle bir kilitlenmeyle karşılaşabilirsiniz:

Dyld Error Message:
Dyld Message: no cach image with name (/System/Library/PrivateFrameworks/JavaScriptCore.framework/JavaScriptCore)

Neden: Bu, Apple'ın yerel bağlayıcısında özel bir çerçeveyi genel yaptıklarında (JavaScriptCore özel bir çerçeve olmadan önce iOS 7'de genel kullanıma açık hale getirildiğinde) ve uygulamanın dağıtım hedefi, çerçeve özel olduğunda bir iOS sürümüne yönelik olan bir hatadır. Bu durumda Apple'ın bağlayıcısı, genel sürüm yerine çerçevenin özel sürümüyle bağlantı oluşturur.

Düzeltme: Bu, iOS 9 için ele alınacaktır, ancak bu arada kendiniz uygulayabileceğiniz kolay bir geçici çözüm vardır: projenizde daha sonraki bir iOS sürümünü hedeflemeniz gerekir (bu durumda iOS 7'yi deneyebilirsiniz). Diğer çerçeveler de benzer sorunlar ortaya çıkabilir, örneğin WebKit çerçevesi iOS 8'de genel kullanıma açık hale getirildi (ve bu nedenle iOS 7'yi hedeflemek bu hataya neden olur; iOS 8'i uygulamanızda WebKit kullanmak için hedeflemeniz gerekir).

Güvenilmeyen Kurumsal Geliştirici

Xamarin.iOS uygulamanızın iOS 9 sürümünü gerçek iOS donanımında çalıştırmaya çalışırken, geliştirici hesabınıza cihazda güvenilmediğini belirten bir ileti alabilirsiniz. Örneğin:

Güvenilmeyen Kurumsal Geliştirici uyarısı

Bu sorunu çözmek için aşağıdakileri yapın:

  1. Geliştirme Mac'inde Xcode'ı (en son beta sürümü) başlatın.

  2. Cihazlar Penceresini açmak için Pencere menüsünden Cihazlar'ı seçin:

    Cihazlar Penceresi

  3. CİhAZLAR yan panelinin altında cihazınızı seçin, sağ tıklayın ve Sağlama Profillerini Göster...:

    SShow Sağlama Profilleri

  4. Şu anda cihazda bulunan her sağlama profilini seçin ve silmek için düğmeyi - seçin:

    Sağlama profilini silme

  5. Xcode menüsünde Tercihler... ve Hesaplar'ı seçin:

    Xcode hesabı tercihleri

  6. Ayrıntıları Görüntüle... düğmesine tıklayın ve ardından Tümünü indir düğmesini seçin:

    Tüm profilleri indirme

  7. Listenin güncelleştirilmesi tamamlandığında Bitti düğmesini seçin ve Tercihler penceresini kapatın.

  8. iOS cihazından test etmeye çalıştığınız Xamarin.iOS uygulamasının mevcut sürümünü kaldırın.

  9. Mac için Visual Studio dönün, temiz bir derleme yapın ve uygulamayı cihazda yeniden çalıştırmayı deneyin.

Xcode tarafından yüklenen yeni sağlama profilleri görülmeden önce Mac için Visual Studio durdurmanız ve yeniden başlatmanız gerekebilir. Yeni sağlama profillerini seçmek için Xamarin.iOS uygulamanızın iOS Paket İmzalama seçeneklerini de ayarlamanız gerekebilir.

Başlatma Ekranı Sorunları

iOS 9 artık Başlatma Ekranı gereksinimlerini zorunlu kıldı, böylece aynı başlatma görüntüsü artık farklı arabirim yönlendirmelerini destekleyecek şekilde yeniden kullanılamaz. Daha fazla bilgi için bkz. Apple'ın UILanchImage Başvurusu .

İsteğe bağlı olarak, bir dizi .png görüntü dosyası kullanmak yerine uygulamanızın Başlatma Ekranını sunmak için görsel taslak dosyası kullanabilirsiniz. Bu artık Apple'ın Başlatma Ekranlarını sunmanın tercih edilen yoludur. Daha fazla bilgi için Birleşik Görsel Taslaklara Giriş kılavuzumuza bakın.

Son olarak, uygulamanızın Başlatma Ekranı için bir görsel taslak dosyası kullanması ve slayt üzerinde panelde veya Bölünmüş Görünüm modunda çalıştırılması için dört arabirim yönlendirmesini (Dikey, Baş Aşağı Dikey, Yatay Sol ve Yatay Sağ) desteklemesi gerekir. iOS 9'un yeni çoklu görev özellikleri hakkında daha fazla bilgi edinmek için lütfen iPad için çoklu görev yapma kılavuzumuza bakın.

NSInternalInconsistencyException Özel Durumu

iOS 9 için mevcut bir Xamarin.iOS uygulamasını derleyip çalıştırırken şu biçimde bir hata alabilirsiniz:

Objective-C özel durum oluştu. Ad: NSInternalInconsistencyException Nedeni: Uygulama pencerelerinin, uygulama başlatmanın sonunda bir kök görünüm denetleyicisi olması beklenir

Uygulama Windows'un uygulama başlatma işleminin sonunda kök görünüm denetleyicisine sahip olması beklendiğinden ve mevcut uygulamanız olmadığından bu hata oluşuyor.

Bu sorun için en az iki olası geçici çözüm vardır:

  1. Uygulamayı, Kullanıcı Arabirimini tanımlamak için dosyalar yerine xib görsel taslak dosyasını kullanacak şekilde güncelleştirin. Bu, uygulamanızın boyutuna ve görsel taslakları düzenlerken Xcode'un Arabirim Oluşturucusu'nu kullanma bilgilerine bağlı olarak düzeltmek için çok zaman gerektirir. Daha fazla bilgi için Birleşik Görsel Taslaklara Giriş belgelerimize bakın.
  2. RootViewController Uygulamanızın kullanıcı arabirimindeki FinishedLaunching Bir Görünüm Denetleyicisi'ni işaret etmek için sınıftaki yönteminde AppDelegate app Window özelliğini ayarlayın.

Görünümleri Başlatma ve Denetleyicileri Görüntüleme Zamanları

Xamarin.iOS ile, yönetilen kodda bir şey kullanıma sunulduğunda çağrılan ancak iOS tasarımını bozan oluşturucuların içinde Görünümler veya Görünüm Denetleyicilerinin başlatılması mümkündür.

Genel olarak, ne zaman çağrılacağı konusunda emin olmadığınız için oluşturucudan kodu geri Objective-C çağırabilecek hiçbir şey başlatmamalısınız. Bu, bu başlatmanın yapılması gereken daha iyi bir yer (diğer .ctor) veya geçersiz kılma çağrısı (hiçbir olay olmadığı gibi Objective-C ) olduğu anlamına da gelir.