iOS 6 bêta 3 – voici toutes les nouveautés + journal des modifications (article constamment mis à jour) x14

  Plus d'une heure maintenant Apple a lancé iOS bêta 6 3 pour les développeurs d'applications pour l'App Store et il comprenait une série de changements, la plupart subtils, malheureusement. Dans cet article, nous avons répertorié les actualités les plus importantes, mais aussi le changelog officiel publié par l'entreprise.

1. Un nouveau menu pour l'application Maps, encore une fois dans cet article vous avez les détails.

2. Le système qui vous avertit lorsqu'une application demande l'accès à vos données depuis le carnet d'adresses a été amélioré.

3. De nombreux problèmes rencontrés par l'Apple TV avec l'application Netflix, avec la télécommande, avec les diaporamas ou avec l'application YouTube ont été résolus.

4. Correction du problème où les boutons Accepter/Refuser pour les appels FaceTime n'étaient pas affichés.

5. Sur la tablette iPad, les menus Historique, Liste des favoris et Lecture de Safari sont désormais disponibles dans un seul onglet.

6. La section Confidentialité contient désormais des icônes pour chaque catégorie distincte.

7. Siri est plus difficile à répondre aux questions, mais la voix a été légèrement modifiée par Apple.

8. Les utilisateurs ont la possibilité d'enregistrer des adresses e-mail avec le domaine @icloud.com.

9. Le flux de photos partagé atteint également l'iPhone 3GS et l'iPod Touch.

10. La fonction de courrier électronique VIP atteint également l'iPod Touch.

11. Siri peut ouvrir le menu AssistiveTouch.

12. L'application Mail dispose d'un nouveau bouton pour archiver les emails.

13. L'application Maps fournit des informations sur le trafic dans certains pays.

14. Lorsque vous mettez à jour une application, le bouton Mises à jour de l'App Store vous montrera un indicateur concernant la progression de l'installation de l'application.

 

Remarques et problèmes connus

Les problèmes suivants concernent l’utilisation du SDK iOS 6.0 pour développer du code.

carnet d'adresses

  • Lorsqu'une application est dans un nouvel état de confidentialité et tente de présenter unABNewPersonViewController, l'utilisateur ne peut pas ignorer correctement ce contrôleur de vue même s'il autorise l'accès aux contacts. L'utilisateur doit forcer la fermeture de l'application et la relancer.
  • Demander l'accès aux contacts :
    • Les utilisateurs peuvent accorder ou refuser l'accès aux données de contact pour chaque application. Pour demander l'accès aux données de contact, appelez la fonction ABAddressBookRequestAccessWithCompletion après avoir appelé la ABAddressBookCreateWithOptions fonction. La fonction ABAddressBookRequestAccessWithCompletion ne bloque pas l'application lorsqu'il est demandé à l'utilisateur d'accorder ou de refuser l'accès. Jusqu'à ce que l'accès ait été accordé, le ABAdresseLivreRéfl'objet ne contiendra aucun contact et toute tentative de modification des contacts échoue avec un kABOperationNotPerowedByUserErrorerreur. L'utilisateur est invité uniquement lors de la première demande d'accès ; tous les appels ultérieurs à ABAddressBookCreateWithOptions utiliseront les autorisations existantes. Le gestionnaire d'achèvement est appelé sur une file d'attente arbitraire. Si l'objet ABAddressBookRef est utilisé dans l'ensemble de l'application, toutes les utilisations doivent être réparties dans la même file d'attente pour utiliser ABAddressBookRef de manière sécurisée pour les threads.
  • Vérification de l'état de l'autorisation d'accès :
    • Une application peut utiliser l'API de statut d'autorisation pour vérifier si elle peut accéder aux contacts, aux calendriers, aux rappels ou à la photothèque. Cette API est indépendante de l'API de demande d'accès et n'invitera pas l'utilisateur à accorder ou refuser l'accès. Avec cette API, une application peut ajuster l'affichage de ses éléments d'interface utilisateur qui accéderaient à la classe de données. Par exemple, si l'accès aux contacts est autorisé ou non déterminé, un bouton d'interface utilisateur permettant de sélectionner un contact peut être affiché.
    • Pour Carnet d’adresses, appelez la fonction ABAddressBookGetAuthorizationStatus. Pour Event Kit, appelez la méthode de classe authorisationStatusForEntityType: deEKEventStore. Pour Assets Library, appelez la méthode de classe authorisationStatus de Bibliothèque ALAssets. La signification des valeurs d'état renvoyées est la suivante :
      • Statut d'autorisation non déterminé - L'utilisateur n'a pas encore choisi si cette application peut accéder à la classe de données.
      • Statut d'autorisation restreint – Cette application n'est pas autorisée à accéder à la classe de données. L'utilisateur ne peut pas modifier le statut de cette application, éventuellement en raison de restrictions actives telles que la mise en place du contrôle parental.
      • Statut d'autorisation refusé - L'utilisateur a explicitement refusé l'accès à la classe de données pour cette application.
      • Statut d'autorisation Autorisé – Cette application est autorisée à accéder à la classe de données.

apple TV

  • Dans certains cas, l'écran peut afficher une mauvaise résolution. Redémarrez votre Apple TV pour la remettre à la bonne résolution.
  • CORRIGÉ : les vidéos Netflix peuvent ne pas reprendre là où vous les avez laissées.
  • CORRIGÉ : la liste de l'historique de l'application YouTube est effacée lorsque vous quittez et entrez à nouveau dans l'application.
  • L'Apple TV peut mettre du temps à répondre lorsqu'un téléchargement est en cours en arrière-plan.
  • L'Apple TV peut redémarrer lors de l'utilisation de l'application Remote.
  • L'Apple TV peut redémarrer lors du changement de langue du système.
  • Photo Stream ne se charge pas lors d’une deuxième connexion. Redémarrez l'Apple TV pour résoudre le problème.
  • La musique n'est pas diffusée pendant les diaporamas de photos.
  • Nouveaux comportements :
    • Choisissez des haut-parleurs distants dans Paramètres > AirPlay.
    • Définissez un code à l'écran pour AirPlay dans Paramètres > AirPlay.
    • Enregistrez plusieurs comptes iTunes Store dans Paramètres > iTunes Store.
    • Appuyez et maintenez le bouton Sélectionner pour réorganiser les icônes dans le menu principal.
    • Masquez les icônes du menu principal dans Paramètres > Général > Contrôle parental.

Bonjour

  • La NSNetService La classe et les API CFNetService n'incluent pas d'interfaces P2P par défaut. Pour parcourir, enregistrer ou résoudre des services via des interfaces P2P, une application doit utiliser les API Bonjour DNSService*() indiquées ci-dessous.
  • La définition du paramètre interfaceIndex sur kDNSServiceInterfaceIndexAny dans les API suivantes n'inclura pas les interfaces P2P par défaut. Pour inclure les interfaces P2P, vous devez maintenant définir l'indicateur kDNSServiceFlagsIncludeP2P lors de l'utilisation de kDNSServiceInterfaceIndexAny ou définir interfaceIndex sur kDNSServiceInterfaceIndexP2P. Les API concernées ont :
    • DNSServiceParcourir
    • DNSServiceRegistre
    • DNSServiceResolve
    • DNSServiceRegisterEnregistrement
    • DNSServiceQueryRecord

Dictionnaire

  • Il existe un problème connu avec les dictionnaires lorsque l'on tente de définir un mot dans une langue autre que l'anglais ou le japonais. Lorsque la bibliothèque de référence est présentée, l'utilisateur a la possibilité de télécharger un dictionnaire - ce téléchargement peut ne pas démarrer. L'utilisateur peut appuyer en dehors du popover sur un iPad ou appuyer sur le bouton « Terminé » sur l'iPhone ou l'iPod touch afin de rejeter la demande de téléchargement.

Trousse d'événement

  • Demander l'accès aux calendriers ou aux rappels :
    • Les utilisateurs peuvent accorder ou refuser l'accès aux données d'événements et de rappels pour chaque application. Pour demander l'accès aux données d'événement et/ou de rappel, appelez la méthode requestAccessToEntityType:completion: de EKEventStore. Cela ne bloquera pas l'application pendant que l'utilisateur est invité à accorder ou refuser l'accès. Jusqu'à ce que l'accès soit accordé pour un type d'entité, le magasin d'événements ne contiendra aucun calendrier pour ce type d'entité et toute tentative de sauvegarde des données échouera.
    • L'utilisateur ne sera informé que lors de la première demande d'accès ; toute instanciation ultérieure d’EKEventStore utilisera les autorisations existantes. Le gestionnaire d'achèvement est appelé sur une file d'attente arbitraire.

Game Center

  • Lors de la création d'un nouveau compte Game Center dans l'application sur l'iPad, la fenêtre contextuelle permettant de sélectionner le mois de votre date de naissance apparaît sans contenu à sélectionner.
  • La méthode d'authentification de GKLocalPlayer a été retiré. L'authentification commencera automatiquement lorsque le gestionnaire d'achèvement sera défini.

iCloud

  • Lors de la création d'un compte iCloud, vous pouvez utiliser n'importe quel identifiant Apple basé sur la messagerie électronique ou votre compte iCloud existant. Si vous aviez un compte MobileMe que vous n'avez pas encore déplacé vers iCloud, vous devez d'abord le déplacer en visitanthttp://me.com. Le passage à iCloud n'est disponible que pour une durée limitée. La connexion à un compte MobileMe n'est pas prise en charge dans iOS 6. Les profils de provisionnement doivent être activés pour iCloud dans le portail de provisionnement iOS. Pour activer un profil de provisionnement pour iCloud, accédez à la section App ID du portail de provisionnement iOS et configurez votre App ID pour iCloud. Après avoir activé l'App ID pour iCloud, régénérez vos profils d'approvisionnement pour les activer pour iCloud.
    • Les adresses e-mail icloud.com sont désormais disponibles pour les utilisateurs de messagerie iCloud. Les utilisateurs qui s'inscrivent pour de nouveaux identifiants Apple ou activent Mail sur leur compte iCloud pour la première fois recevront automatiquement une adresse e-mail @icloud.com au lieu d'une adresse e-mail me.com. Les utilisateurs iCloud avec des adresses @me.com utilisées avec iOS 6 bêta 3 recevront une adresse e-mail @icloud.com qui correspond à leur adresse @me.com.
    • L'e-mail icloud.com ne peut pas être envoyé depuis www.icloud.com. Les utilisateurs doivent utiliser http://beta.icloud.com à ce moment s'ils souhaitent envoyer un e-mail à partir de leur adresse icloud.com à l'aide d'un navigateur Web.
  • La setSortDescriptors : La méthode NSMetadataQuery n’est pas prise en charge.
  • Dans iOS 6, les fichiers protégés via la protection des données ne peuvent pas être utilisés avec les API de stockage iCloud.
  • Les noms de fichiers ne sont pas sensibles à la casse sous OS X mais sont sensibles à la casse sous iOS. Cela peut entraîner des problèmes lors du partage de fichiers entre les deux plates-formes à l'aide d'iCloud. Vous devez prendre des mesures sur iOS pour éviter de créer des fichiers dont les noms ne diffèrent que par casse.
  • Le comportement des opérations de lecture coordonnées sur les documents iCloud a changé. Dans les versions iOS précédentes, lorsque votre application effectuait une opération de lecture coordonnée sur un fichier ou un package et que le démon iCloud remarquait qu'une version plus récente de l'élément était disponible, l'opération de lecture coordonnée était bloquée jusqu'à ce que la version la plus récente de l'élément soit téléchargée. et écrit sur le disque.
    À partir d'iOS 6 bêta 3, lorsque vous démarrez une opération de lecture coordonnée sur un fichier ou un package pour lequel vous disposez déjà d'une version locale, la lecture coordonnée sera accordée dès que possible et la nouvelle version, le cas échéant, sera téléchargée dans l'arrière-plan. Cet appel sera bloqué pour des raisons de téléchargement uniquement si vous ne disposez d'aucune version du fichier disponible localement.
    De plus, lorsque le fichier est en conflit, le démon iCloud n'attendra pas d'avoir tous les perdants du conflit disponibles pour rendre le fichier disponible pour votre application. Il rendra disponibles les différentes versions du fichier en conflit dès que possible. Votre application peut utiliser la coordination de fichiers existante et le DocumentUIdes rappels pour être averti lorsque les perdants du conflit ont été téléchargés et sont disponibles.

iMessage et FaceTime

  • CORRIGÉ : les boutons Répondre et Refuser sont manquants lors de la réception d'appels en orientation paysage.

iTunes

  • iTunes 10.6.3 est requis pour le SDK iOS 6.0.
  • CORRIGÉ : lors de la restauration à partir d'une sauvegarde iTunes, l'appareil apparaît par intermittence comme un nouvel appareil après le redémarrage. Si cela se produit, configurez l'appareil en tant que « nouvel appareil » lorsque vous êtes invité à le restaurer pour la deuxième fois. Toutes les données devraient avoir été restaurées correctement, mais les paramètres de synchronisation, y compris la disposition des applications dans iTunes, sont perdus.

Map

  • Dans iOS 6 et versions ultérieures, Map Kit est construit sur une nouvelle infrastructure hébergée par Apple. Les versions iOS antérieures continueront à utiliser le service de Google. CORRIGÉ : Si Maps ne s'exécute pas en arrière-plan, une erreur "Maps ne peut pas se connecter à Internet" s'affiche lorsqu'il est lancé à partir d'une application tierce.
    • La compatibilité des API sera maintenue (voir les problèmes connus ci-dessous).
    • Les cartes sont désormais prises en charge dans le simulateur.
    • Les données cartographiques continueront d’évoluer : seule une quantité limitée d’images satellite à haute résolution est actuellement disponible.
  • CORRIGÉ : si Maps n'a pas encore été lancé, l'emplacement actuel n'apparaît pas lorsqu'il est lancé à partir d'une application tierce.
  • Les applications de routage qui ne spécifient pas de fichier de couverture lors du développement seront toujours affichées dans les résultats de recherche de routage Maps.
  • Le test et le débogage des fichiers de couverture pour les applications de routage ne sont pris en charge que pendant le développement via le workflow Xcode « Exécuter ». (Vous pouvez spécifier le fichier de couverture pour un schéma d'exécution donné à l'aide du volet Options de la section Exécuter de l'éditeur de schéma.) Les applications archivées et distribuées (en dehors de l'App Store) sur les appareils n'auront pas accès aux fichiers de couverture de l'application. .
  • Maps ne zoome pas sur l'emplacement actuel lorsqu'il est lancé à partir d'une application tierce.

Kiosque à journaux

  • Seuls les téléchargements http simples fonctionneront avec Newsstand.

livret bancaire

  • CORRIGÉ : une icône d'avion apparaît entre l'origine et la destination pour tous les types de transit.
  • Le champ « Description » est désormais obligatoire pour un Pass. Tous les laissez-passer créés sans cela ne pourront pas être validés et ne seront pas ingérés.
  • CORRIGÉ : La base de données Passbook a été réinitialisée. Vous devrez à nouveau ajouter vos pass.
  • Le Passbook dans le simulateur ne nécessite plus https/ssl lors de l'utilisation d'une webServiceURL lors de l'ingestion d'un pass.
  • Impossible d'afficher les cartes d'embarquement sur l'écran de verrouillage.

Rappels

  • CORRIGÉ : Il y avait des problèmes lors de l'ajout et de la modification de rappels dans l'application Rappels sur les appareils iPhone :
    • Le bouton Terminé est manquant lors de l’ajout d’un nouveau rappel.
    • L'application se bloque lorsque vous appuyez sur le bouton Modifier pour modifier un rappel.

Sécurité

  • Sous iOS 5, la signature d'un certificat avec une signature MD5 n'est pas prise en charge. Veuillez vous assurer que les certificats utilisent des algorithmes de signature basés sur SHA1 ou SHA2.
  • Dans iOS 6, les contrôles de confidentialité ont été améliorés pour les calendriers, les rappels, les contacts et les photos.
    • Les utilisateurs verront des boîtes de dialogue d'accès lorsqu'une application tentera d'accéder à l'un de ces types de données. L'utilisateur peut activer et désactiver l'accès dans Paramètres > Confidentialité.
    • Les développeurs peuvent définir une chaîne « objectif » pour chaque classe de données isolées. iOS affiche cette chaîne aux utilisateurs pour les aider à comprendre pourquoi leurs données sont demandées. Ces chaînes peuvent être ajoutées à l'aide de l'éditeur de projet de Xcode, dans l'onglet Info. Les noms de clés correspondants commencent par la chaîne "Confidentialité -".
    • Des modifications ont été apportées aux frameworks Event Kit et Address Book pour aider les développeurs avec cette fonctionnalité.

Simulateur

  • Le panneau d'alerte de confirmation de suppression de l'application met un certain temps à s'afficher dans iOS Simulator.
  • CORRIGÉ : appuyer sur le bouton d'achat dans la vue d'unSKStoreProductViewController L'objet dans iOS Simulator provoque le crash de l'application.
  • Aucune alerte de confidentialité n'est affichée dans iOS Simulator pour les applications qui accèdent aux photos, aux contacts, au calendrier et aux rappels.
  • Le téléchargement de contenu hébergé par achat intégré dans iOS Simulator n’est pas pris en charge.
  • Lorsque vous essayez de lire un son MP3 dans le simulateur, vous entendrez à la place un son sec.
  • CORRIGÉ : l'utilisation du SDK iOS 5.1 avec le profil iPad (Retina) entraînerait un crash de SpringBoard. Le SDK iOS 5.1 fonctionne avec tous les autres profils et le SDK iPad (Retina) fonctionne avec le SDK iOS 6.0.
  • CORRIGÉ : les annonces de type ADAdTypeMediumRectangle n'apparaissent pas dans iPad Simulator.

Flux de photos partagé

  • L'utilisateur doit accéder à Paramètres > iCloud pour s'assurer qu'il reçoit les notifications de flux de photos partagé.
  • Pour partager un flux de photos avec iOS 6 bêta, vous devez inviter quelqu'un en utilisant son adresse e-mail iCloud, sinon il ne recevra pas l'invitation.
  • La mise à niveau d'iOS 6 bêta 1 vers la version bêta 2 entraînera le retéléchargement de tous vos flux de photos partagés par votre appareil.
  • La fonctionnalité Flux de photos partagé est désactivée lors de la mise à jour d'iOS 6 bêta 1 vers une version ultérieure. Le paramètre par défaut doit être ON.
  • La désactivation des flux de photos partagés peut laisser l'appareil photo dans un état insensible. La fermeture forcée de l'appareil photo résoudra ce problème.

Réseaux sociaux

  • Weibo apparaît dans l'application Paramètres uniquement si un clavier chinois est activé.
  • La requestAccessToAccountsWithType:withCompletionHandler : La méthode ACAccountStore est désormais obsolète. Pour accéder aux comptes d'utilisateurs, veuillez utiliser lerequestAccessToAccountsWithType:options:achèvement: méthode. Dans le paramètre options de cette nouvelle méthode, passez nil pour accéder aux comptes Twitter et Weibo. Pour accéder aux comptes Facebook, transmettez un dictionnaire avec les clés suivantes (qui sont documentées dans ACAccountStore.h) : Vous ne devez plus ajouter ce dictionnaire au fichier Info.plist de votre application, comme cela était requis dans la version bêta 1.
    • ACFacebookAppIdKey
    • ACFacebookPermissionsKey
    • ACFacebookPermissionGroupKey

Tremplin

  • CORRIGÉ : après avoir restauré un appareil dans iTunes ou effectué une opération "Effacer tous les contenus et paramètres", le fond d'écran actuel peut ne pas apparaître jusqu'à ce que l'appareil soit redémarré une fois.

Barre d'état

  • Il est désormais possible de définir les paramètres de teinte de la barre d'état dans le fichier Info.plist de votre application. Vous pouvez procéder ainsi pour vous assurer que la couleur de la barre d'état correspond à la couleur de la barre de navigation de votre application au démarrage. Pour définir la teinte de la barre d'état, ajoutez la clé UIStatusBarTintParameters à votre fichier Info.plist. La valeur de cette clé est un dictionnaire avec les valeurs appropriées décrivant la barre de navigation de votre application au démarrage. À l'intérieur du dictionnaire doit se trouver la clé UINavigationBar, dont la valeur est également un dictionnaire. Ce dictionnaire contient le style de la barre de navigation initiale (avec la touche Style) et si elle est translucide (avec la touche Translucide). Si votre barre de navigation les utilise, vous pouvez également préciser sa couleur de teinte (avec la touche TintColor), ou le nom de son image de fond personnalisée (avec la touche BackgroundImage).

Uikit

    • Dans iOS 5.1, le UISplitViewController la classe adopte le style de présentation coulissante lors de la présentation de la vue de gauche (auparavant uniquement visible dans Mail). Ce style est utilisé lorsque la présentation est initiée soit par l'élément de bouton de barre existant fourni par les méthodes déléguées, soit par un geste de balayage dans la vue de droite. Aucune adoption d'API supplémentaire n'est requise pour obtenir ce comportement, et toutes les API existantes, y compris celle de l'instance UIPopoverController fournie par le délégué, continueront à fonctionner comme avant. Si le geste n'est pas pris en charge dans votre application, définissez le présenteAvecGesture La propriété de votre contrôleur de vue partagée sur NO désactive le geste. Cependant, la désactivation du geste est déconseillée car son utilisation préserve une expérience utilisateur cohérente dans toutes les applications.
    • CORRIGÉ : Dans iOS 6, des modifications ont été introduites afin que vous n'ayez plus besoin de définir un délégué et d'implémenter une méthode pour les reconnaissances de gestes à un seul doigt et à une seule pression, dans le but de les faire fonctionner correctement avec le Contrôle UI objets.
    • Dans iOS 6 et versions ultérieures, le UIWebView la classe peint son contenu de manière asynchrone.
    • CORRIGÉ : les développeurs essayaient la mise en page automatique avec UIScrollViewles objets peuvent remarquer des tremblements dans les indicateurs de défilement sur les appareils équipés d'écrans Retina.
    • L'autorotation change dans iOS 6. Dans iOS 6, ledevraitAutorotateToInterfaceOrientation : La méthode de UIViewController est obsolète. A sa place, vous devez utiliser leOrientations d'interface prises en charge et méthodes ShouldAutorotate. CORRIGÉ : Dans certaines situations, le système de mise en page automatique pouvait ne pas s'engager automatiquement pour une vue. Pour contourner ce problème, remplacez le nécessiteConstraintBasedLayout méthode de classe à votre avis et renvoie OUI de votre implémentation.
      • Une plus grande responsabilité est transférée à l'application et au délégué de l'application. Désormais, les conteneurs iOS (tels queUINavigationController) ne consultent pas leurs enfants pour déterminer s'ils doivent effectuer une autorotation. Par défaut, les orientations d'interface prises en charge par une application et un contrôleur de vue sont définies sur UIInterfaceOrientationMaskTous pour l'idiome iPad etUIInterfaceOrientationMaskAllButUpsideDownpour l'idiome iPhone.
      • Les orientations d'interface prises en charge par un contrôleur de vue peuvent changer au fil du temps. Même les orientations d'interface prises en charge par une application peuvent changer au fil du temps. Le système demande au contrôleur de vue plein écran le plus haut (généralement le contrôleur de vue racine) les orientations d'interface prises en charge chaque fois que l'appareil tourne ou chaque fois qu'un contrôleur de vue est présenté avec le style de présentation modale plein écran. De plus, les orientations prises en charge ne sont récupérées que si ce contrôleur de vue renvoie OUI à partir de sa méthode ShouldAutorotate. Le système croise les orientations prises en charge par le contrôleur de vue avec les orientations prises en charge par l'application (telles que déterminées par le fichier Info.plist ou par le délégué de l'application).application : orientations d'interface prises en charge pour la fenêtre :méthode) pour déterminer s’il faut effectuer une rotation.
      • Le système détermine si une orientation est prise en charge en croisant la valeur renvoyée par l'application.SupportedInterfaceOrientationsForWindow :méthode avec la valeur renvoyée par leOrientations d'interface prises en charge méthode du contrôleur plein écran le plus haut.
      • La setStatusBarOrientation : animé :la méthode n’est pas complètement obsolète. Cependant, cela ne fonctionne désormais que si leOrientations d'interface prises en charge La méthode du contrôleur d'affichage plein écran le plus haut renvoie 0. Cela met la responsabilité de garantir que l'orientation de la barre d'état est cohérente entre les mains de l'appelant.
      • Pour des raisons de compatibilité, affichez les contrôleurs qui implémentent toujours ledevraitAutorotateToInterfaceOrientation : la méthode n’obtient pas les nouveaux comportements d’autorotation. (En d’autres termes, ils n’utilisent pas l’application, le délégué d’application ou le fichier Info.plist pour déterminer les orientations prises en charge.) Au lieu de cela, la méthode ShouldAutorotateToInterfaceOrientation: utilisée pour synthétiser les informations qui seraient renvoyées par leOrientations d'interface prises en charge méthode.
    • La willRotateToInterfaceOrientation:durée :,willAnimateRotationToInterfaceOrientation:durée :etdidRotateFromInterfaceOrientation : les méthodes ne sont plus appelées sur un contrôleur de vue qui effectue une présentation plein écran sur lui-même, par exemple en appelantpresentViewController:animated:achèvement:.Dans iOS 6, le viewWillUnload ainsi que  vueDidDécharger les méthodes de UIViewController sont désormais obsolètes. Si vous utilisiez ces méthodes pour publier des données, utilisez la didReceiveMemoryWarningméthode à la place. Vous pouvez également utiliser cette méthode pour libérer les références à la vue du contrôleur de vue si elle n'est pas utilisée. Vous devrez tester que la vue n'est pas dans une fenêtre avant de faire cela.
      • Vous devez vous assurer que vos applications n'utilisent pas ces méthodes pour gérer la disposition des sous-vues. Au lieu de cela, ils devraient utiliser le contrôleur de vue viewWillLayoutSubviewset ajustez la mise en page à l’aide du rectangle des limites de la vue.
    • CORRIGÉ : Appel de l'une des méthodes de dessin de chaînes attribuées sans spécifier de valeur pour le NSFontAttributeName L'attribut est susceptible de lever une exception. La solution de contournement consiste à définir une valeur pour la clé NSFontAttributeName avant de dessiner ou de dimensionner unNSAttributedString objet.
    • Définition des valeurs pour le ombreDécalage or couleurombre propriétés d'un objet UILabel, dont texteattribué La propriété contient une chaîne attribuée valide et n'est pas prise en charge. Utilisez leNSShadowAttributeName attribut de la chaîne attribuée pour définir l'ombre à la place.
    • En raison de problèmes de compatibilité, leNSBaselineOffsetAttributeName L'attribut n'est plus pris en charge dans iOS 6.
    • La NSTextAlignmentNatural la valeur n'est pas prise en charge et lèvera une exception lorsqu'elle est utilisée avec le Alignement du texte propriété de UILabel ou fourni comme paramètre d'alignement audrawInRect:withFont:lineBreakMode:alignement: méthode de NSString.
    • La méthode setContentStretch: de UIView est obsolète dans cette version bêta. Pour obtenir le même effet, utilisez le redimensionnableImageWithCapInsets : méthode de UIImage et afficher l’image avec un UIImageView.
    • La redimensionnableImageWithCapInsets : La méthode de UIImage redimensionne efficacement les images en mosaïque. Pour optimiser les performances, il utilise l'étirement plutôt que le carrelage lorsque l'utilisateur ne peut pas faire la différence, comme lorsqu'une seule colonne ou ligne est étirée. Mais dans certaines circonstances, on peut vouloir étirer une partie d’une image. Dans iOS 6, la méthode resizingImageWithCapInsets:resizingMode: permet à l'appelant de spécifier un mode de redimensionnement en mosaïque ou en étirement.
    • La UICollectionViewLayout la classe a changé : CORRIGÉ : Dans iOS 6, un bug a été corrigé où UIWebView.isLoading était défini sur NON avant la fin du chargement du cadre principal. Désormais, UIWebView.isLoading est défini sur NON lorsque le chargement du cadre principal est terminé.
      • La classe prend désormais en charge la personnalisation des animations créées lors de la rotation. Les noms des méthodes de personnalisation des animations d'insertion et de suppression ont également changé afin que les mêmes hooks puissent être utilisés pour les rotations ainsi que pour les insertions et suppressions.
      • La classe a modifié certains noms de méthodes. Plus précisément, les vues de décoration ne sont plus désignées par « identifiant de réutilisation » mais plutôt par « type d'élément ». Les applications qui utilisent des vues décoratives devront modifier leur code et le reconstruire pour s'adapter à cela.
    • Le bord inférieur d'un ÉtiquetteUI La vue est désormais différente de sa ligne de base. Auparavant, la mise en page automatique interprétait le bas d'un UILabel comme étant le même que sa ligne de base. Bien que pratique dans de nombreux cas, cela posait des problèmes si vous souhaitiez placer le bord supérieur d’une étiquette contre le bord inférieur d’une autre. Dans un tel scénario, l'étiquette inférieure chevaucherait celle du haut et les descendants de l'étiquette supérieure pourraient s'écraser sur les ascendants de l'étiquette inférieure. Désormais, la mise en page automatique interprète UILayoutAttributeBottom comme le bas de la zone de texte (en supposant que l'étiquette n'est pas plus grande que la taille intrinsèque de son contenu) et UILayoutAttributeBaseline comme ligne de base du texte. Si vous avez déjà créé du code pour disposer les étiquettes en fonction du point inférieur ou central, votre texte se déplacera un peu et vous devrez ajuster vos contraintes.
    • Les applications avec des vues de tableau dans leurs fichiers nib ou storyboard, et qui ont été créées à l'aide des versions précédentes d'iOS 6 bêta, nécessiteront une version propre avec la version bêta 3 et plus récente.
    • Voici quelques notes concernant la prise en charge de la mise en page automatique pourUIScrollView:
      • En général, la disposition automatique considère les bords supérieur, gauche, inférieur et droit d’une vue comme étant les bords visibles. Autrement dit, si vous épinglez une vue sur le bord gauche de sa vue d'ensemble, vous l'épinglez en réalité à la valeur x minimale des limites de la vue d'ensemble. Changer l'origine des limites de la vue d'ensemble ne modifie pas la position de la vue.
      • La classe UIScrollView fait défiler son contenu en modifiant l'origine de ses limites. Pour que cela fonctionne avec la mise en page automatique, la signification des bords supérieur, gauche, inférieur et droit dans une vue défilante signifie désormais les bords de sa vue de contenu.
      • Les contraintes sur les sous-vues de la vue défilante doivent entraîner une taille à remplir, qui est ensuite interprétée comme la taille du contenu de la vue défilante. (Il ne faut pas confondre cela avec leintrinsèqueContentSize méthode utilisée pour la mise en page automatique.) Pour dimensionner le cadre de la vue de défilement avec la mise en page automatique, les contraintes doivent soit être explicites concernant la largeur et la hauteur de la vue de défilement, soit les bords de la vue de défilement doivent être liés aux vues en dehors de son sous-arborescence.
      • Notez que vous pouvez faire en sorte qu'une sous-vue de la vue défilante semble flotter (et non défiler) sur l'autre contenu défilant en créant des contraintes entre la vue et une vue en dehors du sous-arborescence de la vue défilante, telle que la vue d'ensemble de la vue défilante.
      • Voici quelques exemples de configuration de la vue déroulante :
        • Approche mixte :
          1. Positionnez et dimensionnez votre vue de défilement avec des contraintes externes à la vue de défilement, c'est-à-dire latraduitAutoresizingMaskIntoConstraintsla propriété est définie sur NON.
          2. Créer une plaine UIViewvue du contenu pour votre vue de défilement qui sera la taille que vous souhaitez que votre contenu ait. Faites-en une sous-vue de la vue de défilement mais laissez-la continuer à traduire le masque de redimensionnement automatique en contraintes :
  • UIView *contentView = [[UIView allouer]
  •     initWithFrame:CGRectMake(0,0,contentWidth,contentHeight)];
  • [scrollView addSubview:contentView] ;
  • // NE PAS modifier les translationAutoresizingMaskIntoConstraints de contentView,
  • // qui est par défaut OUI ;
      1. Définissez la taille du contenu de la vue de défilement pour qu'elle corresponde à la taille de la vue du contenu :
  • [scrollView setContentSize:CGMakeSize(contentWidth,contentHeight)];
      1. Créez les vues que vous souhaitez placer dans la vue de contenu et configurez leurs contraintes de manière à les positionner dans la vue de contenu. Vous pouvez également créer un sous-arbre de vue pour accéder à la vue de défilement, définir vos contraintes et appeler l'systemLayoutSizeFittingSize :méthode (avec leUILayoutFittingCompressedSizeoption) pour trouver la taille que vous souhaitez utiliser pour la taille de votre affichage de contenu et lataille du contenupropriété de la vue défilante.
    • Approche de mise en page automatique pure :
      1. Dans ce cas,traduitAutoresizingMaskIntoConstraintsdoit être défini sur NON sur toutes les vues impliquées.
      2. Positionnez et dimensionnez votre vue de défilement avec des contraintes externes à la vue de défilement.
      3. Utilisez des contraintes pour disposer les sous-vues dans la vue de défilement, en vous assurant que les contraintes sont liées aux quatre bords de la vue de défilement et ne dépendent pas de la vue de défilement pour obtenir leur taille. Un exemple simple serait une grande vue d'image, qui a une taille de contenu intrinsèque dérivée de la taille de l’image. Dans levueFaitChargerméthode de votre contrôleur de vue, vous incluriez un code comme celui-ci :
      1. Cela vous donnerait une vue de défilement qui serait redimensionnée à mesure que la vue du contrôleur de vue était redimensionnée (comme lors de la rotation de l'appareil), et la vue de l'image serait une sous-vue de défilement. Vous n'avez pas besoin de définir la taille du contenu de la vue de défilement.

Safari et WebKit

  • WebKit sur iOS prend désormais en charge les méthodes requestAnimationFrame et CancelAnimationFrame en JavaScript, comme décrit icihttp://www.w3.org/TR/animation-timing/.Le quota de cache des applications par défaut a été augmenté de 5 Mo à 25 Mo.
    • Notez que, comme la spécification est toujours à l'état de travail, ces méthodes ont le préfixe webkit, elles sont donc window.webkitRequestAnimationFrame, window.webkitCancelAnimationFrame.
  • Le seuil de sous-échantillonnage JPEG a été augmenté de 2 MP (mégapixels) à 5 MP sur tous les matériels pris en charge, à l'exception de l'iPhone 3GS et de l'iPod touch (4e génération).
  • Un support a été ajouté pour balises dans les formulaires Web. Les utilisateurs peuvent télécharger des photos et des vidéos existantes à partir de leur photothèque ou prendre une photo ou une vidéo à l'aide de l'appareil photo. Auparavant, ce contrôle de formulaire était toujours désactivé.
  • Avec Safari 6.0 sur OS X, les développeurs peuvent désormais utiliser Web Inspector (outil de développement Web) avec les appareils iOS connectés et le simulateur iOS. Les développeurs peuvent utiliser l'inspecteur Web pour déboguer Safari et le UIWebView classe dans leurs propres applications créées et exécutées à partir de Xcode. Cela remplace la bannière de la console de débogage dans Safari.
  • Dans iOS 6 et versions ultérieures, les données Web (SQL Web Storage et LocalStorage) provenant d'unUIWebView L'objet peut être stocké dans un répertoire qui sera sauvegardé. Pour activer la sauvegarde de ces données, définissez la clé WebKitStoreWebDataForBackup sur OUI dans les paramètres utilisateur par défaut de votre application. Cela ne doit être fait que si votre application repose sur des données de contenu Web qui ne peuvent pas être rechargées. Si votre objet UIWebView ouvre des liens vers du contenu Web arbitraire, cette clé doit être définie sur NON. Changer la valeur de cette clé ne conservera pas les données d'affichage Web existantes.
  • Dans iOS 6 et versions ultérieures, Safari ne s'inscrit plus au flux commun : schéma RSS/ATOM. Les applications capables d'afficher ces types de flux sont encouragées à s'inscrire à ce système d'URL.
  • WebKit ne crée plus toujours des couches accélérées par le matériel pour les éléments avec l'option -webkit-transform:preserve-3d. Les auteurs devraient cesser d'utiliser cette option comme moyen d'obtenir une accélération matérielle.
  • La prise en charge expérimentale de CSS3 Flexbox sera désactivée. Veuillez passer de -webkit-flexbox et -webkit-inline-flexbox à -webkit-box et -webkit-inline-box.
  • À partir d'iOS 6, les URL YouTube intégrées sous la forme http://www.youtube.com/watch?v=oHg5SJYRHA0 ne fonctionneront plus. Ces URL servent à visionner la vidéo sur le site YouTube, et non à l'intégrer dans des pages Web. Au lieu de cela, le format à utiliser est décrit danshttps://developers.google.com/youtube/player_parameters.
  • Dans iOS 6, la propriété KeyboardDisplayRequiresUserAction a été ajoutée à la classe UIWebView. La propriété est par défaut OUI, ce qui signifie que l'appel de focus() sur un élément de formulaire n'affichera pas le clavier. En modifiant la propriété sur NO, un appel JavaScript à focus() sur un élément de formulaire focalisera l'élément et affichera automatiquement le clavier.
  • Depuis iOS 6, l'appel de focus() sur un élément de formulaire dans une application Web concentrera l'élément.