App Transport Security o ATS en iOS 9

App-Transport-Security-ATS-en-iOS-9

Estas cosas son divertidas.

Cuándo estás seguro de que algo funciona, y de repente, en una nueva versión de iOS, deja de funcionar, o al menos no funciona igual.

Si tu aplicación hace uso de NSURLSession debes conocer App Transport Security o ATS en iOS 9

HTTPS

Apple recomienda a partir de ahora usar HTTPS exclusivamente, y para ello implementa App Transport Security o ATS en iOS 9, que básicamente lo que hace es securizar las conexiones de tu aplicación.

Esto a simple vista nos debería dar igual, pero si usas conexiones a servidores, lo más habitual hoy en día, simplemente tu App no funcionará.

Te dará un error parecido a este:

Error Domain=NSURLErrorDomain Code=-1200 «An SSL error has occurred and a secure connection to the server cannot be made.»

Configurar App Transport Security

Hay varias soluciones a esto, la más fácil, aunque también la menos recomendable, es anular en cierto modo ATS, para ello hay que incluir una Key en nuestro archivo Info.plist

Es la siguiente:

<key>NSAppTransportSecurity</key>

<dict>

<key>NSAllowsArbitraryLoads</key>

<true/>

</dict>

Debería quedar algo así:

App-Transport-Security-o-ATS-en-iOS-9

Incluir excepciones

Podemos también hacer excepciones, y que en estas URL´S no se tenga en cuenta esta seguridad extra que Apple quiere imponer en sus conexiones de red.

Tendríamos que incluir otras Keys dentro de nuestro archivo Info.plist.

Por ejemplo para incluir una excepción de un dominio podemos usar la Key:

<dict>

<key>NSExceptionDomains</key>

<dict> <key>tuservidor.com</key>

<dict>

</dict>

</dict>

También podemos usar Keys para incluir subdominios:

<dict>

<key>NSIncludesSubdomains</key>

<true/>

</dict>

Lo mejor, como suele ser habitual, es consultar la documentación oficial de Apple, dónde podréis encontrar toda la información al respecto.

En mi caso, en una App desarrollada para un cliente, yo puse la Key <key>NSAllowsArbitraryLoads</key> que básicamente desactiva por completo ATS y permite todo tipo de conexiones, sí, es menos seguro que usarlo, pero tampoco mi aplicación requiere una seguridad extra, no es la App de un banco 😉

Déjame un comentario si quieres decirme algo.

About The Author
iOS Developer & Instructor at CFE Apps. Enseño a crear aplicaciones iOS a todo el que quiera aprender.

2 Comments

  • patispawn 15/09/2015 @ 20:30

    Sergio Becerril gracias por el tip sin embargo he escuchado que así desactives esa directiva al momento de enviarla para que la publiquen en la Appstore, ellos la rechazan de una vez. Tu sabes si es una exageración o si es cierto??
    Te agradezco, soy estudiante tuyo así que mis felicitaciones eres un gran profe!!!

    • Sergio Becerril 15/09/2015 @ 23:11

      Hola,

      Gracias por tus palabras patispawn.

      Respecto a tu duda, en unos cuantos días te podré decir.

      Estoy terminando la App de un cliente en la cual hago uso de esta funcionalidad, veremos si la aprueban o la rechazan.

      Gracias por visitar mi Blog y por comentar 😉

      Un abrazo.
      Sergio Becerril

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.