Compatibilità di iOS 9
Anche se non si prevede di aggiungere subito funzionalità di iOS 9 all'app, è consigliabile ricompilare le app con la versione più recente di Xamarin.
Importante
Le informazioni in questa pagina sono destinate ai clienti con app già presenti nell'App Store destinate a iOS 8 o versioni precedenti, che non hanno già inviato aggiornamenti per la compatibilità iOS 9. Se si usano già le versioni più recenti, Xcode 7 e Xamarin.iOS 9, per lo sviluppo di app, vedere l'introduzione a iOS 9.
Quando sono apparse le prime versioni beta di iOS 9, sono stati identificati due problemi con le versioni precedenti di Xamarin che si sono manifestate come app meno recenti che non sono in grado di avviare in iOS 9:
- Le app compilate per iOS 8 o versioni precedenti non sono in grado di avviarsi su dispositivi a 32 bit (incluse le app compilate con l'API unificata).
- L'errore P/Invoke con il percorso completo non è specificato.
Aggiornare l'installazione di Xamarin alla versione più recente del canale Stable e quindi ricompilare e ridistribuire le app, risolve questi due problemi.
Anche se non si prevede di aggiornare subito l'app con le funzionalità di iOS 9, è consigliabile ripetere la compilazione con la versione più recente di Xamarin e inviarla nuovamente all'App Store.
In questo modo l'app verrà eseguita in iOS 9 dopo l'aggiornamento dei clienti. È possibile continuare a supportare iOS 8: la ricompilazione con la versione più recente non influisce sulla versione di destinazione dell'applicazione.
Se si verificano altri problemi durante il test delle app esistenti in iOS 9, leggere la sezione Miglioramento della compatibilità di seguito.
Aggiornamento con Visual Studio
È consigliabile verificare in modo esplicito che Visual Studio sia aggiornato alla versione stabile più recente.
Informazioni su Componenti, NuGet e altre librerie?
Non è necessario attendere le nuove versioni di tutti i componenti o nuget usati per risolvere i due problemi indicati in precedenza. Questi problemi vengono risolti semplicemente ricreando l'app con la versione stabile più recente di Xamarin.iOS.
Analogamente, i fornitori di componenti e gli autori NuGet non devono inviare nuove build solo per risolvere i due problemi indicati in precedenza. Tuttavia, se un componente o NuGet usa o carica visualizzazioni UICollectionView
da file Xib, potrebbe essere necessario un aggiornamento per risolvere i problemi di compatibilità di iOS 9 indicati di seguito.
Miglioramento della compatibilità nel codice
Esistono alcuni casi di modelli di codice usati per funzionare nelle versioni precedenti di iOS che causano un'interruzione in iOS 9. Ecco alcuni possibili problemi (e le relative soluzioni) che possono verificarsi durante i test in iOS 9:
UICollectionViewCell.ContentView è Null nei costruttori
Motivo: in iOS 9 il initWithFrame:
costruttore è ora necessario, a causa delle modifiche del comportamento in iOS 9 come stato della documentazione uiCollectionView. Se è stata registrata una classe per l'identificatore specificato e deve essere creata una nuova cella, la cella viene ora inizializzata chiamando il relativo initWithFrame:
metodo.
Correzione: aggiungere il initWithFrame:
costruttore come segue:
[Export ("initWithFrame:")]
public YourCellClassName (CGRect frame) : base (frame)
{
Initialize (); // refactor initialize code into a method
}
Esempi correlati: MotionGraph, TextKitDemo
UIView non riesce a eseguire l'inserimento con il coder durante il caricamento di una visualizzazione da un oggetto Xib/Nib
Motivo: il initWithCoder:
costruttore è quello chiamato durante il caricamento di una visualizzazione da un file Xib di Interface Builder. Se questo costruttore non viene esportato codice non gestito non può chiamarne la versione gestita. In precedenza (ad esempio, in iOS 8) il IntPtr
costruttore veniva richiamato per inizializzare la visualizzazione.
Correzione: creare ed esportare il initWithCoder:
costruttore come segue:
[Export ("initWithCoder:")]
public YourClassName (NSCoder coder) : base (coder)
{
Initialize (); // refactor initialize code into a method
}
Esempio correlato: Chat
Messaggio Dyld: nessuna immagine della cache con nome...
È possibile che si verifichi un arresto anomalo con le informazioni seguenti nel log:
Dyld Error Message:
Dyld Message: no cache image with name (/System/Library/PrivateFrameworks/JavaScriptCore.framework/JavaScriptCore)
Motivo: si tratta di un bug nel linker nativo di Apple, che si verifica quando rendono pubblico un framework privato (JavaScriptCore è stato reso pubblico in iOS 7, prima che fosse un framework privato) e la destinazione di distribuzione dell'app è per una versione iOS quando il framework era privato. In questo caso il linker di Apple verrà collegato alla versione privata del framework anziché alla versione pubblica.
Correzione: questo problema verrà risolto per iOS 9, ma esiste una soluzione semplice che è possibile applicare manualmente nel frattempo: è sufficiente usare una versione iOS successiva nel progetto (in questo caso è possibile provare iOS 7). Altri framework potrebbero presentare problemi simili, ad esempio il framework WebKit è stato reso pubblico in iOS 8 (e quindi la destinazione di iOS 7 genererà questo errore; è consigliabile usare iOS 8 per usare WebKit nell'app).