iOS 6 beta 3 – ecco tutte le novità + changelog (articolo in costante aggiornamento) x14

  Ormai è più di un'ora Lanciata Apple iOS beta 6 3 per gli sviluppatori di applicazioni per l'App Store e includeva una serie di modifiche, la maggior parte delle quali purtroppo impercettibili. In questo articolo abbiamo elencato le novità più importanti, ma anche il changelog ufficiale pubblicato dall'azienda.

1. Ancora un nuovo menu per l'applicazione Mappe in questo articolo avete i dettagli.

2. È stato migliorato il sistema che ti avvisa quando un'applicazione richiede l'accesso ai tuoi dati dalla Rubrica.

3. Molti dei problemi che aveva l'Apple TV con l'applicazione Netflix, con il telecomando, con le presentazioni o con l'applicazione YouTube sono stati risolti.

4. Risolto il problema per cui i pulsanti Accetta/Rifiuta per le chiamate FaceTime non venivano visualizzati.

5. Sul tablet iPad, la cronologia di Safari, l'elenco dei preferiti e i menu di lettura sono ora disponibili in un'unica scheda.

6. La sezione Privacy ora contiene icone per ciascuna categoria separata.

7. Per Siri è più difficile rispondere alle domande, ma la voce è stata leggermente modificata da Apple.

8. Gli utenti hanno la possibilità di registrare indirizzi e-mail con il dominio @icloud.com.

9. Lo streaming foto condiviso raggiunge anche iPhone 3GS e iPod Touch.

10. La funzione VIP email arriva anche su iPod Touch.

11. Siri può aprire il menu AssistiveTouch.

12. L'applicazione Mail ha un nuovo pulsante per l'archiviazione delle email.

13. L'applicazione Mappe fornisce informazioni sul traffico in determinati paesi.

14. Quando aggiorni un'applicazione, il pulsante Aggiornamenti nell'App Store ti mostrerà un indicatore relativo all'avanzamento dell'installazione dell'applicazione.

 

Note e problemi noti

I seguenti problemi riguardano l'utilizzo di iOS SDK 6.0 per sviluppare codice.

Rubrica

  • Quando un'app si trova in un nuovo stato di privacy e tenta di presentare un fileABNewPersonViewController, l'utente non può eliminare correttamente il controller di visualizzazione anche se consente l'accesso ai contatti. L'utente deve forzare l'uscita dall'app e riavviarla.
  • Richiesta di accesso ai contatti:
    • Gli utenti possono concedere o negare l'accesso ai dati di contatto in base all'app. Per richiedere l'accesso ai dati di contatto, chiamare la funzione ABAddressBookRequestAccessWithCompletion dopo aver chiamato il file ABAddressBookCreateWithOptions funzione. La funzione ABAddressBookRequestAccessWithCompletion non blocca l'app mentre all'utente viene chiesto di concedere o negare l'accesso. Fino a quando non sarà concesso l'accesso, il file ABAddressBookRefl'oggetto non conterrà alcun contatto e qualsiasi tentativo di modificare i contatti fallisce con a kABOperationNotPertchedByUserErrorerrore. L'utente viene avvisato solo la prima volta che viene richiesto l'accesso; qualsiasi chiamata successiva a ABAddressBookCreateWithOptions utilizzerà le autorizzazioni esistenti. Il gestore di completamento viene chiamato su una coda arbitraria. Se l'oggetto ABAddressBookRef viene utilizzato in tutta l'app, tutto l'utilizzo deve essere inviato alla stessa coda per utilizzare ABAddressBookRef in modo thread-safe.
  • Verifica stato autorizzazione accesso:
    • Un'app può utilizzare l'API dello stato di autorizzazione per verificare se può accedere a contatti, calendari, promemoria o libreria di foto. Questa API è indipendente dall'API di richiesta di accesso e non richiederà all'utente di concedere o negare l'accesso. Con questa API un'app può regolare la visualizzazione dei suoi elementi dell'interfaccia utente che accederebbero alla classe di dati. Ad esempio, se l'accesso ai contatti è autorizzato o non determinato, è possibile visualizzare un pulsante dell'interfaccia utente per selezionare un contatto.
    • Per la Rubrica, chiamare la funzione ABAddressBookGetAuthorizationStatus. Per Event Kit, chiama il metodo AuthorizationStatusForEntityType: class diEKEventStore. Per la Libreria di risorse, chiamare il metodo della classe warrantyStatus di ALAssetsLibrary. Il significato dei valori di stato restituiti è il seguente:
      • Stato di autorizzazione non determinato - L'utente non ha ancora scelto se questa app può accedere alla classe di dati.
      • Stato di autorizzazione limitato – Questa app non è autorizzata ad accedere alla classe di dati. L'utente non può modificare lo stato di questa app, probabilmente a causa di restrizioni attive come il controllo genitori in atto.
      • Stato di autorizzazione negato - L'utente ha negato esplicitamente l'accesso alla classe di dati per questa app.
      • Stato di autorizzazione Autorizzato – Questa app è autorizzata ad accedere alla classe di dati.

apple TV

  • In alcuni casi, lo schermo potrebbe mostrare la risoluzione errata. Riavvia la tua Apple TV per riportarla alla risoluzione corretta.
  • RISOLTO: i video Netflix potrebbero non riprendere da dove li avevi interrotti.
  • RISOLTO: l'elenco della cronologia nell'app YouTube viene cancellato quando esci e accedi nuovamente all'app.
  • Apple TV potrebbe essere lenta nel rispondere mentre è in corso un download in background.
  • Apple TV potrebbe riavviarsi durante l'utilizzo dell'app Remote.
  • Apple TV potrebbe riavviarsi quando si cambia la lingua del sistema.
  • Photo Stream non si carica quando si accede una seconda volta. Riavvia Apple TV per risolvere.
  • La musica non viene riprodotta durante le presentazioni di foto.
  • Nuovi comportamenti:
    • Scegli gli altoparlanti remoti in Impostazioni > AirPlay.
    • Imposta un codice su schermo per AirPlay in Impostazioni > AirPlay.
    • Salva più account iTunes Store in Impostazioni > iTunes Store.
    • Tieni premuto il pulsante Seleziona per riorganizzare le icone nel menu principale.
    • Nascondi le icone del menu principale in Impostazioni > Generali > Controllo genitori.

Ciao

  • NSNetService class e le API CFNetService non includono interfacce P2P per impostazione predefinita. Per esplorare, registrare o risolvere servizi su interfacce P2P, un'app deve utilizzare le API Bonjour DNSService*() indicate di seguito.
  • L'impostazione del parametro InterfaceIndex su kDNSServiceInterfaceIndexAny nelle seguenti API non includerà le interfacce P2P per impostazione predefinita. Per includere le interfacce P2P, ora è necessario impostare il flag kDNSServiceFlagsIncludeP2P quando si utilizza kDNSServiceInterfaceIndexAny o impostare InterfaceIndex su kDNSServiceInterfaceIndexP2P. Le API interessate hanno:
    • DNSServiceBrowse
    • DNSServiceRegister
    • DNSServiceResolve
    • DNSServiceRegisterRecord
    • DNSServiceQueryRecord

Dizionario

  • Si verifica un problema noto con i dizionari quando si tenta di definire una parola in una lingua diversa dall'inglese o dal giapponese. Quando viene presentata la libreria di riferimento, all'utente viene presentata la possibilità di scaricare un dizionario: il download potrebbe non iniziare. L'utente può toccare fuori dal popover su un iPad o toccare il pulsante "Fine" su iPhone o iPod touch per ignorare la richiesta di download.

Kit per eventi

  • Richiesta di accesso a calendari o promemoria:
    • Gli utenti possono concedere o negare l'accesso ai dati di eventi e promemoria in base all'app. Per richiedere l'accesso ai dati di eventi e/o promemoria, chiamare il metodo requestAccessToEntityType:completion: di EKEventStore. Ciò non bloccherà l'app mentre all'utente viene chiesto di concedere o negare l'accesso. Finché non viene concesso l'accesso per un tipo di entità, l'archivio eventi non conterrà alcun calendario per quel tipo di entità e qualsiasi tentativo di salvare i dati avrà esito negativo.
    • L'utente verrà avvisato solo la prima volta che verrà richiesto l'accesso; eventuali istanze successive di EKEventStore utilizzeranno le autorizzazioni esistenti. Il gestore di completamento viene chiamato su una coda arbitraria.

Game Center

  • Quando crei un nuovo account Game Center in-app sull'iPad, viene visualizzato il popover per selezionare il mese per la tua data di nascita senza alcun contenuto da selezionare.
  • Il metodo di autenticazione di GKLocalPlayer è stato rimosso. L'autenticazione inizierà automaticamente quando viene impostato il gestore di completamento.

iCloud

  • Quando crei un account iCloud, puoi utilizzare qualsiasi ID Apple basato su email oppure puoi utilizzare il tuo account iCloud esistente. Se avevi un account MobileMe che non hai ancora spostato su iCloud, devi prima spostarlo visitandohttp://me.com. Il passaggio a iCloud è disponibile solo per un periodo limitato. L'accesso a un account MobileMe non è supportato in iOS 6. I profili di provisioning devono essere abilitati per iCloud nel portale di provisioning iOS. Per abilitare un profilo di provisioning per iCloud, vai alla sezione ID app del portale di provisioning iOS e configura il tuo ID app per iCloud. Dopo aver abilitato l'ID app per iCloud, rigenera i tuoi profili di provisioning per abilitarli per iCloud.
    • Gli indirizzi email icloud.com sono ora disponibili per gli utenti di posta iCloud. Gli utenti che si registrano per nuovi ID Apple o abilitano Mail sul proprio account iCloud per la prima volta, riceveranno automaticamente un indirizzo email @icloud.com invece di un indirizzo email me.com. Gli utenti iCloud con indirizzi @me.com utilizzati con iOS 6 beta 3 riceveranno un indirizzo email @icloud.com che corrisponde al loro indirizzo @me.com.
    • Non è possibile inviare l'e-mail di icloud.com www.icloud.com. Gli utenti dovrebbero utilizzare http://beta.icloud.com in questo momento se desiderano inviare e-mail dal proprio indirizzo icloud.com utilizzando un browser web.
  • setSortDescriptors: il metodo di NSMetadataQuery non è supportato.
  • In iOS 6, i file protetti tramite Protezione dati non possono essere utilizzati con le API di archiviazione di iCloud.
  • I nomi dei file non fanno distinzione tra maiuscole e minuscole in OS X ma fanno distinzione tra maiuscole e minuscole in iOS. Ciò può portare a problemi durante la condivisione di file tra le due piattaforme utilizzando iCloud. Dovresti adottare misure su iOS per evitare di creare file i cui nomi differiscono solo per maiuscole e minuscole.
  • Il comportamento delle operazioni di lettura coordinata sui documenti iCloud è cambiato. Nelle versioni precedenti di iOS, quando l'app eseguiva un'operazione di lettura coordinata su un file o un pacchetto e il daemon iCloud rilevava che era disponibile una versione più recente dell'elemento, l'operazione di lettura coordinata veniva bloccata finché non veniva scaricata la versione più recente dell'elemento e scritto sul disco.
    A partire da iOS 6 beta 3, quando si avvia un'operazione di lettura coordinata su un file o pacchetto per il quale si dispone già di una versione locale, la lettura coordinata verrà concessa il prima possibile e la nuova versione, se presente, verrà scaricata in lo sfondo. Questa chiamata verrà bloccata per motivi di download solo se non disponi di alcuna versione del file disponibile localmente.
    Inoltre, quando il file è in conflitto, il demone iCloud non aspetterà finché non avrà a disposizione tutte le parti perdenti del file in conflitto per rendere il file disponibile per la tua app. Renderà disponibili le diverse versioni del file in conflitto non appena possibile. La tua app può utilizzare il coordinamento dei file esistente e il file UIDocumentrichiamate per essere avvisati quando i perdenti del conflitto sono stati scaricati e sono disponibili.

iMessage e FaceTime

  • RISOLTO: i pulsanti Rispondi e Rifiuta mancano quando si ricevono chiamate con orientamento orizzontale.

iTunes

  • iTunes 10.6.3 è richiesto per iOS SDK 6.0.
  • RISOLTO: Durante il ripristino da un backup di iTunes, il dispositivo viene visualizzato in modo intermittente come nuovo dispositivo dopo il riavvio. In tal caso, configura il dispositivo come "nuovo dispositivo" quando ti viene richiesto di eseguire il ripristino per la seconda volta. Tutti i dati dovrebbero essere stati ripristinati correttamente, ma le impostazioni di sincronizzazione, inclusa la disposizione delle app in iTunes, sono andate perse.

Maps

  • In iOS 6 e versioni successive, Map Kit è basato su una nuova infrastruttura ospitata da Apple. Le versioni precedenti di iOS continueranno a utilizzare il servizio di Google. RISOLTO: se Maps non è in esecuzione in background, viene visualizzato un errore "Maps non può connettersi a Internet" quando viene avviato da un'app di terze parti.
    • La compatibilità API verrà mantenuta (vedi i problemi noti di seguito).
    • Le mappe sono ora supportate nel simulatore.
    • I dati cartografici continueranno ad evolversi: attualmente è disponibile solo una quantità limitata di immagini satellitari ad alta risoluzione.
  • RISOLTO: Se Maps non è stato ancora avviato, la posizione corrente non viene visualizzata quando viene avviato da un'app di terze parti.
  • Le app di routing che non specificano un file di copertura durante lo sviluppo verranno sempre visualizzate nei risultati della ricerca di routing di Maps.
  • Il test e il debug dei file di copertura per le app di routing sono supportati solo durante lo sviluppo tramite il flusso di lavoro "Esegui" di Xcode. (È possibile specificare il file di copertura per un determinato schema di esecuzione utilizzando il riquadro Opzioni della sezione Esegui dell'editor dello schema.) Le app archiviate e distribuite (all'esterno dell'App Store) sui dispositivi non avranno accesso ai file di copertura dell'app .
  • Maps non esegue lo zoom sulla posizione corrente quando viene avviato da un'app di terze parti.

edicola

  • Solo i download http semplici funzioneranno con Edicola.

Libretto di risparmio

  • RISOLTO: viene visualizzata l'icona di un aereo tra l'origine e la destinazione per tutti i tipi di trasporto pubblico.
  • Il campo "Descrizione" è ora un campo obbligatorio per un Pass. Tutti i passaggi creati senza di essa non verranno convalidati e non verranno importati.
  • RISOLTO: il database del libretto è stato ripristinato. Dovrai aggiungere nuovamente i tuoi pass.
  • Passbook nel simulatore non richiede più https/ssl quando si utilizza un webServiceURL durante l'acquisizione di un pass.
  • Impossibile mostrare le carte d'imbarco sulla schermata di blocco.

Promemoria

  • RISOLTO: si verificano problemi durante l'aggiunta e la modifica dei promemoria nell'app Promemoria sui dispositivi iPhone:
    • Il pulsante Fine manca quando si aggiunge un nuovo promemoria.
    • L'app si blocca quando tocchi il pulsante Modifica per modificare un promemoria.

Sicurezza

  • In iOS 5, la firma di un certificato con una firma MD5 non è supportata. Assicurati che i certificati utilizzino algoritmi di firma basati su SHA1 o SHA2.
  • In iOS 6 sono stati migliorati i controlli sulla privacy per calendari, promemoria, contatti e foto.
    • Gli utenti vedranno finestre di dialogo di accesso quando un'app tenta di accedere a uno di questi tipi di dati. L'utente può attivare e disattivare l'accesso in Impostazioni > Privacy.
    • Gli sviluppatori possono impostare una stringa "scopo" per ogni classe di dati isolati. iOS mostra questa stringa agli utenti per aiutarli a capire perché vengono richiesti i loro dati. Queste stringhe possono essere aggiunte utilizzando l'editor di progetto di Xcode, nella scheda Informazioni. I relativi nomi delle chiavi iniziano con la stringa "Privacy -".
    • Sono state apportate modifiche ai framework Event Kit e Rubrica indirizzi per aiutare gli sviluppatori con questa funzionalità.

Simulatore

  • Il pannello di avviso di conferma dell'eliminazione dell'app richiede un po' di tempo per essere visualizzato nel simulatore iOS.
  • RISOLTO: toccando il pulsante Acquista nella vista di unSKStoreProductViewController L'oggetto nel simulatore iOS provoca l'arresto anomalo dell'app.
  • Nessun avviso sulla privacy viene visualizzato nel simulatore iOS per le app che accedono a foto, contatti, calendario e promemoria.
  • Il download di contenuti ospitati per acquisti in-app nel simulatore iOS non è supportato.
  • Quando tenti di riprodurre un suono MP3 nel simulatore, sentirai invece uno schiocco.
  • RISOLTO: L'utilizzo dell'SDK di iOS 5.1 con il profilo iPad (Retina) provocherà un arresto anomalo dello SpringBoard. L'SDK di iOS 5.1 funziona con tutti gli altri profili e l'SDK di iPad (Retina) funziona con l'SDK di iOS 6.0.
  • RISOLTO: gli annunci di tipo ADAdTypeMediumRectangle non vengono visualizzati nel simulatore iPad.

Streaming di foto condivise

  • L'utente deve andare su Impostazioni > iCloud per assicurarsi di ricevere le notifiche del flusso di foto condivise.
  • Per condividere uno streaming foto con iOS 6 beta, devi invitare qualcuno utilizzando il suo indirizzo email iCloud, altrimenti non riceverà l'invito.
  • L'aggiornamento da iOS 6 beta 1 a beta 2 farà sì che il tuo dispositivo scarichi nuovamente tutti i tuoi streaming di foto condivise.
  • La funzione Streaming foto condivise è impostata su OFF durante l'aggiornamento da iOS 6 beta 1 a una versione successiva. L'impostazione predefinita dovrebbe essere ON.
  • La disattivazione degli streaming foto condivisi potrebbe lasciare la fotocamera in uno stato che non risponde; forzare la chiusura della fotocamera risolverà questo problema.

Social

  • Weibo viene visualizzato nell'app Impostazioni solo se è abilitata una tastiera cinese.
  • requestAccessToAccountsWithType:withCompletionHandler: Il metodo ACAccountStore è ora deprecato. Per accedere agli account utente, utilizzare ilrequestAccessToAccountsWithType:opzioni:completamento: metodo. Nel parametro opzioni di questo nuovo metodo, passa nil per accedere agli account Twitter e Weibo. Per accedere agli account Facebook, passa un dizionario con le seguenti chiavi (documentate in ACAccountStore.h): non dovresti più aggiungere questo dizionario al file Info.plist della tua app, come richiesto nella beta 1.
    • ACFacebookAppIdKey
    • ACFacebookPermissionsKey
    • ACFacebookPermissionGroupKey

Trampolino

  • RISOLTO: Dopo aver ripristinato un dispositivo in iTunes o eseguito "Cancella tutti i contenuti e le impostazioni", lo sfondo corrente potrebbe non essere visualizzato finché il dispositivo non viene riavviato una volta.

Barra di stato

  • Ora è possibile impostare i parametri della tinta della barra di stato nel file Info.plist della tua app. Potresti farlo per assicurarti che il colore della barra di stato corrisponda al colore della barra di navigazione della tua app durante l'avvio. Per impostare la tinta della barra di stato, aggiungi la chiave UIStatusBarTintParameters al file Info.plist. Il valore di questa chiave è un dizionario con i valori appropriati che descrivono la barra di navigazione della tua app all'avvio. All'interno del dizionario dovrebbe esserci la chiave UINavigationBar, il cui valore è anche un dizionario. Quel dizionario contiene lo stile della barra di navigazione iniziale (con il tasto Stile) e se è traslucida (con il tasto Traslucido). Se la barra di navigazione li utilizza, puoi anche specificarne il colore della tinta (con il tasto TintColor) o il nome della sua immagine di sfondo personalizzata (con il tasto BackgroundImage).

UIKit

    • In iOS 5.1, il UISplitViewController La classe adotta lo stile di presentazione scorrevole quando presenta la vista sinistra (precedentemente vista solo in Mail). Questo stile viene utilizzato quando la presentazione viene avviata dall'elemento del pulsante della barra esistente fornito dai metodi delegati o da un gesto di scorrimento nella visualizzazione destra. Non è necessaria alcuna adozione aggiuntiva di API per ottenere questo comportamento e tutte le API esistenti, inclusa quella dell'istanza UIPopoverController fornita dal delegato, continueranno a funzionare come prima. Se il gesto non fosse supportabile nella tua app, imposta il file presentaConGesture proprietà del controller di visualizzazione divisa su NO disabilita il gesto. Tuttavia, la disabilitazione del gesto è sconsigliata perché il suo utilizzo preserva un'esperienza utente coerente in tutte le app.
    • RISOLTO: In iOS 6 sono state introdotte modifiche in modo che non sia più necessario impostare un delegato e implementare un metodo per i riconoscitori di gesti Single-Finger e Single-Tap, nel tentativo di farli funzionare bene con il Controllo UI oggetti.
    • In iOS 6 e versioni successive, il file UIWebView la classe dipinge i suoi contenuti in modo asincrono.
    • RISOLTO: gli sviluppatori provano il layout automatico con UIScrollViewgli oggetti potrebbero notare delle oscillazioni negli indicatori di scorrimento sui dispositivi con display Retina.
    • La rotazione automatica sta cambiando in iOS 6. In iOS 6, ildovrebbeAutorotareToInterfaceOrientation: il metodo di UIViewController è deprecato. Al suo posto dovresti usare il filesupportatiInterfaceOrientations e metodi ShouldAutorotate RISOLTO: In alcune situazioni, il sistema di layout automatico potrebbe non attivarsi automaticamente per una vista. Per risolvere questo problema, sovrascrivere il file richiedeConstraintBasedLayout class nella tua vista e restituisci SÌ dalla tua implementazione.
      • Maggiore responsabilità viene trasferita all'app e al delegato dell'app. Ora, i contenitori iOS (comeUINvigationController) non consultano i propri figli per determinare se debbano effettuare la rotazione automatica. Per impostazione predefinita, gli orientamenti dell'interfaccia supportati di un'app e di un controller di visualizzazione sono impostati su UIInterfaceOrientationMaskAll per l'idioma iPad eUIInterfaceOrientationMaskAllButUpsideDownper l'idioma dell'iPhone.
      • Gli orientamenti dell'interfaccia supportati da un controller di visualizzazione possono cambiare nel tempo. Anche gli orientamenti dell'interfaccia supportati da un'app possono cambiare nel tempo. Il sistema chiede al controller di visualizzazione a schermo intero più in alto (in genere il controller di visualizzazione root) gli orientamenti dell'interfaccia supportati ogni volta che il dispositivo ruota o ogni volta che un controller di visualizzazione viene presentato con lo stile di presentazione modale a schermo intero. Inoltre, gli orientamenti supportati vengono recuperati solo se questo controller di visualizzazione restituisce SÌ dal suo metodo ShouldAutorotate. Il sistema interseca gli orientamenti supportati del controller di visualizzazione con gli orientamenti supportati dell'app (come determinato dal file Info.plist o dal delegato dell'appapplicazione:supportataInterfaceOrientationsForWindow:metodo) per determinare se ruotare.
      • Il sistema determina se un orientamento è supportato intersecando il valore restituito dall'appsupportatoInterfaceOrientationsForWindow:metodo con il valore restituito dasupportatiInterfaceOrientations metodo del controller a schermo intero più in alto.
      • setStatusBarOrientation:animato:il metodo non è completamente deprecato. Tuttavia ora funziona solo se il filesupportatiInterfaceOrientations Il metodo del controller di visualizzazione a schermo intero più in alto restituisce 0. Ciò affida la responsabilità di garantire che l'orientamento della barra di stato sia coerente nelle mani del chiamante.
      • Per compatibilità, visualizza i controller che implementano ancora ildovrebbeAutorotareToInterfaceOrientation: metodo non ottiene i nuovi comportamenti di autorotazione. (In altre parole, non utilizzano l'app, il delegato dell'app o il file Info.plist per determinare gli orientamenti supportati.) Invece, il metodo ShouldAutorotateToInterfaceOrientation: utilizzato per sintetizzare le informazioni che verrebbero restituite dal metodosupportatiInterfaceOrientations metodo.
    • willRotateToInterfaceOrientation:durata:,willAnimateRotationToInterfaceOrientamento:durata:edidRotateFromInterfaceOrientation: i metodi non vengono più chiamati su alcun controller di visualizzazione che esegue una presentazione a schermo intero su se stesso, ad esempio chiamandopresentViewController:animato:completamento:.In iOS 6, il viewWillUnload ed visualizzaDidScaricare i metodi di UIViewController sono ora deprecati. Se stavi utilizzando questi metodi per rilasciare dati, utilizza il file didReceiveMemoryWarningmetodo invece. È inoltre possibile utilizzare questo metodo per rilasciare i riferimenti alla vista del controller di visualizzazione se non viene utilizzata. Dovresti verificare che la vista non sia in una finestra prima di farlo.
      • Dovresti assicurarti che le tue app non utilizzino questi metodi per gestire il layout di eventuali visualizzazioni secondarie. Invece, dovrebbero usare il controller della vista viewWillLayoutSubviewsmetodo e regolare il layout utilizzando il rettangolo dei limiti della vista.
    • RISOLTO: chiamata a uno qualsiasi dei metodi di disegno delle stringhe con attributi senza specificare un valore per NSFontAttributeName è probabile che l'attributo generi un'eccezione. La soluzione alternativa consiste nell'impostare un valore per la chiave NSFontAttributeName prima di disegnare o ridimensionare un fileStringaAttribuita NS oggetto.
    • Impostazione dei valori per il shadowOffset or shadowColor proprietà di un oggetto UILabel, il cui attribuitoText la proprietà contiene una stringa con attributi valida, non è supportata. Usa ilNSShadowAttributeName attributo della stringa attribuita per impostare invece l'ombra.
    • A causa di problemi di compatibilità, ilNSBaselineOffsetAttributeName l'attributo non è più supportato in iOS 6.
    • NSTextAlignmentNatural il valore non è supportato e genererà un'eccezione se utilizzato con il file textAlignment proprietà di UILabel o fornita come parametro di allineamento aldrawInRect:withFont:lineBreakMode:allineamento: metodo di NSString.
    • Il setContentStretch: metodo di UIView è stato deprecato in questa versione beta. Per ottenere lo stesso effetto, utilizzare il ridimensionabileImageWithCapInsets: metodo di UIImage e visualizzare l'immagine con a UIImageView.
    • ridimensionabileImageWithCapInsets: Il metodo di UIImage ridimensiona efficacemente le immagini affiancandole. Come ottimizzazione delle prestazioni, utilizza l'allungamento anziché l'affiancamento quando l'utente non sarebbe in grado di notare la differenza, come quando viene allungata una singola colonna o riga. Ma in alcune circostanze, potresti voler effettivamente allungare alcune regioni di un'immagine. In iOS 6, il metodo resizableImageWithCapInsets:resizingMode: consente al chiamante di specificare una modalità di ridimensionamento di affiancamento o allungamento.
    • UICollectionViewLayout la classe è cambiata: RISOLTO: in iOS 6, è stato corretto un bug in cui UIWebView.isLoading era impostato su NO prima che il frame principale terminasse il caricamento. Ora UIWebView.isLoading è impostato su NO al termine del caricamento del frame principale.
      • La classe ora supporta la personalizzazione delle animazioni create durante la rotazione. Sono cambiati anche i nomi dei metodi per personalizzare le animazioni di inserimento ed eliminazione in modo che gli stessi hook possano essere utilizzati per le rotazioni così come per gli inserimenti e le eliminazioni.
      • La classe ha cambiato alcuni nomi di metodi. Nello specifico, le viste delle decorazioni non vengono più indicate con l'"identificatore di riutilizzo" ma piuttosto con il "tipo di elemento". Le app che utilizzano visualizzazioni decorative dovranno modificare il proprio codice e ricostruirlo per adattarlo.
    • Il bordo inferiore di a UILabel view è ora diversa dalla sua linea di base. In precedenza, il layout automatico interpretava la parte inferiore di un UILabel come uguale alla sua linea di base. Sebbene sia conveniente in molti casi, causava problemi se si desiderava posizionare il bordo superiore di un'etichetta contro il bordo inferiore di un'altra. In uno scenario del genere, l'etichetta inferiore si sovrapporrebbe a quella superiore e i discendenti dell'etichetta superiore potrebbero scontrarsi con quelli ascendenti dell'etichetta inferiore. Ora, il layout automatico interpreta UILayoutAttributeBottom come la parte inferiore della casella di testo (presupponendo che l'etichetta non sia più grande della dimensione del contenuto intrinseco) e UILayoutAttributeBaseline come linea di base del testo. Se hai già creato il codice per disporre le etichette in base al punto inferiore o centrale, il testo si sposterà leggermente e dovrai modificare i tuoi vincoli.
    • Le app con visualizzazioni tabella nei file nib o storyboard e che sono state create utilizzando versioni precedenti di iOS 6 beta richiederanno una build pulita con beta 3 e successive.
    • Di seguito sono riportate alcune note relative al supporto del layout automatico perUIScrollView:
      • In generale, il layout automatico considera i bordi superiore, sinistro, inferiore e destro di una vista come bordi visibili. Cioè, se blocchi una vista sul bordo sinistro della sua superview, la stai effettivamente bloccando sul valore x minimo dei limiti della superview. La modifica dell'origine dei limiti della superview non modifica la posizione della vista.
      • La classe UIScrollView scorre il suo contenuto modificando l'origine dei suoi limiti. Per far sì che funzioni con il layout automatico, il significato dei bordi superiore, sinistro, inferiore e destro all'interno di una visualizzazione a scorrimento ora significa i bordi della relativa visualizzazione del contenuto.
      • I vincoli sulle sottoviste della vista a scorrimento devono comportare una dimensione da riempire, che viene quindi interpretata come dimensione del contenuto della vista a scorrimento. (Questo non deve essere confuso condimensione del contenuto intrinseco metodo utilizzato per il layout automatico.) Per dimensionare la cornice della vista a scorrimento con il layout automatico, i vincoli devono essere espliciti riguardo alla larghezza e all'altezza della vista a scorrimento oppure i bordi della vista a scorrimento devono essere legati alle viste esterne al suo sottoalbero.
      • Tieni presente che puoi fare in modo che una visualizzazione secondaria della visualizzazione a scorrimento sembri fluttuare (non scorrere) sopra l'altro contenuto scorrevole creando vincoli tra la visualizzazione e una visualizzazione esterna al sottoalbero della visualizzazione a scorrimento, ad esempio la superview della visualizzazione a scorrimento.
      • Ecco alcuni esempi di come configurare la visualizzazione a scorrimento:
        • Approccio misto:
          1. Posiziona e ridimensiona la visualizzazione a scorrimento con vincoli esterni alla visualizzazione a scorrimento, ovvero il filetraduce il ridimensionamento automatico della maschera in vincolila proprietà è impostata su NO.
          2. Crea una pianura UIViewvisualizzazione del contenuto per la visualizzazione a scorrimento che avrà la dimensione che desideri che abbia il tuo contenuto. Rendila una visualizzazione secondaria della vista a scorrimento ma lascia che continui a tradurre la maschera di ridimensionamento automatico in vincoli:
  • UIView *contentView = [[UIView alloc]
  •     initWithFrame:CGRectMake(0,0,contentWidth,contentHeight)];
  • [scrollView addSubview:contentView];
  • // NON modificare le traduzioni di contentViewAutoresizingMaskIntoConstraints,
  • // che per impostazione predefinita è SI;
      1. Imposta la dimensione del contenuto della visualizzazione a scorrimento in modo che corrisponda alla dimensione della visualizzazione del contenuto:
  • [scrollView setContentSize:CGMakeSize(contentWidth,contentHeight)];
      1. Crea le viste che vuoi inserire nella vista del contenuto e configura i loro vincoli in modo da posizionarle all'interno della vista del contenuto. In alternativa, puoi creare un sottoalbero della vista per andare nella vista a scorrimento, impostare i tuoi vincoli e chiamare ilsistemaLayoutDimensioneAdattamentoDimensione:metodo (con ilUILayoutFittingCompressedSizeopzione) per trovare la dimensione che desideri utilizzare per la dimensione della visualizzazione del contenuto e il filecontentSizeproprietà della vista a scorrimento.
    • Approccio al layout automatico puro:
      1. In questo casotraduce il ridimensionamento automatico della maschera in vincolideve essere impostato su NO su tutte le viste coinvolte.
      2. Posiziona e ridimensiona la visualizzazione a scorrimento con vincoli esterni alla visualizzazione a scorrimento.
      3. Utilizzare i vincoli per disporre le sottovisualizzazioni all'interno della visualizzazione a scorrimento, assicurandosi che i vincoli si leghino a tutti e quattro i bordi della visualizzazione a scorrimento e non si basino sulla visualizzazione a scorrimento per ottenere le loro dimensioni. Un semplice esempio potrebbe essere una visualizzazione di immagini di grandi dimensioni, che ha una dimensione di contenuto intrinseca derivata dalla dimensione dell'immagine. NelvisualizzaDidLoadmetodo del tuo controller di visualizzazione, dovresti includere codice come il seguente:
      1. Ciò ti fornirebbe una visualizzazione a scorrimento ridimensionata man mano che viene ridimensionata la visualizzazione del controller di visualizzazione (ad esempio durante la rotazione del dispositivo) e la visualizzazione dell'immagine sarebbe una visualizzazione secondaria a scorrimento. Non è necessario impostare la dimensione del contenuto della visualizzazione a scorrimento.

Safari e WebKit

  • WebKit su iOS ora supporta i metodi requestAnimationFrame e cancelAnimationFrame in JavaScript, come descritto quihttp://www.w3.org/TR/animation-timing/.La quota predefinita della cache dell'app è stata aumentata da 5 MB a 25 MB.
    • Tieni presente che poiché la specifica è ancora allo stato Bozza di lavoro, questi metodi hanno il prefisso webkit, quindi sono window.webkitRequestAnimationFrame, window.webkitCancelAnimationFrame.
  • La soglia di sottocampionamento JPEG è stata aumentata da 2 MP (megapixel) a 5 MP su tutto l'hardware supportato tranne iPhone 3GS e iPod touch (4a generazione).
  • È stato aggiunto il supporto per tag nei moduli web. Gli utenti possono caricare foto e video esistenti dalla propria libreria fotografica o scattare una foto o registrare un video utilizzando la fotocamera. In precedenza questo controllo del modulo era sempre disabilitato.
  • Con Safari 6.0 su OS X, gli sviluppatori possono ora utilizzare Web Inspector (strumento di sviluppo web) con dispositivi iOS collegati e iOS Simulator. Gli sviluppatori possono utilizzare Web Inspector per eseguire il debug di Safari e UIWebView classe nelle proprie app create ed eseguite da Xcode. Questo sostituisce il banner della Console di debug in Safari.
  • In iOS 6 e versioni successive, i dati Web (SQL Web Storage e LocalStorage) da aUIWebView l'oggetto può essere archiviato in una directory di cui verrà eseguito il backup. Per abilitare il backup di questi dati, imposta la chiave WebKitStoreWebDataForBackup su SÌ nelle impostazioni predefinite utente dell'app. Questa operazione dovrebbe essere eseguita solo se la tua app si basa su dati di contenuti Web che non possono essere ricaricati. Se l'oggetto UIWebView apre collegamenti a contenuto Web arbitrario, questa chiave deve essere impostata su NO. La commutazione del valore di questa chiave non conserverà i dati di visualizzazione Web esistenti.
  • In iOS 6 e versioni successive, Safari non si registra più per il feed comune: schema RSS/ATOM. Le app che possono visualizzare questi tipi di feed sono incoraggiate a registrarsi per quello schema URL.
  • WebKit non crea più sempre livelli con accelerazione hardware per gli elementi con l'opzione -webkit-transform: preserve-3d. Gli autori dovrebbero smettere di usare questa opzione come metodo per ottenere l'accelerazione hardware.
  • Il supporto sperimentale di CSS3 Flexbox verrà disabilitato. Passa dall'utilizzo di -webkit-flexbox e -webkit-inline-flexbox a -webkit-box e -webkit-inline-box.
  • A partire da iOS 6, gli URL YouTube incorporati sotto forma di http://www.youtube.com/watch?v=oHg5SJYRHA0 non funzioneranno più. Questi URL servono per visualizzare il video sul sito YouTube, non per incorporarlo nelle pagine web. Invece, il formato da utilizzare è descritto inhttps://developers.google.com/youtube/player_parameters.
  • In iOS 6, la proprietà KeyboardDisplayRequiresUserAction è stata aggiunta alla classe UIWebView. Il valore predefinito della proprietà è YES, il che significa che la chiamata focus() su un elemento del modulo non farà apparire la tastiera. Modificando la proprietà su NO, una chiamata JavaScript a focus() su un elemento del modulo focalizzerà l'elemento e farà apparire automaticamente la tastiera.
  • A partire da iOS 6, la chiamata focus() su un elemento del modulo in un'app Web metterà a fuoco l'elemento.