Tentei executar meu aplicativo existente no iOS9, mas com falha ao usar AFURLSessionManager
.
__block NSURLSessionDataTask *task = [self.sessionManager dataTaskWithRequest:request completionHandler:^(NSURLResponse * __unused response, id responseObject, NSError *error) {
if (error) {
} else {
}
}];
[task resume];
Estou tendo o erro a seguir:
Error Domain=NSURLErrorDomain Code=-999 "cancelled.
Também obtendo os seguintes logs:
NSURLSession/NSURLConnection HTTP load failed (kCFStreamErrorDomainSSL, -9824
CFNetwork SSLHandshake failed (-9824)
Atualização: adicionei várias atualizações à minha solução: Falha no carregamento do NSURLSession / NSURLConnection no iOS 9
ios
afnetworking
nsurlsession
ios9
tls1.2
Tariq
fonte
fonte
Respostas:
Solução encontrada:
No iOS9, o ATS aplica as melhores práticas durante as chamadas de rede, incluindo o uso de HTTPS.
Da documentação da Apple:
O ATS evita a divulgação acidental, fornece comportamento padrão seguro e é fácil de adotar. Você deve adotar o ATS o mais rápido possível, independentemente de criar um novo aplicativo ou atualizar um existente. Se você estiver desenvolvendo um novo aplicativo, use HTTPS exclusivamente. Se você já possui um aplicativo, 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.
Na versão beta 1, atualmente não há como definir isso no info.plist. A solução é adicioná-lo manualmente:
Atualização 1: esta é uma solução temporária até que você esteja pronto para adotar o suporte ao iOS9 ATS.
Atualização2: para obter mais detalhes, consulte o seguinte link: http://ste.vn/2015/06/10/configuring-app-transport-security-ios-9-osx-10-11/
Update3: se você está tentando se conectar a um host (YOURHOST.COM) que possui apenas o TLS 1.0
Adicione-os ao Info.plist do seu aplicativo
fonte
NSTemporaryExceptionMinimumTLSVersion
deve ser, por exemplo, TLSv1.0 em vez de 1.0 , consulte Chaves de dicionário de domínios de exceção deComo lidar com o SSL no iOS9 , Uma solução é:
Como a Apple diz:
O iOS 9 e o OSX 10.11 exigem SSL TLSv1.2 para todos os hosts dos quais você planeja solicitar dados, a menos que você especifique domínios de exceção no arquivo Info.plist do seu aplicativo.
A sintaxe da configuração do Info.plist é semelhante a esta:
Se seu aplicativo (um navegador da web de terceiros, por exemplo) precisar se conectar a hosts arbitrários, você poderá configurá-lo da seguinte maneira:
Se você precisar fazer isso, provavelmente é melhor atualizar seus servidores para usar TLSv1.2 e SSL, caso ainda não o estejam fazendo. Isso deve ser considerado uma solução temporária.
Atualmente, a documentação de pré-lançamento não menciona nenhuma dessas opções de configuração de nenhuma maneira específica. Depois disso, atualizarei a resposta para vincular à documentação relevante.
Para mais informações, acesse iOS9AdaptationTips
fonte
A Nota Técnica da Apple sobre App Transport Security é muito útil ; nos ajudou a encontrar uma solução mais segura para o nosso problema.
Espero que isso ajude outra pessoa. Estávamos tendo problemas para conectar-se a URLs do Amazon S3 que pareciam perfeitamente válidos, URLs TLSv12 HTTPS. Acontece que tivemos que desativar
NSExceptionRequiresForwardSecrecy
para ativar outro conjunto de cifras que o S3 usa.Em nosso
Info.plist
:fonte
Se você está tendo esse problema com o Amazon S3 como eu, tente colá-lo em seu info.plist como filho direto da sua tag de nível superior
Você pode encontrar mais informações em:
http://docs.aws.amazon.com/mobile/sdkforios/developerguide/ats.html#resolving-the-issue
fonte
Encontrei solução a partir daqui. E está funcionando para mim.
Verifique isso, pode ajudá-lo.
fonte
Basta adicionar os seguintes campos no seu arquivo .plist
A sintaxe fica assim:
fonte
Atualizar:
A partir do Xcode 7.1, você não precisa inserir manualmente o
NSAppTransportSecurity
Dicionário noinfo.plist
.Agora ele será preenchido automaticamente, você perceberá que é um dicionário e, em seguida, o preenchimento automático
Allows Arbitrary
também. captura de tela info.plistfonte
Resolva o erro de falha no carregamento HTTP do NSURLConnection Basta adicionar o seguinte comando no info.plist:
fonte
Eu o resolvi adicionando algumas chaves no info.plist. Os passos que segui são:
Abri o arquivo info.plist do meu projeto
Adicionada uma chave chamada NSAppTransportSecurity como um dicionário.
Adicionada uma subchave chamada NSAllowsArbitraryLoads como booleana e defina seu valor como YES como na imagem a seguir. insira a descrição da imagem aqui
Limpe o projeto e agora tudo está funcionando bem como antes.
Link de referência: https://stackoverflow.com/a/32609970
fonte
Isto é o que funcionou para mim quando tive este erro:
fonte
Você pode tentar adicionar esta função no arquivo RCTHTTPRequestHandler.m
- (void)URLSession:(NSURLSession *)session didReceiveChallenge:(NSURLAuthenticationChallenge *)challenge completionHandler:(void (^)(NSURLSessionAuthChallengeDisposition disposition, NSURLCredential *credential))completionHandler { completionHandler(NSURLSessionAuthChallengeUseCredential, [NSURLCredential credentialForTrust:challenge.protectionSpace.serverTrust]); }
fonte
Além das respostas acima mencionadas, verifique novamente o seu URL
fonte
Você deve adicionar
App Transport Security Settings
ainfo.plist
e adicioneAllow Arbitrary Loads
aApp Transport Security Settings
fonte