iOS 6 beta 3: aquí está todo lo nuevo + registro de cambios (artículo constantemente actualizado) x14

  Más de una hora ahora Apple lanzó iOS beta 6 3 para desarrolladores de aplicaciones para la App Store y en él se incluyen una serie de cambios, la mayoría de ellos sutiles, lamentablemente. En este artículo hemos enumerado las novedades más importantes, pero también el registro de cambios oficial publicado por la empresa.

1. Un nuevo menú para la aplicación Mapas, nuevamente en este artículo tienes los detalles.

2. Se ha mejorado el sistema que te avisa cuando una aplicación solicita acceso a tus datos de la Libreta de Direcciones.

3. Se han solucionado muchos de los problemas que tenía el Apple TV con la aplicación Netflix, con el mando a distancia, con las presentaciones o con la aplicación YouTube.

4. Se solucionó el problema por el cual no se mostraban los botones Aceptar/Rechazar para llamadas FaceTime.

5. En la tableta iPad, los menús Historial, Lista de favoritos y Lectura de Safari ahora están disponibles en una sola pestaña.

6. La sección Privacidad ahora contiene íconos para cada categoría separada.

7. Siri es más difícil de responder preguntas, pero Apple modificó ligeramente la voz.

8. Los usuarios tienen la posibilidad de registrar direcciones de correo electrónico con el dominio @icloud.com.

9. Shared Photo Stream también llega al iPhone 3GS y al iPod Touch.

10. La función de correo electrónico VIP también llega al iPod Touch.

11. Siri puede abrir el menú AssistiveTouch.

12. La aplicación Correo tiene un nuevo botón para archivar correos electrónicos.

13. La aplicación Mapas proporciona información sobre el tráfico en determinados países.

14. Cuando actualizas una aplicación, el botón Actualizaciones en la App Store te mostrará un indicador sobre el progreso de la instalación de la aplicación.

 

Notas y problemas conocidos

Los siguientes problemas se relacionan con el uso de iOS SDK 6.0 para desarrollar código.

Direcciones

  • Cuando una aplicación se encuentra en un nuevo estado de privacidad e intenta presentar unaABNewPersonViewController, el usuario no puede descartar ese controlador de vista correctamente incluso si permite el acceso a los contactos. El usuario debe forzar el cierre de la aplicación y reiniciarla.
  • Solicitando acceso a contactos:
    • Los usuarios pueden otorgar o denegar el acceso a los datos de contacto por aplicación. Para solicitar acceso a los datos de contacto, llame a la función ABAddressBookRequestAccessWithCompletion después de llamar al ABAddressBookCreateWithOptions función. La función ABAddressBookRequestAccessWithCompletion no bloquea la aplicación mientras se le pide al usuario que conceda o niegue el acceso. Hasta que se haya concedido el acceso, el ABAddressBookRefEl objeto no contendrá ningún contacto y cualquier intento de modificar los contactos falla con un kABOperationNotPermittedByUserErrorerror. Al usuario se le solicita acceso sólo la primera vez que se solicita acceso; cualquier llamada posterior a ABAddressBookCreateWithOptions utilizará los permisos existentes. Se llama al controlador de finalización en una cola arbitraria. Si el objeto ABAddressBookRef se usa en toda la aplicación, entonces todo el uso debe enviarse a la misma cola para usar ABAddressBookRef de manera segura para subprocesos.
  • Comprobar el estado de la autorización de acceso:
    • Una aplicación puede utilizar la API de estado de autorización para comprobar si puede acceder a contactos, calendarios, recordatorios o biblioteca de fotografías. Esta API es independiente de la API de solicitud de acceso y no solicitará al usuario que conceda o niegue el acceso. Con esta API, una aplicación puede ajustar la visualización de los elementos de su interfaz de usuario que accederían a la clase de datos. Por ejemplo, si el acceso a los contactos está autorizado o no está determinado, se puede mostrar un botón de interfaz de usuario para elegir un contacto.
    • Para la libreta de direcciones, llame a la función ABAddressBookGetAuthorizationStatus. Para el kit de eventos, llame al método de clase AuthorizationStatusForEntityType: deEKEventStore. Para la biblioteca de activos, llame al método de clase AuthorizationStatus de Biblioteca de activos ALA. El significado de los valores de estado que se devuelven es el siguiente:
      • Estado de autorización no determinado - El usuario aún no ha elegido si esta aplicación puede acceder a la clase de datos.
      • Estado de autorización restringido – Esta aplicación no está autorizada para acceder a la clase de datos. El usuario no puede cambiar el estado de esta aplicación, posiblemente debido a restricciones activas, como controles parentales.
      • Estado de autorización denegado - El usuario negó explícitamente el acceso a la clase de datos de esta aplicación.
      • Estado de autorización Autorizado – Esta aplicación está autorizada para acceder a la clase de datos.

Apple TV

  • En algunos casos, la pantalla puede mostrar una resolución incorrecta. Reinicia tu Apple TV para devolverlo a la resolución correcta.
  • CORREGIDO: Es posible que los vídeos de Netflix no se reanuden donde los dejaste.
  • CORREGIDO: La lista de Historial en la aplicación de YouTube se borra cuando sales y vuelves a ingresar a la aplicación.
  • Es posible que Apple TV tarde en responder mientras se realiza una descarga en segundo plano.
  • Apple TV puede reiniciarse mientras usa la aplicación Remote.
  • Apple TV puede reiniciarse al cambiar el idioma del sistema.
  • Photo Stream no se carga al iniciar sesión por segunda vez. Reinicie Apple TV para resolverlo.
  • La música no se reproduce durante las presentaciones de fotos.
  • Nuevos comportamientos:
    • Elija altavoces remotos en Configuración > AirPlay.
    • Establezca un código en pantalla para AirPlay en Configuración > AirPlay.
    • Guarde varias cuentas de iTunes Store en Configuración > iTunes Store.
    • Mantenga presionado el botón Seleccionar para reorganizar los íconos en el menú principal.
    • Oculte los iconos del menú principal en Configuración > General > Controles parentales.

¡Hola

  • El  Servicio NSNet Las API class y CFNetService no incluyen interfaces P2P de forma predeterminada. Para explorar, registrar o resolver servicios a través de interfaces P2P, una aplicación debe utilizar las API Bonjour DNSService*() que se indican a continuación.
  • Configurar el parámetro interfaceIndex en kDNSServiceInterfaceIndexAny en las siguientes API no incluirá interfaces P2P de forma predeterminada. Para incluir interfaces P2P, ahora debe configurar el indicador kDNSServiceFlagsIncludeP2P cuando utilice kDNSServiceInterfaceIndexAny o configurar interfaceIndex en kDNSServiceInterfaceIndexP2P. Las API afectadas tienen:
    • DNSServicioNavegación
    • Registro de servicio DNS
    • DNSServiceResolver
    • Registro de servicio DNS
    • Registro de consulta de servicio DNS

Diccionario

  • Existe un problema conocido con los diccionarios al intentar definir una palabra en cualquier idioma que no sea inglés o japonés. Cuando se presenta la biblioteca de referencia, al usuario se le presenta la opción de descargar un diccionario; es posible que esa descarga no comience. El usuario puede tocar fuera de la ventana emergente en un iPad o tocar el botón "Listo" en el iPhone o iPod touch para descartar la solicitud de descarga.

Kit de evento

  • Solicitar acceso a calendarios o recordatorios:
    • Los usuarios pueden otorgar o denegar el acceso a datos de eventos y recordatorios por aplicación. Para solicitar acceso a datos de eventos y/o recordatorios, llame al método requestAccessToEntityType:completion: de EKEventStore. Esto no bloqueará la aplicación mientras se le pide al usuario que conceda o niegue el acceso. Hasta que se haya concedido acceso a un tipo de entidad, el almacén de eventos no contendrá ningún calendario para ese tipo de entidad y cualquier intento de guardar datos fallará.
    • Al usuario sólo se le solicitará el acceso la primera vez que solicite acceso; cualquier instancia posterior de EKEventStore utilizará los permisos existentes. Se llama al controlador de finalización en una cola arbitraria.

Game Center

  • Al crear una nueva cuenta de Game Center en la aplicación en el iPad, aparece la ventana emergente para seleccionar el mes de su fecha de nacimiento sin contenido para seleccionar.
  • El método de autenticación de GKLocalPlayer ha sido removido. La autenticación comenzará automáticamente cuando se configure el controlador de finalización.

iCloud

  • Al crear una cuenta de iCloud, puede utilizar cualquier ID de Apple basada en correo electrónico o puede utilizar su cuenta de iCloud existente. Si tenía una cuenta de MobileMe que aún no ha movido a iCloud, primero debe moverla visitandohttp://me.com. Pasar a iCloud solo está disponible por tiempo limitado. No se admite el inicio de sesión en una cuenta MobileMe en iOS 6. Los perfiles de aprovisionamiento deben estar habilitados para iCloud en el Portal de aprovisionamiento de iOS. Para habilitar un perfil de aprovisionamiento para iCloud, navegue hasta la sección ID de aplicación del Portal de aprovisionamiento de iOS y configure su ID de aplicación para iCloud. Después de habilitar la ID de la aplicación para iCloud, vuelva a generar sus perfiles de aprovisionamiento para habilitarlos para iCloud.
    • Las direcciones de correo electrónico de icloud.com ahora están disponibles para los usuarios de correo de iCloud. Los usuarios que se registren para obtener nuevas ID de Apple o habiliten Mail en su cuenta de iCloud por primera vez recibirán automáticamente una dirección de correo electrónico @icloud.com en lugar de una dirección de correo electrónico me.com. Los usuarios de iCloud con direcciones @me.com que se hayan utilizado con iOS 6 beta 3 recibirán una dirección de correo electrónico @icloud.com que coincida con su dirección @me.com.
    • El correo electrónico de iCloud.com no se puede enviar desde www.icloud.com. Los usuarios deben utilizar http://beta.icloud.com en este momento si desean enviar correos electrónicos desde su dirección icloud.com utilizando un navegador web.
  • El  establecerOrdenarDescriptores: El método de NSMetadataQuery no es compatible.
  • En iOS 6, los archivos protegidos mediante Protección de datos no se pueden utilizar con las API de almacenamiento de iCloud.
  • Los nombres de archivos no distinguen entre mayúsculas y minúsculas en OS X, pero sí en iOS. Esto puede generar problemas al compartir archivos entre las dos plataformas usando iCloud. Debes tomar medidas en iOS para evitar crear archivos cuyos nombres difieran sólo en mayúsculas y minúsculas.
  • El comportamiento de las operaciones de lectura coordinada en documentos de iCloud ha cambiado. En versiones anteriores de iOS, cuando su aplicación realizaba una operación de lectura coordinada en un archivo o paquete y el demonio de iCloud notaba que había una versión más nueva del elemento disponible, la operación de lectura coordinada se bloqueaba hasta que se descargaba la versión más nueva del elemento. y escrito en el disco.
    A partir de iOS 6 beta 3, cuando inicia una operación de lectura coordinada en un archivo o paquete para el cual ya tiene una versión local, la lectura coordinada se otorgará lo antes posible y la nueva versión, si corresponde, se descargará en el fondo. Esta llamada se bloqueará por motivos de descarga solo si no tiene ninguna versión del archivo disponible localmente.
    Además, cuando el archivo está en conflicto, el demonio de iCloud no esperará hasta tener todos los perdedores del conflicto disponibles para que el archivo esté disponible para su aplicación. Hará que las diferentes versiones del archivo en conflicto estén disponibles tan pronto como sea posible. Su aplicación puede utilizar la coordinación de archivos existente y la UIDocumentodevoluciones de llamada para recibir notificaciones cuando los perdedores del conflicto se hayan descargado y estén disponibles.

iMessage y FaceTime

  • CORREGIDO: Faltan los botones Responder y Rechazar al recibir llamadas en orientación horizontal.

iTunes

  • Se requiere iTunes 10.6.3 para iOS SDK 6.0.
  • CORREGIDO: Al restaurar desde una copia de seguridad de iTunes, el dispositivo aparece intermitentemente como un dispositivo nuevo después de reiniciar. Si eso sucede, configure el dispositivo como un "dispositivo nuevo" cuando se le solicite restaurarlo por segunda vez. Todos los datos deberían haberse restaurado correctamente, pero se pierden las configuraciones de sincronización, incluida la disposición de las aplicaciones en iTunes.

Mapas

  • En iOS 6 y posteriores, Map Kit se basa en una nueva infraestructura alojada por Apple. Las versiones anteriores de iOS seguirán utilizando el servicio de Google. CORREGIDO: si Maps no se ejecuta en segundo plano, se muestra el error "Maps no se puede conectar a Internet" cuando se inicia desde una aplicación de terceros.
    • Se mantendrá la compatibilidad de API (consulte los problemas conocidos a continuación).
    • Los mapas ahora son compatibles con el Simulador.
    • Los datos cartográficos seguirán evolucionando; actualmente sólo está disponible una cantidad limitada de imágenes satelitales de alta resolución.
  • CORREGIDO: si Maps aún no se ha iniciado, la ubicación actual no aparece cuando se inicia desde una aplicación de terceros.
  • Las aplicaciones de rutas que no especifican un archivo de cobertura durante el desarrollo siempre se mostrarán en los resultados de búsqueda de rutas de Maps.
  • Las pruebas y depuración de archivos de cobertura para aplicaciones de enrutamiento solo se admiten durante el desarrollo a través del flujo de trabajo "Ejecutar" de Xcode. (Puede especificar el archivo de cobertura para un esquema de ejecución determinado usando el panel Opciones de la sección Ejecutar del editor de esquemas). Las aplicaciones que se archivan y distribuyen (fuera de la App Store) en dispositivos no tendrán acceso a los archivos de cobertura de la aplicación. .
  • Maps no amplía la ubicación actual cuando se inicia desde una aplicación de terceros.

Puesto de periódicos

  • Sólo las descargas http simples funcionarán con Kiosco.

Libreta de depósitos

  • CORREGIDO: aparece un ícono de avión entre el origen y el destino para todos los tipos de tránsito.
  • El campo "Descripción" ahora es un campo obligatorio para un Pase. Todos los pases creados sin él no se validarán y no se ingerirán.
  • CORREGIDO: La base de datos de Passbook se ha restablecido. Deberá agregar sus pases nuevamente.
  • Passbook en el simulador ya no requiere https/ssl cuando se utiliza una URL de servicio web al procesar un pase.
  • No se pueden mostrar las tarjetas de embarque en la pantalla de bloqueo.

Recordatorios

  • CORREGIDO: Hay problemas al agregar y editar recordatorios en la aplicación Recordatorios en dispositivos iPhone:
    • Falta el botón Listo al agregar un nuevo recordatorio.
    • La aplicación falla cuando tocas el botón Editar para editar un recordatorio.

Seguridad

  • En iOS 5, no se admite la firma de un certificado con una firma MD5. Asegúrese de que los certificados utilicen algoritmos de firma basados ​​en SHA1 o SHA2.
  • En iOS 6, hay controles de privacidad mejorados para Calendarios, Recordatorios, Contactos y Fotos.
    • Los usuarios verán cuadros de diálogo de acceso cuando una aplicación intente acceder a cualquiera de esos tipos de datos. El usuario puede activar y desactivar el acceso en Configuración > Privacidad.
    • Los desarrolladores pueden establecer una cadena de "propósito" para cada clase de datos aislados. iOS muestra esta cadena a los usuarios para ayudarlos a comprender por qué se solicitan sus datos. Estas cadenas se pueden agregar usando el editor de proyectos de Xcode, en la pestaña Información. Los nombres de clave relevantes comienzan con la cadena "Privacidad -".
    • Hay cambios en los marcos del kit de eventos y la libreta de direcciones para ayudar a los desarrolladores con esta función.

Simulador

  • El panel de alerta de confirmación de eliminación de la aplicación tarda un poco en aparecer en el Simulador de iOS.
  • CORREGIDO: Al tocar el botón comprar en la vista de unSKStoreProductViewController El objeto en iOS Simulator hace que la aplicación falle.
  • No se muestran alertas de privacidad en iOS Simulator para las aplicaciones que acceden a Fotos, Contactos, Calendario y Recordatorios.
  • No se admite la descarga de contenido alojado en compras desde la aplicación en iOS Simulator.
  • Al intentar reproducir un sonido MP3 en el Simulador, escuchará un sonido de estallido.
  • CORREGIDO: El uso del SDK de iOS 5.1 con el perfil de iPad (Retina) provocaría un bloqueo del SpringBoard. El SDK de iOS 5.1 funciona con todos los demás perfiles y el SDK de iPad (Retina) funciona con el SDK de iOS 6.0.
  • CORREGIDO: Los anuncios de tipo ADAdTypeMediumRectangle no aparecen en iPad Simulator.

Secuencia de fotos compartida

  • El usuario debe ir a Configuración > iCloud para asegurarse de recibir notificaciones de secuencias de fotos compartidas.
  • Para compartir una secuencia de fotos con iOS 6 beta, debes invitar a alguien usando su dirección de correo electrónico de iCloud o no recibirá la invitación.
  • La actualización de iOS 6 beta 1 a beta 2 hará que su dispositivo vuelva a descargar todas sus secuencias de fotos compartidas.
  • La función Shared Photo Stream está desactivada cuando se actualiza desde iOS 6 beta 1 a una versión posterior. La configuración predeterminada debe estar activada.
  • Desactivar las secuencias de fotos compartidas puede dejar la cámara sin responder; forzar el cierre de la cámara resolverá este problema.

Social

  • Weibo aparece en la aplicación Configuración solo si está habilitado un teclado chino.
  • El  requestAccessToAccountsWithType:withCompletionHandler: El método de ACAccountStore ahora está en desuso. Para acceder a las cuentas de usuario, utilice elrequestAccessToAccountsWithType:opciones:finalización: método. En el parámetro de opciones de este nuevo método, pase nil para acceder a las cuentas de Twitter y Weibo. Para acceder a las cuentas de Facebook, pase un diccionario con las siguientes claves (que están documentadas en ACAccountStore.h): Ya no debe agregar este diccionario al archivo Info.plist de su aplicación, como se requería en la versión beta 1.
    • ACFacebookAppIdClave
    • ACFacebookPermisosClave
    • Clave de grupo de permisos de ACFacebook

Trampolín

  • CORREGIDO: Después de restaurar un dispositivo en iTunes o realizar "Borrar todos los contenidos y configuraciones", es posible que el fondo de pantalla actual no aparezca hasta que el dispositivo se reinicie una vez.

Status Bar

  • Ahora es posible configurar los parámetros de tono de la barra de estado en el archivo Info.plist de su aplicación. Puede hacer esto para asegurarse de que el color de la barra de estado coincida con el color de la barra de navegación de su aplicación durante el inicio. Para configurar el tono de la barra de estado, agregue la clave UIStatusBarTintParameters a su archivo Info.plist. El valor de esta clave es un diccionario con los valores apropiados que describen la barra de navegación que tiene su aplicación en el momento del inicio. Dentro del diccionario debe estar la clave UINavigationBar, cuyo valor también es un diccionario. Ese diccionario contiene el estilo de la barra de navegación inicial (con la tecla Estilo) y si es translúcida (con la tecla Translúcida). Si su barra de navegación los usa, también puede especificar su color de tinte (con la tecla TintColor) o el nombre de su imagen de fondo personalizada (con la tecla BackgroundImage).

kit de interfaz de usuario

    • En iOS 5.1, el UISplitViewControllerUISplitViewController La clase adopta el estilo de presentación deslizante cuando presenta la vista izquierda (anteriormente solo se veía en Mail). Este estilo se utiliza cuando la presentación se inicia mediante el elemento del botón de la barra existente proporcionado por los métodos delegados o mediante un gesto de deslizar el dedo dentro de la vista derecha. No se requiere una adopción de API adicional para obtener este comportamiento y todas las API existentes, incluida la de la instancia de UIPopoverController proporcionada por el delegado, seguirán funcionando como antes. Si el gesto no es compatible con su aplicación, configure el presenta con gesto propiedad de su controlador de vista dividida en NO deshabilita el gesto. Sin embargo, no se recomienda desactivar el gesto porque su uso preserva una experiencia de usuario consistente en todas las aplicaciones.
    • CORREGIDO: En iOS 6, se han introducido cambios para que ya no sea necesario configurar un delegado e implementar un método para los reconocedores de gestos de un solo dedo y de un solo toque, en un esfuerzo por hacer que funcionen bien con el Control de interfaz de usuario objetos.
    • En iOS 6 y posteriores, el IUWebView La clase pinta su contenido de forma asincrónica.
    • CORREGIDO: los desarrolladores prueban el diseño automático con UIScrollViewLos objetos pueden notar fluctuaciones en los indicadores de desplazamiento en dispositivos con pantallas Retina.
    • La rotación automática está cambiando en iOS 6. En iOS 6, eldebe autorrotar a la orientación de la interfaz: El método de UIViewController está en desuso. En su lugar, debes utilizar elOrientaciones de interfaz admitidas y métodos de rotación automática CORREGIDO: en determinadas situaciones, es posible que el sistema de diseño automático no se active automáticamente para una vista. Para solucionar este problema, anule el requiere diseño basado en restricciones método de clase en su vista y devolver SÍ desde su implementación.
      • Se está trasladando más responsabilidad a la aplicación y al delegado de la aplicación. Ahora, los contenedores de iOS (comoControlador de navegación UI) no consultan a sus hijos para determinar si deben autorrotar. De forma predeterminada, las orientaciones de interfaz compatibles con una aplicación y un controlador de vista se establecen en UIInterfazOrientaciónMáscaraTodos para el idioma del iPad yUIInterfazOrientaciónMáscaraTodosperoal revéspara el idioma del iPhone.
      • Las orientaciones de interfaz admitidas de un controlador de vista pueden cambiar con el tiempo. Incluso las orientaciones de la interfaz admitidas por una aplicación pueden cambiar con el tiempo. El sistema solicita al controlador de vista de pantalla completa superior (normalmente el controlador de vista raíz) sus orientaciones de interfaz admitidas cada vez que el dispositivo gira o cada vez que se presenta un controlador de vista con el estilo de presentación modal de pantalla completa. Además, las orientaciones admitidas se recuperan solo si este controlador de vista devuelve SÍ desde su método shouldAutorotate. El sistema intersecta las orientaciones admitidas del controlador de vista con las orientaciones admitidas de la aplicación (según lo determinado por el archivo Info.plist o el delegado de la aplicación).aplicación: interfaz compatible Orientaciones para ventana:método) para determinar si rotar.
      • El sistema determina si una orientación es compatible al cruzar el valor devuelto por el valor de la aplicación.Orientaciones de interfaz admitidas para la ventana:método con el valor devuelto por elOrientaciones de interfaz admitidas método del controlador de pantalla completa superior.
      • El  setStatusBarOrientation: animado:El método no está completamente obsoleto. Sin embargo, ahora sólo funciona si elOrientaciones de interfaz admitidas El método del controlador de vista de pantalla completa superior devuelve 0. Esto pone en manos de la persona que llama la responsabilidad de garantizar que la orientación de la barra de estado sea consistente.
      • Por compatibilidad, vea los controladores que aún implementan eldebe autorrotar a la orientación de la interfaz: El método no obtiene los nuevos comportamientos de autorrotación. (En otras palabras, no recurren al uso de la aplicación, el delegado de la aplicación o el archivo Info.plist para determinar las orientaciones admitidas). En su lugar, el método deberíaAutorotateToInterfaceOrientation: utilizado para sintetizar la información que devolvería elOrientaciones de interfaz admitidas método.
    • El  willRotateToInterfaceOrientation: duración:,willAnimateRotationToInterfaceOrientation: duración:yhizoRotarDesdeInterfazOrientación: Los métodos ya no se llaman en ningún controlador de vista que haga una presentación de pantalla completa sobre sí mismo, por ejemplo, llamandopresentViewController: animado: finalización:.En iOS 6, el verDescargar y verDidDescargar Los métodos de UIViewController ahora están en desuso. Si estaba utilizando estos métodos para liberar datos, utilice el RecibióMemoriaAdvertenciamétodo en su lugar. También puede utilizar este método para liberar referencias a la vista del controlador de vista si no se está utilizando. Deberías comprobar que la vista no esté en una ventana antes de hacer esto.
      • Debe asegurarse de que sus aplicaciones no utilicen estos métodos para administrar el diseño de las subvistas. En su lugar, deberían usar el controlador de vista verWillLayoutSubvistasy ajuste el diseño utilizando el rectángulo de límites de la vista.
    • CORREGIDO: Llamar a cualquiera de los métodos de dibujo de cadenas con atributos sin especificar un valor para el NSFontAttributeName Es probable que el atributo genere una excepción. La solución es establecer un valor para la clave NSFontAttributeName antes de dibujar o dimensionar unNSAttributedString objeto.
    • Configuración de valores para el compensación de sombra or sombraColor propiedades de un objeto UILabel, cuyo atributoTexto La propiedad contiene una cadena de atributos válida y no se admite. Utilizar elNSShadowAttributeName atributo de la cadena atribuida para establecer la sombra en su lugar.
    • Debido a problemas de compatibilidad, elNSBaselineOffsetAttributeName El atributo ya no es compatible con iOS 6.
    • El  NSTextAlignmentNatural El valor no es compatible y generará una excepción cuando se use con el alineación del texto propiedad de UILabel o proporcionada como parámetro de alineación aldrawInRect:withFont:lineBreakMode:alineación: método de NSString.
    • El método setContentStretch: de Vista de interfaz de usuario ha quedado obsoleto en esta versión beta. Para lograr el mismo efecto, utilice el redimensionableImageWithCapInsets: método de UIImage y mostrar la imagen con un UIImageView.
    • El  redimensionableImageWithCapInsets: El método de UIImage cambia efectivamente el tamaño de las imágenes mediante mosaico. Como optimización del rendimiento, utiliza la ampliación en lugar del mosaico cuando el usuario no podría notar la diferencia, como cuando se amplía una sola columna o fila. Pero en determinadas circunstancias, es posible que uno quiera estirar alguna región de una imagen. En iOS 6, el método resizableImageWithCapInsets:resizingMode: permite a la persona que llama especificar un modo de cambio de tamaño de mosaico o extensión.
    • El  UICollectionViewDiseño la clase ha cambiado: CORREGIDO: en iOS 6, se solucionó un error por el cual UIWebView.isLoading se establecía en NO antes de que el marco principal terminara de cargarse. Ahora, UIWebView.isLoading se establece en NO cuando el marco principal termina de cargarse.
      • La clase ahora admite la personalización de las animaciones creadas durante la rotación. Los nombres de los métodos para personalizar animaciones de inserción y eliminación también han cambiado para que se puedan usar los mismos ganchos para rotaciones, así como para inserciones y eliminaciones.
      • La clase ha cambiado algunos nombres de métodos. Específicamente, las vistas de decoración ya no se denominan "identificador de reutilización" sino más bien "tipo de elemento". Las aplicaciones que utilizan vistas decorativas deberán modificar su código y reconstruirlo para adaptarse a esto.
    • El borde inferior de un Etiqueta de interfaz de usuario La vista ahora es diferente de su línea base. Anteriormente, el diseño automático interpretaba que la parte inferior de una UILabel era la misma que su línea base. Si bien era conveniente en muchos casos, causaba problemas si quería colocar el borde superior de una etiqueta contra el borde inferior de otra. En tal escenario, la etiqueta inferior se superpondría a la superior y los descendientes de la etiqueta superior podrían chocar con los ascendentes de la etiqueta inferior. Ahora, el diseño automático interpreta UILayoutAttributeBottom como la parte inferior del cuadro de texto (suponiendo que la etiqueta no sea mayor que el tamaño de su contenido intrínseco) y UILayoutAttributeBaseline como la línea base del texto. Si ya ha creado código para diseñar etiquetas según el punto inferior o central, su texto se moverá un poco y deberá ajustar sus restricciones.
    • Las aplicaciones con vistas de tabla en sus archivos nib o storyboard, y que se crearon con versiones anteriores de iOS 6 beta, requerirán una compilación limpia con beta 3 y posteriores.
    • Aquí hay algunas notas sobre la compatibilidad con el diseño automático paraUIScrollView:
      • En general, el diseño automático considera que los bordes superior, izquierdo, inferior y derecho de una vista son los bordes visibles. Es decir, si fija una vista en el borde izquierdo de su supervista, en realidad la está fijando al valor x mínimo de los límites de la supervista. Cambiar el origen de los límites de la supervisión no cambia la posición de la vista.
      • La clase UIScrollView desplaza su contenido cambiando el origen de sus límites. Para que esto funcione con el diseño automático, el significado de los bordes superior, izquierdo, inferior y derecho dentro de una vista de desplazamiento ahora significa los bordes de su vista de contenido.
      • Las restricciones en las subvistas de la vista de desplazamiento deben dar como resultado un tamaño para llenar, que luego se interpreta como el tamaño del contenido de la vista de desplazamiento. (Esto no debe confundirse con elintrinsecoContentSize método utilizado para el diseño automático.) Para dimensionar el marco de la vista de desplazamiento con diseño automático, las restricciones deben ser explícitas con respecto al ancho y alto de la vista de desplazamiento o los bordes de la vista de desplazamiento deben estar vinculados a vistas fuera de su subárbol.
      • Tenga en cuenta que puede hacer que una subvista de la vista de desplazamiento parezca flotar (no desplazarse) sobre el otro contenido de desplazamiento creando restricciones entre la vista y una vista fuera del subárbol de la vista de desplazamiento, como la supervista de la vista de desplazamiento.
      • A continuación se muestran algunos ejemplos de cómo configurar la vista de desplazamiento:
        • Enfoque mixto:
          1. Coloque y ajuste el tamaño de su vista de desplazamiento con restricciones externas a la vista de desplazamiento, es decir, eltraduceAutoresizingMaskIntoConstraintsLa propiedad está establecida en NO.
          2. crear una llanura Vista de interfaz de usuariovista de contenido para su vista de desplazamiento que será el tamaño que desea que tenga su contenido. Conviértalo en una subvista de la vista de desplazamiento pero déjelo continuar traduciendo la máscara de tamaño automático en restricciones:
  • UIView *contentView = [[asignación de UIView]
  •     initWithFrame:CGRectMake(0,0,contentWidth,contentHeight)];
  • [scrollView addSubview:contentView];
  • // NO cambies los traductoresAutoresizingMaskIntoConstraints de contentView,
  • // que por defecto es SÍ;
      1. Establezca el tamaño del contenido de la vista de desplazamiento para que coincida con el tamaño de la vista de contenido:
  • [scrollView setContentSize:CGMakeSize(contentWidth,contentHeight)];
      1. Cree las vistas que desea colocar dentro de la vista de contenido y configure sus restricciones para ubicarlas dentro de la vista de contenido. Alternativamente, puede crear un subárbol de vista para ir a la vista de desplazamiento, configurar sus restricciones y llamar alsystemLayoutSizeFittingSize:método (con elUILayoutFittingCompressedSizeopción) para encontrar el tamaño que desea utilizar para el tamaño de la vista de contenido y eltamaño del contenidopropiedad de la vista de desplazamiento.
    • Enfoque de diseño automático puro:
      1. En este casotraduceAutoresizingMaskIntoConstraintsdebe establecerse en NO en todas las vistas involucradas.
      2. Coloque y dimensione su vista de desplazamiento con restricciones externas a la vista de desplazamiento.
      3. Utilice restricciones para diseñar las subvistas dentro de la vista de desplazamiento, asegurándose de que las restricciones se vinculen a los cuatro bordes de la vista de desplazamiento y no dependan de la vista de desplazamiento para obtener su tamaño. Un ejemplo simple sería una vista de imagen grande, que tiene un tamaño de contenido intrínseco derivado del tamaño de la imagen. En elverDidLoadmétodo de su controlador de vista, incluiría código como el siguiente:
      1. Esto le daría una vista de desplazamiento que cambia de tamaño a medida que cambia el tamaño de la vista del controlador de vista (como al girar el dispositivo), y la vista de imagen sería una subvista de desplazamiento. No es necesario establecer el tamaño del contenido de la vista de desplazamiento.

Safari y WebKit

  • WebKit en iOS ahora admite los métodos requestAnimationFrame y cancelAnimationFrame en JavaScript, como se describe aquíhttp://www.w3.org/TR/animation-timing/La cuota de caché de aplicaciones predeterminada se ha incrementado de 5 MB a 25 MB.
    • Tenga en cuenta que debido a que la especificación aún se encuentra en el estado Borrador de trabajo, estos métodos tienen el prefijo webkit, por lo que son window.webkitRequestAnimationFrame, window.webkitCancelAnimationFrame.
  • El umbral de submuestreo JPEG se incrementó de 2 MP (megapíxeles) a 5 MP en todo el hardware compatible excepto en el iPhone 3GS y el iPod touch (cuarta generación).
  • Se ha agregado soporte para etiquetas en formularios web. Los usuarios pueden cargar fotos y videos existentes desde su biblioteca de fotos o tomar una foto o un video con la cámara. Anteriormente, este control de formulario siempre estaba deshabilitado.
  • Con Safari 6.0 en OS X, los desarrolladores ahora pueden usar Web Inspector (herramienta de desarrollo web) con dispositivos iOS conectados y un simulador de iOS. Los desarrolladores pueden utilizar Web Inspector para depurar Safari y el IUWebView class en sus propias aplicaciones creadas y ejecutadas desde Xcode. Esto reemplaza el banner de la Consola de depuración en Safari.
  • En iOS 6 y posteriores, los datos web (SQL Web Storage y LocalStorage) de unIUWebView El objeto se puede almacenar en un directorio del que se realizará una copia de seguridad. Para habilitar la copia de seguridad de estos datos, configure la clave WebKitStoreWebDataForBackup en YES en los valores predeterminados de usuario de su aplicación. Esto debe hacerse sólo si su aplicación se basa en datos de contenido web que no se pueden recargar. Si su objeto UIWebView abre enlaces a contenido web arbitrario, esta clave debe establecerse en NO. Al alternar el valor de esta clave no se conservarán los datos de vista web existentes.
  • En iOS 6 y posteriores, Safari ya no se registra en el feed común: esquema RSS/ATOM. Se recomienda que las aplicaciones que pueden ver esos tipos de feeds se registren en ese esquema de URL.
  • WebKit ya no siempre crea capas aceleradas por hardware para elementos con la opción -webkit-transform: preserve-3d. Los autores deberían dejar de utilizar esta opción como forma de obtener aceleración de hardware.
  • Se deshabilitará la compatibilidad experimental con CSS3 Flexbox. Cambie de usar -webkit-flexbox y -webkit-inline-flexbox a -webkit-box y -webkit-inline-box.
  • A partir de iOS 6, las URL de YouTube incrustadas en el formato http://www.youtube.com/watch?v=oHg5SJYRHA0 ya no funcionarán. Estas URL son para ver el vídeo en el sitio de YouTube, no para insertarlo en páginas web. En cambio, el formato que se debe utilizar se describe enhttps://developers.google.com/youtube/player_parameters.
  • En iOS 6, la propiedad KeyboardDisplayRequiresUserAction se agregó a la clase UIWebView. La propiedad tiene el valor predeterminado SÍ, lo que significa que llamar a focus() en un elemento de formulario no abrirá el teclado. Al cambiar la propiedad a NO, una llamada de JavaScript a focus() en un elemento de formulario enfocará el elemento y abrirá automáticamente el teclado.
  • A partir de iOS 6, llamar a focus() en un elemento de formulario en una aplicación web enfocará el elemento.