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 porque el recurso no se puede cargar porque 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?
fuente
Respuestas:
Lo resolví agregando algunas claves en info.plist. Los pasos que seguí son:
Abrí el
info.plist
archivo de destino de mi proyectoSe agregó una clave llamada
NSAppTransportSecurity
como aDictionary
.NSAllowsArbitraryLoads
asBoolean
y estableció su valorYES
como la siguiente imagen.Limpia el proyecto y ahora todo funciona bien como antes.
Enlace de referencia: https://stackoverflow.com/a/32609970
EDITAR: O En el código fuente del
info.plist
archivo podemos agregar que:fuente
NSExceptionDomains
. O de lo contrario será una excepciónNSAllowArbitraryLoads
, entonces debe usar https para visitar estoexception
App Transport Security Settings
yAllow Arbitrary Loads
respectivamenteTenga en cuenta que el uso
NSAllowsArbitraryLoads = true
en el proyectoinfo.plist
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:
Proyecto Clean & Build después de la edición.
fuente
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 están permitidas en las aplicaciones. Para desactivar App Transport Security, agregue las siguientes líneas en el archivo info.plist ...
Para más información:
https://developer.apple.com/library/content/documentation/General/Reference/InfoPlistKeyReference/Articles/CocoaKeys.html#//apple_ref/doc/uid/TP40009251-SW33
fuente
Para iOS 10.xy Swift 3.x [también se admiten las siguientes versiones] solo agregue las siguientes líneas en 'info.plist'
fuente
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 SÍ
Imagen de abajo parece
fuente
He resuelto como archivo plist.
Agregue un NSAppTransportSecurity: Diccionario.
Agregue la subclave denominada "NSAllowsArbitraryLoads" como booleana: SÍ
fuente
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:
fuente
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:
Para permitir todos los dominios inseguros
Leer más: Configuración de excepciones de seguridad de transporte de aplicaciones en iOS 9 y OSX 10.11
fuente
Si está utilizando Xcode 8.0 y swift 3.0 o 2.2
fuente
En Xcode 7.1 en adelante (swift 2.0)
fuente
Esta es la manera 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.
fuente
Solo necesita usar HTTPS y no HTTP en su URL y funcionará
fuente
Si no eres un gran fanático de XML, simplemente agrega la etiqueta a continuación en tu archivo plist.
fuente
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]
tiene que tener una llaveNSAllowsArbitraryLoads [Boolean]
que se establece enYES
o Meteor necesita usarhttps
por sulocalhost server
pronto.fuente
Si está utilizando Xcode 8.0 a 8.3.3 y swift 2.2 a 3.0
fuente
Abra su pList.info como código fuente y en la parte inferior justo antes de
</dict>
agregar el siguiente código,Y finalmente cambia
your.domain.com
con tu URL base. Gracias.fuente
Para aquellos de ustedes que desarrollan en localhost, sigan estos pasos:
Information Property List
y agregueApp Transport Security Settings
y asígnele unDictionary
TipoApp Transport Security Settings
entrada recién creada y agregue elNSExceptionAllowsInsecureHTTPLoads
tipoBoolean
y establezca su valor enYES
.NSExceptionAllowsInsecureHTTPLoads
entrada y haga clic en la opción "Shift Row Right" para que sea un elemento secundario de la entrada anterior.NSExceptionAllowsInsecureHTTPLoads
entrada y agregue elAllow Arbitrary Loads
tipoBoolean
y establezca su valor enYES
Nota: Al final, debería verse como se presenta en la siguiente imagen
fuente
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:
NSAllowsArbitraryLoads
en verdadero para mi extensión de reloj (no para mi aplicación de reloj).https
y nohttp
.Paso uno:
En primer lugar, y obviamente, tuve que agregar una
NSAppTransportSecurity
clave como diccionario en las extensiones de mi relojinfo.plist
con una subclave llamadaNSAllowsArbitraryLoads
como un conjunto booleano en verdadero. Solo configure esto 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
Segundo paso:
Luego tuve que asegurarme de que la URL que intentaba cargar era
https
y no solohttp
. 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”];
fuente
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.
fuente
Si usa firebase, se agregará
NSAllowsArbitraryLoadsInWebContent = true
en laNSAppTransportSecurity
sección yNSAllowsArbitraryLoads = true
no funcionaráfuente
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 pública https 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
fuente