Estou enfrentando o problema quando atualizei meu Xcode para 7.0 ou iOS 9.0. De alguma forma, começou a me dar o erro de título
"O recurso não pôde ser carregado porque a política de segurança de transporte de aplicativos requer o uso de uma conexão segura"
Método Webservice:
-(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];
}
O serviço está funcionando bem para versões anteriores do Xcode e versões anteriores do iOS. Mas, quando atualizei para o Xcode 7.0 no iOS 9.0, ele começou a me dar o problema como a seguir quando eu estou chamando o método de serviço web acima. O erro registrado que estou recebendo é:
Falha na conexão: Erro Domínio = NSURLErrorDomain Code = -1022 "O recurso não pôde ser carregado porque a política de Segurança de Transporte de Aplicativo requer o uso de uma conexão segura." UserInfo = {NSUnderlyingError = 0x7fada0f31880 {Erro Domínio = Código kCFErrorDomainCFNetwork = -1022 "(null)"}, NSErrorFailingURLStringKey = MyServiceURL , NSErrorFailingURLKey = MyServiceURL , NSLocalizedDescription = O recurso não pôde ser carregado porque a política App Transport Security requer o uso de um seguro conexão.}
Tentei as perguntas e respostas a seguir, mas não obtive nenhum resultado, existe alguma ideia prévia de como posso remover esse erro de chamada de serviço?
fonte
Respostas:
Eu o resolvi adicionando algumas chaves no info.plist. Os passos que segui são:
Abri o
info.plist
arquivo de destino do meu projetoAdicionada uma chave chamada
NSAppTransportSecurity
como aDictionary
.NSAllowsArbitraryLoads
asBoolean
e defina seu valorYES
como na imagem a seguir.Limpe o projeto e agora tudo está funcionando bem como antes.
Link de referência: https://stackoverflow.com/a/32609970
EDIT: OR No código fonte do
info.plist
arquivo, podemos adicionar que:fonte
NSExceptionDomains
. Ou então ele será uma exceção paraNSAllowArbitraryLoads
, em seguida, você deve usar https para visitar esteexception
App Transport Security Settings
eAllow Arbitrary Loads
respectivamenteEsteja ciente de que o uso
NSAllowsArbitraryLoads = true
no projetoinfo.plist
permite que toda a conexão com qualquer servidor seja insegura. Se você deseja garantir que apenas um domínio específico esteja acessível por meio de uma conexão não segura , tente o seguinte:Ou, como código fonte:
Limpar e criar projeto após a edição.
fonte
A segurança de transporte é fornecida no iOS 9.0 ou posterior e no OS X v10.11 e posterior.
Portanto, por padrão, apenas chamadas https são permitidas apenas em aplicativos. Para desativar o App Transport Security, adicione as seguintes linhas no arquivo info.plist ...
Para obter mais informações:
https://developer.apple.com/library/content/documentation/General/Reference/InfoPlistKeyReference/Articles/CocoaKeys.html#//apple_ref/doc/uid/TP40009251-SW33
fonte
Para iOS 10.xe Swift 3.x [as versões abaixo também são suportadas], basta adicionar as seguintes linhas em 'info.plist'
fonte
No Swift 4, você pode usar
-> Vá para Info.plist
-> Clique em mais da lista de propriedades de informações
-> Adicionar configurações de segurança de transporte de aplicativos como dicionário
-> ícone Clique em Mais Configurações de segurança de transporte de aplicativos
-> Adicionar Permitir Cargas Arbitrárias definido SIM
Imagem abaixo
fonte
Eu resolvi como arquivo plist.
Adicione um NSAppTransportSecurity: Dictionary.
Adicione a subchave denominada "NSAllowsArbitraryLoads" como booleana: SIM
fonte
Não foi possível carregar o recurso porque a política de Segurança de Transporte de Aplicativo requer o uso de uma conexão segura funcionando no Swift 4.03.
Abra seu pList.info como código-fonte e cole:
fonte
Da documentação da Apple
Se você estiver desenvolvendo um novo aplicativo, use HTTPS exclusivamente. Se você possui um aplicativo existente, deve usar o HTTPS o máximo possível no momento e criar um plano para migrar o restante do seu aplicativo o mais rápido possível. Além disso, sua comunicação por meio de APIs de nível superior precisa ser criptografada usando o TLS versão 1.2 com sigilo direto. Se você tentar fazer uma conexão que não siga esse requisito, será gerado um erro. Se o seu aplicativo precisar fazer uma solicitação para um domínio não seguro, você deverá especificar esse domínio no arquivo Info.plist do seu aplicativo.
Para ignorar a segurança de transporte de aplicativos:
Para permitir todos os domínios não seguros
Leia mais: Configurando exceções de segurança de transporte de aplicativos no iOS 9 e OSX 10.11
fonte
Se você estiver usando o Xcode 8.0 e o swift 3.0 ou 2.2
fonte
No Xcode 7.1 em diante (swift 2.0)
fonte
Essa é a maneira de a Apple forçar uma segurança mais rígida em suas APIs (forçada a usar https sobre http). Vou explicar como remover essa configuração de segurança.
A maioria das respostas aqui apontam para adicionar essa chave ao seu info.plist
Isso por si só não resolveu esse problema para mim. Eu tive que adicionar a mesma chave para dentro
Project -> Targets -> Info -> Custom iOS Target Properties
Isso permitirá que conexões inseguras ocorram de qualquer pessoa. Se você deseja permitir que apenas um domínio específico use conexões inseguras, adicione o seguinte ao seu info.plist.
fonte
Você só precisa usar HTTPS e não HTTP no seu URL e ele funcionará
fonte
Se você não é um grande fã de XML, basta adicionar a tag abaixo no seu arquivo plist.
fonte
O iOS 9 (maio) força os desenvolvedores a usar exclusivamente o App Transport Security . Eu ouvi isso em algum lugar aleatoriamente, então não sei se isso é verdade. Mas eu suspeito e cheguei a esta conclusão:
O aplicativo em execução no iOS 9 (talvez) não se conectará mais a um servidor Meteor sem SSL.
Isso significa que executar o iOS de execução de meteoros ou o dispositivo iOS de execução de meteoros (provavelmente?) Não funcionará mais.
No info.plist do aplicativo, é
NSAppTransportSecurity [Dictionary]
necessário ter uma chaveNSAllowsArbitraryLoads [Boolean]
a ser configuradaYES
ou o Meteor precisa ser usadohttps
emlocalhost server
breve.fonte
Se você estiver usando o Xcode 8.0 a 8.3.3 e o swift 2.2 a 3.0
fonte
Abra seu pList.info como código-fonte e, na parte inferior, pouco antes de
</dict>
adicionar o seguinte código,E, finalmente, mude
your.domain.com
com seu URL base. Obrigado.fonte
Para aqueles que estão desenvolvendo no localhost, siga estas etapas:
Information Property List
e adicioneApp Transport Security Settings
e atribua umDictionary
TipoApp Transport Security Settings
entrada recém-criada e adicioneNSExceptionAllowsInsecureHTTPLoads
do tipoBoolean
e defina seu valor comoYES
.NSExceptionAllowsInsecureHTTPLoads
entrada e clique na opção "Shift Row Right" para torná-la filha da entrada acima.NSExceptionAllowsInsecureHTTPLoads
entrada e adicioneAllow Arbitrary Loads
do tipoBoolean
e defina seu valor comoYES
Nota: No final, deve ser algo como apresentado na figura a seguir
fonte
Consegui resolver isso com uma combinação de muitas das opções mencionadas. Vou incluir uma lista de verificação de todas as coisas que tive que fazer para que isso funcionasse.
Em resumo:
NSAllowsArbitraryLoads
como true para minha extensão de relógio (não para o meu aplicativo de relógio).https
e nãohttp
.Passo um:
Primeiro e mais obviamente, eu tive que adicionar uma
NSAppTransportSecurity
chave como dicionário nas extensões do meu relógioinfo.plist
com uma subchave chamadaNSAllowsArbitraryLoads
como um conjunto booleano como true. Apenas definir esta na extensão relógio e não plist do aplicativo relógio. Embora observe que isso permite todas as conexões e pode ser inseguro.ou
Passo dois:
Então eu tive que ter certeza de que o URL que estava tentando carregar era
https
e não apenashttp
. Para qualquer URL que ainda fosse http, usei:Swift :
let newURLString = oldURLString.stringByReplacingOccurrencesOfString("http", withString: "https")
Obj-C:
NSString *newURLString = [oldURLString stringByReplacingOccurrencesOfString:@“http” withString:@“https”];
fonte
Certifique-se de alterar o arquivo info.plist correto .
Esta é a segunda vez que perco tempo com esse problema, porque não percebi que estou alterando info.plist em MyProjectNameUITests.
fonte
Se você usar o firebase, ele será adicionado
NSAllowsArbitraryLoadsInWebContent = true
naNSAppTransportSecurity
seção eNSAllowsArbitraryLoads = true
não funcionaráfonte
Resolvi esse problema no caso de um servidor de análise auto-hospedado usando um certificado assinado de um ano em vez da opção "NSAllowsArbitraryLoads"
O Parse Server como qualquer servidor node.j apresenta uma URL https pública que você precisa especificar. Por exemplo:
parse-server --appId --masterKey --publicServerURL https: //seu.public.url/some_nodejs
Sinta-se livre para dar uma olhada nos meus arquivos de configuração
fonte