No se pudo cargar el recurso porque la política de seguridad de transporte de aplicaciones requiere el uso de una conexión segura

Me enfrento al problema cuando actualicé mi Xcode a 7.0 o iOS 9.0. De alguna manera, comenzó a darme el error Titulado

“No se pudo cargar el recurso porque la política de seguridad del transporte de aplicaciones requiere el uso de una conexión segura”

Método del servicio web:

-(void)ServiceCall:(NSString*)ServiceName :(NSString *)DataString { NSURLSessionConfiguration *sessionConfiguration = [NSURLSessionConfiguration defaultSessionConfiguration]; [sessionConfiguration setAllowsCellularAccess:YES]; [sessionConfiguration setHTTPAdditionalHeaders:@{ @"Accept" : @"application/json" }]; NSURLSession *session = [NSURLSession sessionWithConfiguration:sessionConfiguration]; NSURL *url = [NSURL URLWithString:[NSString stringWithFormat:@"%@",ServiceURL]]; NSLog(@"URl %@%@",url,DataString); // Configure the Request NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url]; [request setValue:[NSString stringWithFormat:@"%@=%@", strSessName, strSessVal] forHTTPHeaderField:@"Cookie"]; request.HTTPBody = [DataString dataUsingEncoding:NSUTF8StringEncoding]; request.HTTPMethod = @"Post"; // post the request and handle response NSURLSessionDataTask *postDataTask = [session dataTaskWithRequest:request completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) { // Handle the Response if(error) { NSLog(@"%@",[NSString stringWithFormat:@"Connection failed: %@", [error description]]); // Update the View dispatch_async(dispatch_get_main_queue(), ^{ // Hide the Loader [MBProgressHUD hideHUDForView:[[UIApplication sharedApplication] delegate].window animated:YES]; }); return; } NSArray * cookies = [[NSHTTPCookieStorage sharedHTTPCookieStorage] cookiesForURL:request.URL]; for (NSHTTPCookie * cookie in cookies) { NSLog(@"%@=%@", cookie.name, cookie.value); strSessName=cookie.name; strSessVal=cookie.value; } NSString *retVal = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]; }]; [postDataTask resume]; } 

El servicio está funcionando bien para las versiones anteriores de Xcode y las versiones anteriores de iOS. Pero cuando actualicé a Xcode 7.0 que está en iOS 9.0, comenzó a darme el problema de seguir cuando estoy llamando al método de servicio web anterior. El error registrado que obtengo es:

Error de conexión: dominio de error = NSURLErrorDomain Code = -1022 “No se pudo cargar el recurso porque la política de seguridad de transporte de aplicaciones requiere el uso de una conexión segura”. UserInfo = {NSUnderlyingError = 0x7fada0f31880 {Dominio de error = kCFErrorDomainCFNetwork Code = -1022 “(nulo)”}, NSErrorFailingURLStringKey = MyServiceURL , NSErrorFailingURLKey = MyServiceURL , NSLocalizedDescription = No se pudo cargar el recurso porque la política de seguridad del transporte de aplicaciones requiere el uso de un seguro conexión.}

Intenté las siguientes preguntas y respuestas, pero no obtuve ningún resultado. ¿Hay alguna idea previa de cómo puedo eliminar ese error de llamada de servicio?

  1. El recurso no se pudo cargar es ios9
  2. App Transport Security Xcode 7 beta 6
  3. https://stackoverflow.com/a/32609970

Lo he solucionado agregando alguna clave en info.plist. Los pasos que seguí son:

  1. info.plist archivo info.plist mi proyecto Project

  2. Se agregó una clave llamada NSAppTransportSecurity como Dictionary .

  3. Se agregó una Subclave llamada NSAllowsArbitraryLoads como Boolean y se establece su valor en YES como en la siguiente imagen.

enter image description here

Limpie el proyecto y ahora todo funciona bien como antes.

Ref Enlace: https://stackoverflow.com/a/32609970

EDITAR: O En el código fuente del archivo info.plist podemos agregar que:

 NSAppTransportSecurity  NSAllowsArbitraryLoads  NSExceptionDomains  yourdomain.com  NSIncludesSubdomains  NSThirdPartyExceptionRequiresForwardSecrecy     

Tenga en cuenta que usar NSAllowsArbitraryLoads = true permite que todas las conexiones a cualquier servidor sean inseguras. Si quiere asegurarse de que solo se puede acceder a un dominio específico a través de una conexión insegura, intente esto:

enter image description here

O, como código fuente:

 NSAppTransportSecurity  NSExceptionDomains  domain.com  NSExceptionAllowsInsecureHTTPLoads  NSIncludesSubdomains     

Limpiar y construir proyecto después de la edición.

La seguridad de transporte se proporciona en iOS 9.0 o posterior, y en OS X v10.11 y posterior.

De manera predeterminada, solo las llamadas https solo están permitidas en las aplicaciones. Para desactivar App Transport Security, agregue las siguientes líneas en el archivo info.plist

 NSAppTransportSecurity  NSAllowsArbitraryLoads   

Para más información:
https://developer.apple.com/library/content/documentation/General/Reference/InfoPlistKeyReference/Articles/CocoaKeys.html#//apple_ref/doc/uid/TP40009251-SW33

Para iOS 10.x y Swift 3.x [las siguientes versiones también son compatibles] simplemente agregue las siguientes líneas en ‘info.plist’

 NSAppTransportSecurity  NSAllowsArbitraryLoads   

Lo he resuelto como un archivo plist.

Agregue un NSAppTransportSecurity: Diccionario.

Agregue Subkey llamado “NSAllowsArbitraryLoads” como Boolean: SÍ

enter image description here

En Xcode 7.1 en adelante (swift 2.0)

enter image description here

Si está utilizando Xcode 8.0 y swift 3.0 o 2.2

enter image description here

De la documentación de Apple

Si está desarrollando una nueva aplicación, debe usar HTTPS exclusivamente. Si tiene una aplicación existente, debe usar HTTPS tanto como pueda ahora y cree un plan para migrar el rest de su aplicación lo antes posible. Además, su comunicación a través de API de nivel superior debe ser encriptada usando la versión 1.2 de TLS con secreto hacia adelante. Si intenta hacer una conexión que no sigue este requisito, se produce un error. Si su aplicación necesita realizar una solicitud a un dominio inseguro, debe especificar este dominio en el archivo Info.plist de su aplicación.

Para eludir la seguridad del transporte de aplicaciones:

 NSAppTransportSecurity  NSExceptionDomains  yourserver.com   NSIncludesSubdomains   NSTemporaryExceptionAllowsInsecureHTTPLoads   NSTemporaryExceptionMinimumTLSVersion TLSv1.1    

Permitir todos los dominios inseguros

 NSAppTransportSecurity   NSAllowsArbitraryLoads   

Leer más: configurar excepciones de seguridad de transporte de aplicaciones en iOS 9 y OSX 10.11

No se pudo cargar el recurso porque la política de Seguridad de transporte de aplicaciones requiere el uso de una conexión segura que funcione en Swift 4.03.

Abra su pList.info como código fuente y péguelo:

 NSAppTransportSecurity  NSAllowsArbitraryLoads   

Solo necesita usar HTTPS y no HTTP en su URL y funcionará

En Swift 4 puedes usar

-> Ir Info.plist

-> Haga clic en más de la lista de propiedades de Información

-> Agregar configuración de seguridad de transporte de aplicaciones como diccionario

-> Icono Click Plus Configuración de seguridad del transporte de la aplicación

-> Agregar Permitir cargas arbitrarias establecido

La imagen de abajo se ve como

enter image description here

iOS 9 (puede) obligar a los desarrolladores a utilizar App Transport Security exclusivamente. Escuché esto en algún lugar al azar, así que no sé si esto es verdad yo mismo. Pero sospecho y he llegado a esta conclusión:

La aplicación que se ejecuta en iOS 9 (tal vez) ya no se conectará a un servidor Meteor sin SSL.

Esto significa correr ios meios o Metros ejecutar ios-dispositivos (¿probablemente?) Ya no funcionarán.

En la aplicación info.plist, NSAppTransportSecurity [Dictionary] necesita tener una clave NSAllowsArbitraryLoads [Boolean] para establecerse en YES o Meteor necesita usar https para su localhost server pronto.

Si no eres un gran admirador de XML, simplemente agrega la etiqueta siguiente en tu archivo plist.

enter image description here

Pude resolver esto con una combinación de muchas de las opciones mencionadas. Incluiré una lista de verificación de todas las cosas que tenía que hacer para que esto funcione.

En breve:

  1. Establezca NSAllowsArbitraryLoads en verdadero para mi extensión de reloj (no en mi aplicación de vigilancia).
  2. Asegúrese de que estaba usando https y no http .

Paso uno:

En primer lugar y más obviamente, tuve que agregar una clave NSAppTransportSecurity como diccionario en la info.plist mi extensión de info.plist con una subclave llamada NSAllowsArbitraryLoads como un valor booleano en verdadero. Solo configura esto en la extensión de reloj y no en la aplicación de reloj. Aunque tenga en cuenta que esto permite todas las conexiones y podría ser inseguro.

enter image description here

o

 NSAppTransportSecurity  NSAllowsArbitraryLoads   

Segundo paso:

Luego tuve que asegurarme de que la url que estaba tratando de cargar era https y no solo http . Para cualquier URL que todavía estaba http, utilicé:

Swift :

let newURLString = oldURLString.stringByReplacingOccurrencesOfString("http", withString: "https")

Obj-C:

NSString *newURLString = [oldURLString stringByReplacingOccurrencesOfString:@“http” withString:@“https”];

Abra su pList.info como código fuente y en la parte inferior justo antes de agregar el siguiente código,

   NSAppTransportSecurity  NSExceptionDomains  your.domain.com  NSIncludesSubdomains  NSTemporaryExceptionAllowsInsecureHTTPLoads  NSTemporaryExceptionMinimumTLSVersion 1.0 NSTemporaryExceptionRequiresForwardSecrecy      

Y finalmente cambie your.domain.com con su Url base. Gracias.

He resuelto este problema en el caso de un servidor parse alojado con un certificado firmado por un año en lugar de la opción “NSAllowsArbitraryLoads”

Parse Server como cualquier servidor node.js presenta una url https pública que debe especificar. Por ejemplo:

parse-server –appId –masterKey –publicServerURL https: //your.public.url/some_nodejs

No dude en echar un vistazo a mis archivos de configuración

Si está utilizando Xcode 8.0 a 8.3.3 y swift 2.2 a 3.0

En mi caso necesito cambiar en la URL http: // a https: // (si no funciona, inténtalo)

 Add an App Transport Security Setting: Dictionary. Add a NSAppTransportSecurity: Dictionary. Add a NSExceptionDomains: Dictionary. Add a yourdomain.com: Dictionary. (Ex: stackoverflow.com) Add Subkey named " NSIncludesSubdomains" as Boolean: YES Add Subkey named " NSExceptionAllowsInsecureHTTPLoads" as Boolean: YES 

enter image description here

Asegúrese de cambiar el archivo info.plist correcto .

Esta es la segunda vez que pierdo tiempo en este tema, porque no noté que estoy cambiando info.plist en MyProjectNameUITests.