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í:
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.
2 Comments