Kompatibilita iOSu 9

I když do aplikace nechcete přidávat funkce pro iOS 9 hned, měli byste aplikace znovu sestavit s nejnovější verzí Xamarinu.

Důležité

Informace na této stránce jsou určené pro zákazníky, kteří už mají aplikace v App Storu určené pro iOS 8 nebo starší, kteří ještě neodeslali aktualizace pro kompatibilitu s iOSem 9. Pokud už používáte nejnovější verze – Xcode 7 a Xamarin.iOS 9 – pro vývoj aplikací navštivte úvod do iOS 9.

Když se objeví první beta verze iOS 9, zjistili jsme dva problémy se staršími verzemi Xamarinu, které se projevily jako starší aplikace, které se v iOSu 9 nedají spustit:

  • Aplikace vytvořené pro iOS 8 nebo starší nemůžou spouštět na 32bitových zařízeních (včetně aplikací vytvořených pomocí sjednoceného rozhraní API).
  • Volání nespravovaného kódu selhává s úplnou cestou.

Aktualizace instalace Xamarinu na nejnovější verzi stabilního kanálu a následné opětovné sestavení a opětovné nasazení aplikací vyřeší tyto dva problémy.

I když neplánujete aplikaci hned aktualizovat pomocí funkcí pro iOS 9, doporučujeme znovu sestavit nejnovější verzi Xamarinu a znovu odeslat do App Storu.

Tím zajistíte, že vaše aplikace po upgradu vašich zákazníků poběží v iOSu 9. IOS 8 můžete dál podporovat – opětovné sestavení s nejnovější verzí nemá vliv na cílovou verzi aplikace.

Pokud máte při testování stávajících aplikací v iOSu 9 další problémy, přečtěte si níže část Vylepšení kompatibility .

Aktualizace pomocí sady Visual Studio

Doporučujeme explicitně zkontrolovat, jestli je sada Visual Studio aktualizovaná na nejnovější stabilní verzi.

A co komponenty, Nugety a další knihovny?

Nemusíte čekat na nové verze žádné komponenty ani nugety, které používáte k řešení dvou výše uvedených problémů. Tyto problémy jsou opraveny jednoduše opětovným sestavením aplikace s nejnovější stabilní verzí Xamarin.iOS.

Podobně dodavatelé komponent a autoři NuGet nemusí odesílat nové buildy pouze k opravě dvou výše uvedených problémů. Pokud ale některá komponenta nebo NuGet používá UICollectionView nebo načítá zobrazení ze souborů Xib , může být aktualizace nutná k vyřešení níže uvedených problémů s kompatibilitou iOS 9.

Zlepšení kompatibility v kódu

Existuje několik případů vzorů kódu, které se používají k práci ve starších verzích iOSu a způsobujících chyby v iOSu 9. Tady jsou některé možné problémy (a jejich řešení), ke kterým může dojít při testování v iOSu 9:

UICollectionViewCell.ContentView je null v konstruktorech

Důvod: V iOSu initWithFrame: 9 je teď konstruktor povinný, protože chování se v iOSu 9 mění ve stavu dokumentace UICollectionView. Pokud jste zaregistrovali třídu pro zadaný identifikátor a je nutné vytvořit novou buňku, buňka je nyní inicializována voláním jeho initWithFrame: metody.

Oprava: Přidejte initWithFrame: konstruktor takto:

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

Související ukázky: MotionGraph, TextKitDemo

UiView se při načítání zobrazení z Xib/Nib nepodaří inicializaci pomocí coderu

Důvod: Konstruktor initWithCoder: je ten, který se volá při načítání zobrazení ze souboru Xib Tvůrce rozhraní. Pokud tento konstruktor není exportován nespravovaný kód nemůže volat naši spravovanou verzi. Dříve (např. v iOS 8) IntPtr byl konstruktor vyvolán k inicializaci zobrazení.

Oprava: Vytvoření a export konstruktoru initWithCoder: takto:

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

Související ukázka: Chat

Dyld Message: no cache image with name...

Může docházet k chybovému ukončení s následujícími informacemi v protokolu:

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

Důvod: Jedná se o chybu v nativním linkeru společnosti Apple, ke které dochází, když zpřístupní privátní architekturu (JavaScriptCore byl v iOSu 7 před tím, než se jednalo o privátní architekturu), a cílem nasazení aplikace je verze iOS, když byla architektura soukromá. V tomto případě linker společnosti Apple bude odkazovat s privátní verzí architektury místo veřejné verze.

Oprava: Tento problém bude vyřešen pro iOS 9, ale existuje jednoduché alternativní řešení, které můžete použít mezitím: stačí cílit na novější verzi iOS v projektu (v tomto případě můžete vyzkoušet iOS 7). Jiné architektury můžou vykazovat podobné problémy, například architektura WebKit byla v iOSu 8 veřejná (a proto cílení na iOS 7 způsobí tuto chybu; měli byste cílit na iOS 8, aby používal WebKit ve vaší aplikaci).