miércoles, 14 de octubre de 2015

Solucionando NSURLSession/NSURLConnection HTTP load failed (kCFStreamErrorDomainSSL, -XXXXX) Xcode ó SSL con iOS 9

Abre tu archivo .m que realiza la conexión y antes de la linea de código que dice @implementation

 agrega el siguiente código: 

@interface NSURLRequest (interfaceSSL)
+ (BOOL)allowsAnyHTTPSCertificateForHost:(NSString*)host;
+ (void)setAllowsAnyHTTPSCertificate:(BOOL)allow forHost:(NSString*)host;

@end

después ubica en tu código la linea que realiza la conexión , ya que la encontraste escribe lo siguiente que deberá ir antes de la linea de código de tu conexión

 [NSURLRequest setAllowsAnyHTTPSCertificate:YES forHost:@"tu_host"];


El host debe ser solo el DNS por ejemplo si tienes http://evalbyte.com/conexion/archivos, lo que debes tomar es solo "evalbyte.com" como host, si comienza con www (http://www.evalbyte.com/conexion/archivos) deberías poner www.evalbyte.com ó evalbyte.com (prueba con ambas).


por ejemplo si tienes tu conexión en un método , esta linea es lo primero que invocarías :

-(NSData*)consultaPost:(NSString*)postConsulta urlCadena:(NSString*)URL{
    
   
[NSURLRequest setAllowsAnyHTTPSCertificate:YES forHost:@"tu_host"];

código de conexión o algunas inicializaciones

----
---
---

}

////// Si estas utilizando iOS 9, en algunos casos puedes omitir ó no las instrucciones anteriores, pero si debes modificar el .plist  con los siguientes pasos.

Ubica en tu Xcode del lado izquierdo una carpeta con nombre Supporting Files, dentro de ella busca un archivo info.plist (verifica que no estés utilizando el info.plist de TEST)

colocate en ese archivo y con el botón derecho de mouse da click , te mostrara un sub menú , selecciona abrir como codigo fuente (open as --> source code).


casi al final encontraras estas etiquetas que cierran al xml

</dict>
</plist>

Añade sobre ellas lo siguinte

<key>NSAppTransportSecurity</key>
<dict>
<key>NSExceptionDomains</key>
<dict>
<key>TU HOST</key>
<dict>
<key>NSIncludesSubdomains</key>
<true/>
<key>NSTemporaryExceptionAllowsInsecureHTTPLoads</key>
<true/>
<key>NSTemporaryExceptionMinimumTLSVersion</key>
<string>1.0</string>
<key>NSTemporaryExceptionRequiresForwardSecrecy</key>
<false/>
</dict>
</dict>

</dict>


debería quedar integrado así:

<key>NSAppTransportSecurity</key>
<dict>
<key>NSExceptionDomains</key>
<dict>
<key>TU HOST</key>
<dict>
<key>NSIncludesSubdomains</key>
<true/>
<key>NSTemporaryExceptionAllowsInsecureHTTPLoads</key>
<true/>
<key>NSTemporaryExceptionMinimumTLSVersion</key>
<string>1.0</string>
<key>NSTemporaryExceptionRequiresForwardSecrecy</key>
<false/>
</dict>
</dict>

</dict>
</dict>

</plist>


Compila y tu código debería funcionar.

No hay comentarios:

Publicar un comentario