Como posso adicionar NSAppTransportSecurity ao meu arquivo info.plist?

124

https://developer.apple.com/videos/wwdc/2015/?id=711 @ 5: 55

Não consigo adicionar isso ao meu info.plist. Não há valor. Estou executando o XCode versão 7.0 beta (7A121l) e testando no iOS9.

Como não posso declarar especificamente quais URLs quero como visto no vídeo, continuo recebendo "O App Transport Security bloqueou um carregamento de recurso HTTP (http: //) em texto não criptografado, pois é inseguro. Exceções temporárias podem ser configuradas através do aplicativo Arquivo Info.plist "erros.

No entanto, parece que não consigo configurá-lo. Alguma ideia?

chris P
fonte
Você realmente não tem mais uma pergunta, basta ir em frente e responder sua própria pergunta e depois aceitar o atraso apropriado.
Norman H
o que é um nome de domínio? este é um URL de base do servidor ou qualquer outro? e onde encontrar o nome de domínio do meu aplicativo?
Nik
Nome de domínio é um dos termos mais comuns usados. Bem, este é um que é comprado e, depois da hospedagem, você pode usá-lo como URL da base do servidor, usado para APIs. Não há nada como o nome de domínio do aplicativo. Portanto, você pode usar o nome de domínio como aquele em que as APIs são gravadas.
Ashish

Respostas:

131

tente Com isso --- funcionou para mim no Xcode-beta 4 7.0

<key>NSAppTransportSecurity</key>
<dict>
    <key>NSExceptionDomains</key>
    <dict>
        <key>yourdomain.com</key>
        <dict>
            <!--Include to allow subdomains-->
            <key>NSIncludesSubdomains</key>
            <true/>
            <!--Include to allow HTTP requests-->
            <key>NSTemporaryExceptionAllowsInsecureHTTPLoads</key>
            <true/>
            <!--Include to specify minimum TLS version-->
            <key>NSTemporaryExceptionMinimumTLSVersion</key>
            <string>TLSv1.1</string>
        </dict>
    </dict>
</dict>

Além disso, mais uma opção, se você deseja desativar o ATS, pode usar isto:

<key>NSAppTransportSecurity</key>  
 <dict>  
      <key>NSAllowsArbitraryLoads</key><true/>  
 </dict>

Mas isso não é recomendado. O servidor deve ter os certificados SSL e para que não haja vazamentos de privacidade.

Ashish
fonte
Tenho o XCode 7.2 (7C68) e modifiquei (desativando completamente o ATS) a lista info.pl do meu projeto de teste. Mas isto não está funcionando. Qualquer pista?
Sanandrea 30/01
geralmente ela não funciona ... você pode colar o código ur aqui e então podemos ver
Ashish
E também se você tem dois ou mais Domanis você tem que adicionar <key>NSAllowsArbitraryLoads</key> <true/><key>NSExceptionDomains</key> Caso contrário, para mim, não funcionou para versão de lançamento, por algum motivo
P.Lorand
90

É necessário adicionar apenas a chave NSAllowsArbitraryLoads a YES no dicionário NSAppTransportSecurity no seu arquivo info.plist.

Por exemplo,

 <key>NSAppTransportSecurity</key>
 <dict>
      <key>NSAllowsArbitraryLoads</key>
     <true/>
 </dict>

insira a descrição da imagem aqui

Hiren Varu
fonte
1
Esta é uma solução alternativa. A verdadeira questão é a morte com em @ de Ashish resposta
judepereira
45

Isso não estava funcionando para mim, mas fez o truque:

<key>NSAppTransportSecurity</key>  
     <dict>  
          <key>NSAllowsArbitraryLoads</key><true/>  
     </dict>  
Bobby
fonte
Eu acho que você quer dizer em <true/>vez de<YES/>
Clifton Labrum
1
Do ponto de vista da segurança, é exatamente dessa maneira, como NÃO fazer isso, porque ninguém nunca revisará esta seção do código e a atualizará para domínios especificados corretamente.
igraczech
1
Esta não é uma boa prática. Em vez disso, devemos permitir domínios específicos.
Ashish
1
Para outros iniciantes como eu: Certifique-se de colocá-lo na posição correta (no final, entre os existentes </dict>e as </plist>tags:
Pwdr
21

Só para esclarecer ... Você sempre deve usar o httpS

Mas você pode ignorá-lo adicionando a exceção:

insira a descrição da imagem aqui

Manuel Pardo
fonte
9

Xcode 8.2, iOS 10

<key>NSAppTransportSecurity</key>
<dict>
    <key>NSAllowsArbitraryLoads</key>
    <true/>
</dict>
Oleg Malovichko
fonte
4

Resposta de atualização (após o wwdc 2016):

IOS apps will require secure HTTPS connections by the end of 2016

O App Transport Security, ou ATS, é um recurso que a Apple introduziu no iOS 9. Quando o ATS é ativado, ele força um aplicativo a se conectar a serviços da Web por uma conexão HTTPS em vez de HTTP não seguro.

No entanto, os desenvolvedores ainda podem desativar o ATS e permitir que seus aplicativos enviem dados por uma conexão HTTP, conforme mencionado nas respostas acima. No final de 2016, a Apple tornará o ATS obrigatório para todos os desenvolvedores que esperam enviar seus aplicativos para a App Store. ligação

Paraneetharan Saravanaperumal
fonte
após o final deste ano, um novo aplicativo ou aplicativo de atualização sem usar https será rejeitado. e o aplicativo existente com o desvio? (eu preciso de uma atualização de força?)
Paraneetharan Saravanaperumal
2
<key>NSAppTransportSecurity</key>
<dict>
    <key>NSExceptionDomains</key>
    <dict>
        <key>com</key>
        <dict>
            <key>NSTemporaryExceptionAllowsInsecureHTTPLoads</key>
            <true/>
        </dict>
        <key>net</key>
        <dict>
            <key>NSTemporaryExceptionAllowsInsecureHTTPLoads</key>
            <true/>
        </dict>
        <key>org</key>
        <dict>
            <key>NSTemporaryExceptionAllowsInsecureHTTPLoads</key>
            <true/>
        </dict>
    </dict>
</dict>

Isso permitirá a conexão com .com .net .org

Subirdcom
fonte
Obrigado por um exemplo que mostra como adicionar vários domínios.
AtheistP3ace
2
<key>NSAppTransportSecurity</key>
    <dict>
        <key>NSExceptionDomains</key>
        <dict>
            <key>uservoice.com</key>
            <dict>
                <key>NSIncludesSubdomains</key>
                <true/>
                <key>NSExceptionRequiresForwardSecrecy</key>
                <false/>
            </dict>
        </dict>
    </dict>
Santhosh Legent
fonte
1

Para explicar um pouco mais sobre a resposta do ParaSara: A segurança do Transporte de aplicativos se tornará obrigatória e tentar desativá-lo pode levar o seu aplicativo a ser rejeitado.

Como desenvolvedor, você pode desativar a segurança do Transporte de Aplicativo se o código de rede não funcionar com ele e desejar continuar outro desenvolvimento antes de corrigir qualquer problema. Digamos que em uma equipe de cinco pessoas, quatro possam continuar trabalhando em outras coisas enquanto uma resolve todos os problemas. Você também pode desativar a segurança do App Transport como uma ferramenta de depuração se tiver problemas de rede e quiser verificar se eles são causados ​​pela segurança do App Transport. Assim que você souber, ligue-o novamente imediatamente.

A solução que você deve usar no futuro não é usar http, a menos que você use um servidor de terceiros que não suporte https. Se o seu próprio servidor não suportar https, a Apple terá um problema com isso. Mesmo com servidores de terceiros, eu não apostaria que a Apple aceite.

O mesmo acontece com as várias verificações de segurança do servidor. Em algum momento, a Apple aceitará apenas exceções justificáveis.

Mas, principalmente, considere o seguinte: você está colocando em risco a privacidade de seus clientes. Isso é um grande não-não no meu livro. Não faça isso. Corrija seu código, não peça permissão para executar um código não seguro.

gnasher729
fonte
1

Na linha de comando do shell do mac , use o seguinte comando:

plutil -insert NSAppTransportSecurity -xml "<array><string> hidden </string></array>" [location of your xcode project]/Info.plist 

O comando adicionará todos os valores necessários ao seu arquivo plist.

Avi Levin
fonte
1

XCODE 8, Swift 3: você precisa adicionar uma linha: **

"Configuração de segurança de transporte de aplicativos"

** na lista de propriedades info.plist inside information.

Robert Juamarcal
fonte
0

Xcode 9.2, Swift 4, isso funciona para mim.

<key>App Transport Security Settings</key>
<dict>
    <key>Allow Arbitrary Loads</key>
    <true/>
</dict>
hungmi
fonte