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?
Lo he solucionado agregando alguna clave en info.plist. Los pasos que seguí son:
info.plist
archivo info.plist
mi proyecto Project
Se agregó una clave llamada NSAppTransportSecurity
como Dictionary
.
NSAllowsArbitraryLoads
como Boolean
y se establece su valor en YES
como en la siguiente imagen.
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:
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Í
En Xcode 7.1 en adelante (swift 2.0)
Si está utilizando Xcode 8.0 y swift 3.0 o 2.2
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 SÍ
La imagen de abajo se ve como
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.
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:
NSAllowsArbitraryLoads
en verdadero para mi extensión de reloj (no en mi aplicación de vigilancia). 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.
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
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.