Eu tenho um aplicativo que funciona bem no Xcode6-Beta1 e Xcode6-Beta2 com iOS7 e iOS8. Mas com o Xcode6-Beta3, Beta4, Beta5, estou enfrentando problemas de rede no iOS8, mas tudo funciona bem no iOS7. Eu recebo o erro "The network connection was lost."
. O erro é o seguinte:
Erro: Domínio do erro = Código NSURLErrorDomain = -1005 "A conexão de rede foi perdida." UserInfo = 0x7ba8e5b0 {NSErrorFailingURLStringKey =, _kCFStreamErrorCodeKey = 57, NSErrorFailingURLKey =, NSLocalizedDescription = A conexão de rede foi perdida., _KCFStreamErrorDomainKey = 1, "
Eu uso o AFNetworking 2.xe o seguinte snippet de código para fazer a chamada de rede:
AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
[manager setSecurityPolicy:policy];
manager.requestSerializer = [AFHTTPRequestSerializer serializer];
manager.responseSerializer = [AFHTTPResponseSerializer serializer];
[manager POST:<example-url>
parameters:<parameteres>
success:^(AFHTTPRequestOperation *operation, id responseObject) {
NSLog(@“Success: %@", responseObject);
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
NSLog(@"Error: %@", error);
}];
Eu tentei, NSURLSession
mas ainda recebo o mesmo erro.
ios8
ios-simulator
xcode6
xcode6-beta5
VoidStack
fonte
fonte
Respostas:
Reiniciar o simulador corrigiu o problema para mim.
fonte
Tivemos esse erro exato e acabou sendo um problema com a implementação HTTP subjacente de
NSURLRequest
:Até onde sabemos, quando o iOS 8/9/10/11 recebe uma resposta HTTP com um
Keep-Alive
cabeçalho, ela mantém essa conexão para reutilizar mais tarde (como deveria), mas a mantém por mais do que otimeout
parâmetro do Cabeçalho Keep-Alive (parece sempre manter a conexão ativa por 30 segundos.) Em seguida, quando uma segunda solicitação é enviada pelo aplicativo menos de 30 segundos depois, ele tenta reutilizar uma conexão que pode ter sido descartada pelo servidor. (seKeep-Alive
tiver passado mais do que o real ).Aqui estão as soluções que encontramos até agora:
KeepAliveTimeout
opçãoBrowserMatch "iOS 8\." nokeepalive
no arquivo modsetenvif.conf
)Connection: close
cabeçalho: isso solicitará que o servidor interrompa a conexão imediatamente e responda sem nenhum cabeçalho manter vivo. MAS, no momento, o NSURLSession parece substituir oConnection
cabeçalho quando as solicitações são enviadas (não testamos essa solução extensivamente, pois podemos ajustar a configuração do Apache)fonte
NSURLErrorNetworkConnectionLost
constante em vez de codificar-1005
.Para o meu,
Resetting content and settings
do Simulator funciona. Para redefinir o simulador, siga as etapas:fonte
O tempo de execução do simulador do iOS 8.0 possui um erro no qual, se a configuração da rede mudar enquanto o dispositivo simulado é inicializado, as APIs de nível superior (por exemplo: CFNetwork) no tempo de execução simulado pensam que perderam a conectividade de rede. Atualmente, a solução recomendada é simplesmente reiniciar o dispositivo simulado quando a configuração da rede for alterada.
Se você for afetado por esse problema, registre radares duplicados adicionais em http://bugreport.apple.com para obter prioridade aumentada.
Se você vir esse problema sem ter alterado as configurações de rede, esse não é um bug conhecido e você definitivamente deve arquivar um radar, indicando que o problema não é o bug alterado na configuração de rede.
fonte
o que resolveu o problema para mim foi reiniciar o simulador e redefinir o conteúdo e as configurações.
fonte
Também tem um problema com o beta 5 e o AFNetworking 1.3 ao executar no simulador do iOS 8 que resulta em um erro de conexão:
O mesmo código funciona bem nos simuladores do iOS 7 e 7.1 e meu proxy de depuração mostra que a falha ocorre antes que uma conexão seja realmente tentada (ou seja, nenhuma solicitação registrada).
Rastreei a falha do NSURLConnection e relatei um erro à Apple. Veja a linha 5 na imagem em anexo:
.
Alterar para usar
https
permite a conexão de simuladores do iOS 8, embora com erros intermitentes.O problema ainda está presente no Xcode 6.01 (gm).
fonte
Eu estava com esse problema ao usar o Alamofire. Meu erro foi enviar um dicionário vazio
[:]
para os parâmetros em umaGET
solicitação, em vez de enviarnil
parâmetros.Espero que isto ajude!
fonte
A abertura de Charles resolveu o problema para mim, o que parece muito estranho ...
fonte
Veja o comentário de pjebs em 5 de janeiro no Github.
Método 1 :
Além disso, algumas sugestões para se reconectar ao site,
ou seja, disparando a solicitação POST DUAS VEZES
Solução: use um método para fazer a conexão com o site, return (id), se a conexão de rede foi perdida, volte a usar o mesmo método.
Método 2
fonte
Eu estava recebendo esse erro também, mas em dispositivos reais, e não no simulador. Percebemos o erro ao acessar nosso back-end heroku em HTTPS (servidor gunicorn) e fazer POSTS com grandes empresas (qualquer coisa acima de 64 KB). Usamos HTTP Basic Auth para autenticação e percebemos que o erro foi resolvido NÃO usando o
didReceiveChallenge:
método delegate em NSURLSession, mas inserindo a autenticação no cabeçalho da solicitação original por meio da adiçãoAuthentiation: Basic <Base64Encoded UserName:Password>
. Isso evita que o 401 necessário acione adidReceiveChallenge:
mensagem delegada e a conexão de rede subseqüente seja perdida.fonte
Eu tive o mesmo problema. Solução era simples, eu configurei
HTTPBody
, mas não definiuHTTPMethod
aPOST
. Depois de consertar isso, estava tudo bem.fonte
Eu tive o mesmo problema. Não sei como o AFNetworking implementa a solicitação https, mas o motivo é o problema de cache do NSURLSession.
Depois que meu aplicativo voltar do safari e postar uma solicitação http, o erro "falha no carregamento http 1005" será exibido. Se eu parar de usar
"[NSURLSession sharedSession]"
, mas usar uma instância configurável NSURLSession para chamar o método "dataTaskWithRequest:" da seguinte maneira, o problema será resolvido.Lembre-se de definir
config.URLCache = nil;
.fonte
Eu tive que sair do XCode, excluir o conteúdo da pasta DerivedData (~ / Library / Developer / Xcode / DerivedData ou / Library / Developer / Xcode / DerivedData) e sair do simulador para fazer esse trabalho.
fonte
Também tenho esse problema, executando em um dispositivo iOS 8. É detalhado um pouco mais aqui e parece ser um caso de iOS tentando usar conexões que já atingiram o tempo limite. Meu problema não é o mesmo que o problema do Keep-Alive, explicado nesse link, mas parece ser o mesmo resultado final.
Eu corrigi meu problema executando um bloco recursivo sempre que recebo um erro -1005 e isso faz com que a conexão acabe, mesmo que às vezes a recursão possa ser repetida por mais de 100 vezes antes da conexão funcionar, no entanto, apenas adiciona apenas um segundo à execução vezes e aposto que é exatamente o tempo que o depurador leva para imprimir o NSLog's para mim.
Eis como executo um bloco recursivo com o AFNetworking: Adicione este código ao seu arquivo de classe de conexão
Em seguida, use-o assim:
Você verá que eu uso uma
AFHTTPRequestOperation
subclasse, mas adicione seu próprio código de solicitação. A parte importante é ligarrecurse(@offset.intValue+1));
para que o bloco seja chamado novamente.fonte
Se o problema estiver ocorrendo em um dispositivo, verifique se o tráfego está passando por um proxy (Configurações> Wi-Fi> (informações)> Proxy HTTP). Eu tinha o meu dispositivo configurado para usar com Charles, mas esqueci o proxy. Parece que sem Charles realmente executando esse erro ocorre.
fonte
Se alguém receber esse erro ao fazer upload de arquivos para um servidor back-end, verifique se o servidor de recebimento possui um tamanho máximo de conteúdo permitido para sua mídia. No meu caso, o NGINX exigiu um valor mais alto
client_max_body_size
. O NGINX rejeitaria a solicitação antes que o upload fosse feito, para que nenhum código de erro voltasse.fonte
Eu estava recebendo o erro em um dispositivo iOS 7 quando estava usando o Xcode 6.2 beta.
Voltar ao Xcode 6.2 beta para 6.1.1 corrigiu o problema, pelo menos em um dispositivo iOS 7.
fonte
Na
2017-01-25
Apple, lançou uma sessão de perguntas e respostas técnicas sobre esse erro:fonte
Entendi o problema por meses e finalmente descobri que quando desabilitamos o DNSSEC em nosso domínio da API, tudo estava ok: simple_smile:
fonte
Eu estava me conectando através de uma VPN. Desativar a VPN resolveu o problema.
fonte
Eu estava atingindo esse erro ao passar um NSURLRequest para uma NSURLSession sem definir o HTTPMethod da solicitação .
Adicione o
HTTPMethod
, porém, e a conexão funcionará bemfonte
Teste se você pode solicitar outros aplicativos (como o safari). Caso contrário, pode ser algo no seu computador. No meu caso, tive esse problema com o Avast Antivirus, que estava bloqueando minha solicitação de simuladores (não me pergunte o porquê).
fonte
A reinicialização do computador corrigiu o problema para mim com o Xcode9.1. Eu havia reiniciado o simulador e o Xcode, ele não funciona.
fonte
Eu estava enfrentando o mesmo problema, ativei o Network Link Conditioner para testes de rede lentos para o aplicativo. Isso estava criando esse erro algumas vezes. Quando eu o desabilitei
Settings > Developer > Network Link Conditioner
, ele resolveu o meu problema.Espero que isso ajude alguém.
fonte
Além de todas as respostas, encontrei uma ótima solução. Na verdade, o problema relacionado à falha na conexão de rede para o iOS 12 onword ocorre porque há um erro no iOS 12.0 onword. E ainda a resolver. Eu havia passado pela comunidade do git hub por um problema relacionado ao AFNetworking quando o aplicativo veio de segundo plano e tenta fazer chamadas de rede e falha ao estabelecer a conexão. Eu passo 3 dias nisso e tenta muitas coisas para chegar à causa raiz disso e não encontrei nada. Finalmente, recebi alguma luz no escuro quando red neste blog https://github.com/AFNetworking/AFNetworking/issues/4279
Está dizendo que há um bug no iOS 12. Basicamente, você não pode esperar que uma chamada de rede seja concluída se o aplicativo não estiver em primeiro plano. E devido a esse bug, as chamadas de rede são descartadas e a rede falha nos logs.
Minha melhor sugestão para você é fornecer algum atraso quando o aplicativo estiver passando de segundo plano para primeiro plano e houver uma chamada de rede. Faça essa chamada de rede no envio assíncrona com algum atraso. Você nunca terá queda de chamadas de rede ou perda de conexão.
Não espere que a Apple deixe esse problema resolver para o iOS 12, pois ainda está para corrigir. Você pode seguir essa solução alternativa, fornecendo algum atraso para sua solicitação de rede, seja NSURLConnection, NSURLSession ou AFNetworking ou ALAMOFIRE. Felicidades :)
fonte
No meu caso, foi porque eu estava me conectando ao HTTP e estava sendo executado em HTTPS
fonte
Eu estava tendo esse problema pelo seguinte motivo.
TLDR: verifique se você está enviando uma
GET
solicitação que deve estar enviando os parâmetros no URL em vez de naNSURLRequest's HTTBody
propriedade.====================================================
Eu montei uma abstração de rede no meu aplicativo e estava funcionando muito bem para todos os meus pedidos.
Adicionei uma nova solicitação a outro serviço da web (não o meu) e ele começou a me exibir esse erro.
Fui a um playground e comecei do zero criando um pedido de barebones, e funcionou. Então comecei a me aproximar da minha abstração até encontrar a causa.
Minha implementação de abstração teve um erro: eu estava enviando uma solicitação que deveria enviar parâmetros codificados no URL e também preenchendo a
NSURLRequest's HTTBody
propriedade com os parâmetros de consulta. Assim que eu removi oHTTPBody
que funcionou.fonte
Eu estava recebendo esse erro e também percebe que o aplicativo Postman também estava caindo, mas estava trabalhando no aplicativo Advanced Rest Client (ARC) e no Android. Então, eu tive que instalar o Charles para depurar a comunicação e notei que o código de resposta era -1. O problema era que o programador REST esqueceu de retornar o código de resposta 200.
Espero que isso ajude outros desenvolvedores.
fonte
Sempre que ocorreu o erro -1005, é necessário chamar a API novamente.
Você precisa adicionar seu código para chamar a função novamente. Certifique-se de que você foi chamado de método uma vez caso contrário, seu loop recursivo de chamada.
fonte
Eu enfrentei o mesmo problema ao ligar usando o servidor da minha empresa a partir do aplicativo iOS 12 com um dispositivo físico. O problema era que o disco rígido do servidor estava cheio. Liberar espaço no servidor resolveu o problema.
Encontrei o mesmo erro em outra situação, devido a um tempo limite não parametrizável por meio da API de rede padrão fornecida pela Apple (
URLSession.timeoutIntervalForRequest
eURLSession.timeoutIntervalForResource
). Mesmo lá .. resposta do servidor feito mais rápido resolveu o problemafonte