ios nsurlconnection nsurlsession ios9 xcode7

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



nsurlconnection nsurlsession (20)

Abra su pList.info como código fuente y en la parte inferior justo antes de </dict> agregue el siguiente código,

<!--By Passing--> <key>NSAppTransportSecurity</key> <dict> <key>NSExceptionDomains</key> <dict> <key>your.domain.com</key> <dict> <key>NSIncludesSubdomains</key> <true/> <key>NSTemporaryExceptionAllowsInsecureHTTPLoads</key> <true/> <key>NSTemporaryExceptionMinimumTLSVersion</key> <string>1.0</string> <key>NSTemporaryExceptionRequiresForwardSecrecy</key> <false/> </dict> </dict> </dict> <!--End Passing-->

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

Estoy enfrentando el 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 de transporte de aplicaciones requiere el uso de una conexión segura"

Método de 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 se está ejecutando 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 como el siguiente cuando llamo al método de servicio web anterior. El error registrado que obtengo es:

Error de conexión: Error Dominio = NSURLErrorDomain Código = -1022 "El recurso no se pudo cargar porque la política de seguridad de transporte de aplicaciones requiere el uso de una conexión segura". UserInfo = {NSUnderlyingError = 0x7fada0f31880 {Error Domain = kCFErrorDomainCFNetwork Code = -1022 "(null)"}, NSErrorFailingURLStringKey = MyServiceURL , NSErrorFailingURLKey = MyServiceURL , NSLocalizedDescription es una política de seguridad de la cual el uso no se debe cargar. conexión.}

He intentado seguir las preguntas y respuestas, pero no obtuve ningún resultado, ¿hay alguna idea anticipada de cómo puedo eliminar ese error de llamada de servicio?

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

El recurso no se pudo cargar 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 pegue:

<key>NSAppTransportSecurity</key> <dict> <key>NSAllowsArbitraryLoads</key> <true/> </dict>


En Swift 4 puedes usar

-> Ir a 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

-> Haga clic en el ícono Plus Configuración de seguridad de transporte de la aplicación

-> Agregar Permitir cargas arbitrarias establecer

Imagen de abajo parece


En Xcode 7.1 en adelante (swift 2.0)


Esta es la forma de Apple de forzar una seguridad más estricta en sus apis (obligado a usar https sobre http). Explicaré cómo eliminar esta configuración de seguridad.

La mayoría de las respuestas aquí señalan agregar esta clave a su info.plist

Esto por sí solo no resolvió este problema para mí. Tuve que agregar la misma llave al interior

Project -> Targets -> Info -> Custom iOS Target Properties

Sin embargo, esto permitirá que cualquier persona tenga conexiones inseguras. Si desea permitir que solo un dominio específico use conexiones inseguras, puede agregar lo siguiente a su info.plist.


He resuelto como archivo plist.

Agregue un NSAppTransportSecurity: Diccionario.

Agregue la subclave denominada "NSAllowsArbitraryLoads" como booleana: SÍ


He resuelto este problema en el caso de un servidor de análisis autohospedado que utiliza 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

Siéntase libre de echar un vistazo a mis archivos de configuración


Lo resolví agregando algunas claves en info.plist. Los pasos que seguí son:

  1. info.plist archivo info.plist mi objetivo de info.plist

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

  3. Se agregó una subclave llamada NSAllowsArbitraryLoads como Boolean y estableció su valor en YES como en la siguiente imagen.

Limpia el proyecto y ahora todo funciona bien como antes.

Enlace de referencia: https://.com/a/32609970

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

<key>NSAppTransportSecurity</key> <dict> <key>NSAllowsArbitraryLoads</key> <true/> <key>NSExceptionDomains</key> <dict> <key>yourdomain.com</key> <dict> <key>NSIncludesSubdomains</key> <true/> <key>NSThirdPartyExceptionRequiresForwardSecrecy</key> <false/> </dict> </dict> </dict>


Logré resolver esto con una combinación de muchas de las opciones mencionadas. Incluiré una lista de verificación de todas las cosas que tuve que hacer para que esto funcione.

En breve:

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

Paso uno:

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

o

<key>NSAppTransportSecurity</key> <dict> <key>NSAllowsArbitraryLoads</key> <true/> </dict>

Segundo paso:

Luego tuve que asegurarme de que la URL que intentaba cargar era https y no solo http . Para cualquier URL que aún fuera http, utilicé:

Rápido :

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

Obj-C:

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


Para aquellos de ustedes que desarrollan en localhost, sigan estos pasos:

  1. Toque el botón "+" junto a Information Property List y agregue App Transport Security Settings y asígnele un Tipo de Dictionary
  2. Toque el botón "+" junto a la entrada de App Transport Security Settings recién creada y agregue NSExceptionAllowsInsecureHTTPLoads de tipo Boolean y establezca su valor en YES .
  3. Haga clic derecho en la entrada NSExceptionAllowsInsecureHTTPLoads y haga clic en la opción "Shift Row Right" para que sea un elemento secundario de la entrada anterior.
  4. Toque el botón "+" junto a la entrada NSExceptionAllowsInsecureHTTPLoads y agregue Allow Arbitrary Loads de tipo Boolean y establezca su valor en YES

Nota: Al final, debería verse como se presenta en la siguiente imagen


Para iOS 10.xy Swift 3.x [también se admiten las siguientes versiones] solo agregue las siguientes líneas en ''info.plist''

<key>NSAppTransportSecurity</key> <dict> <key>NSAllowsArbitraryLoads</key> <true/> </dict>


Si está utilizando Xcode 8.0 y swift 3.0 o 2.2


Si no eres un gran fanático de XML, simplemente agrega la etiqueta a continuación en tu archivo plist.


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


Tenga en cuenta que el uso de NSAllowsArbitraryLoads = true en info.plist del proyecto permite que toda conexión a cualquier servidor sea insegura. Si desea asegurarse de que solo se pueda acceder a un dominio específico a través de una conexión insegura, intente esto:

O, como código fuente:

<key>NSAppTransportSecurity</key> <dict> <key>NSExceptionDomains</key> <dict> <key>domain.com</key> <dict> <key>NSExceptionAllowsInsecureHTTPLoads</key> <true/> <key>NSIncludesSubdomains</key> <true/> </dict> </dict> </dict>

Proyecto Clean & Build después de la edición.


iOS 9 (puede) obligar a los desarrolladores a usar App Transport Security exclusivamente. Escuché esto en algún lugar al azar, así que no sé si esto también es cierto. Pero lo 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 que ejecutar meteor run ios o meteor run ios-device (¿probablemente?) Ya no funcionará.

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


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

Esta es la segunda vez que pierdo el tiempo en este tema, porque no me di cuenta de que estoy cambiando info.plist en MyProjectNameUITests.


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 en este momento y crear un plan para migrar el resto de su aplicación lo antes posible. Además, su comunicación a través de API de nivel superior debe cifrarse con TLS versión 1.2 con confidencialidad directa. Si intenta establecer una conexión que no cumple con este requisito, se genera un error. Si su aplicación necesita hacer una solicitud a un dominio inseguro, debe especificar este dominio en el archivo Info.plist de su aplicación.

Para omitir la seguridad del transporte de aplicaciones:

<key>NSAppTransportSecurity</key> <dict> <key>NSExceptionDomains</key> <dict> <key>yourserver.com</key> <dict> <!--Include to allow subdomains--> <key>NSIncludesSubdomains</key> <true/> <!--Include to allow HTTP requests--> <key>NSTemporaryExceptionAllowsInsecureHTTPLoads</key> <true/> <!--Include to specify minimum TLS version--> <key>NSTemporaryExceptionMinimumTLSVersion</key> <string>TLSv1.1</string> </dict> </dict> </dict>

Para permitir todos los dominios inseguros

<key>NSAppTransportSecurity</key> <dict> <!--Include to allow all connections (DANGER)--> <key>NSAllowsArbitraryLoads</key> <true/> </dict>

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


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

Entonces, de forma predeterminada, solo las llamadas https solo se permiten en las aplicaciones. Para desactivar App Transport Security, agregue las siguientes líneas en el archivo info.plist ...

<key>NSAppTransportSecurity</key> <dict> <key>NSAllowsArbitraryLoads</key> <true/> </dict>

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


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

En mi caso, necesito cambiar la URL http: // a https: // (si no funciona, intente)

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