Intenté ejecutar mi aplicación existente en iOS9 pero recibí un error mientras lo usaba AFURLSessionManager
.
__block NSURLSessionDataTask *task = [self.sessionManager dataTaskWithRequest:request completionHandler:^(NSURLResponse * __unused response, id responseObject, NSError *error) {
if (error) {
} else {
}
}];
[task resume];
Obtuve el siguiente error:
Error Domain=NSURLErrorDomain Code=-999 "cancelled.
También obteniendo los siguientes registros:
NSURLSession/NSURLConnection HTTP load failed (kCFStreamErrorDomainSSL, -9824
CFNetwork SSLHandshake failed (-9824)
Actualización: he agregado varias actualizaciones a mi solución: NSURLSession / NSURLConnection La carga HTTP falló en iOS 9
ios
afnetworking
nsurlsession
ios9
tls1.2
Tariq
fuente
fuente
Respuestas:
Solución encontrada:
En iOS9, ATS aplica las mejores prácticas durante las llamadas de red, incluido el uso de HTTPS.
De la documentación de Apple:
ATS evita la divulgación accidental, proporciona un comportamiento predeterminado seguro y es fácil de adoptar. Debe adoptar ATS lo antes posible, independientemente de si está creando una nueva aplicación o actualizando una existente. Si está desarrollando una nueva aplicación, debe usar HTTPS exclusivamente. Si tiene una aplicación existente, debe usar HTTPS tanto como pueda en este momento y crear un plan para migrar el resto de su aplicación lo antes posible.
En la versión beta 1, actualmente no hay forma de definir esto en info.plist. La solución es agregarlo manualmente:
Actualización1: Esta es una solución temporal hasta que esté listo para adoptar el soporte ATS iOS9.
Actualización2: Para más detalles, consulte el siguiente enlace: http://ste.vn/2015/06/10/configuring-app-transport-security-ios-9-osx-10-11/
Actualización3: si está intentando conectarse a un host (YOURHOST.COM) que solo tiene TLS 1.0
Agréguelos a la lista de información de su aplicación
fuente
NSTemporaryExceptionMinimumTLSVersion
debe ser, por ejemplo, TLSv1.0 en lugar de 1.0 , consulte las claves del diccionario de dominios de excepciónCómo lidiar con el SSL en iOS9, una solución es hacer lo siguiente:
Como dice la manzana :
iOS 9 y OSX 10.11 requieren SSL TLSv1.2 para todos los hosts de los que planea solicitar datos, a menos que especifique dominios de excepción en el archivo Info.plist de su aplicación.
La sintaxis para la configuración de Info.plist se ve así:
Si su aplicación (un navegador web de terceros, por ejemplo) necesita conectarse a hosts arbitrarios, puede configurarla así:
Si tiene que hacer esto, probablemente sea mejor actualizar sus servidores para usar TLSv1.2 y SSL, si aún no lo están haciendo. Esto debe considerarse una solución temporal.
A partir de hoy, la documentación preliminar no menciona ninguna de estas opciones de configuración de manera específica. Una vez que lo haga, actualizaré la respuesta para vincular a la documentación relevante.
Para obtener más información, vaya a iOS9AdaptationTips
fuente
La nota técnica de Apple sobre seguridad en el transporte de aplicaciones es muy útil ; nos ayudó a encontrar una solución más segura para nuestro problema.
Esperemos que esto ayude a alguien más. Estábamos teniendo problemas para conectarnos a las URL de Amazon S3 que parecían ser perfectamente válidas, las URL TLSv12 HTTPS. Resulta que tuvimos que deshabilitar
NSExceptionRequiresForwardSecrecy
para habilitar otro puñado de cifrados que usa S3.En nuestro
Info.plist
:fuente
Si tiene este problema con Amazon S3 como yo, intente pegar esto en su info.plist como hijo directo de su etiqueta de nivel superior
Puedes encontrar más información en:
http://docs.aws.amazon.com/mobile/sdkforios/developerguide/ats.html#resolving-the-issue
fuente
Encontré una solución desde aquí. Y está funcionando para mí.
Mira esto, puede ayudarte.
fuente
Simplemente agregue los siguientes campos en su archivo .plist
La sintaxis se ve así:
fuente
Actualizar:
A partir de Xcode 7.1, no necesita ingresar manualmente el
NSAppTransportSecurity
Diccionario en elinfo.plist
.Ahora se completará automáticamente para usted, se dará cuenta de que es un diccionario y luego también completará automáticamente las
Allows Arbitrary
cargas. captura de pantalla de info.plistfuente
Solucione el error de carga fallida NSURLConnection Http Solo agregue el siguiente Dict en info.plist:
fuente
Lo resolví agregando algunas claves en info.plist. Los pasos que seguí son:
Abrí el archivo info.plist de mi proyecto
Se agregó una clave llamada NSAppTransportSecurity como diccionario.
Se agregó una subclave llamada NSAllowsArbitraryLoads como booleana y estableció su valor en SÍ como en la siguiente imagen. ingrese la descripción de la imagen aquí
Limpia el proyecto y ahora todo funciona bien como antes.
Enlace de referencia: https://stackoverflow.com/a/32609970
fuente
Esto es lo que funcionó para mí cuando tuve este error:
fuente
Puede intentar agregar esta función en el archivo RCTHTTPRequestHandler.m
- (void)URLSession:(NSURLSession *)session didReceiveChallenge:(NSURLAuthenticationChallenge *)challenge completionHandler:(void (^)(NSURLSessionAuthChallengeDisposition disposition, NSURLCredential *credential))completionHandler { completionHandler(NSURLSessionAuthChallengeUseCredential, [NSURLCredential credentialForTrust:challenge.protectionSpace.serverTrust]); }
fuente
Además de las respuestas mencionadas anteriormente, vuelva a verificar su URL
fuente
Usted debe agregar
App Transport Security Settings
ainfo.plist
y añadirAllow Arbitrary Loads
aApp Transport Security Settings
fuente