A implantação de aplicativos corporativos não funciona no iOS 7.1


317

Distribuímos aplicativos por meio de uma conta Enterprise, usando um itms-services://URL. Isso sempre funcionou bem, mas depois de instalar o iOS 7.1 beta em nosso iPad, ele se recusa a instalar. Em vez disso, recebemos a Cannot connect to example.commensagem genérica que o iOS exibe sem ajuda quando há algum tipo de problema ao baixar o aplicativo.

Não consegui encontrar nada aqui no SO, no Google ou nas notas de versão 7.1 para sugerir o que poderia estar causando o problema.


1
Isso também inclui o servidor de compilação que faz parte do Mavericks Server?
Dan

Isso foi quebrado para nós no nosso OS X Server também.
Toofah

talvez isso ajude teratotech.com/blog/...
HelmiB

Respostas:


330

Encontrei o problema conectando o iPad ao computador e visualizando o console através do XCode Organizer enquanto tentava instalar o aplicativo. O erro acaba sendo:

Não foi possível carregar o URL do manifesto que não é https: http://example.com/manifest.plist

Acontece que no iOS 7.1, o URL do manifest.plistarquivo deve ser HTTPS, onde estávamos usando HTTP. Alterar o URL para HTTPS resolveu o problema.

Ou seja,

itms-services://?action=download-manifest&url=http://example.com/manifest.plist

torna-se

itms-services://?action=download-manifest&url=https://example.com/manifest.plist

Eu diria que você precisa ter um certificado SSL válido para o domínio em questão. Já o fizemos, mas imagino que você terá problemas sem ele.


5
Você pode criar um certificado SSL autoassinado para o seu site. Não se esqueça de criar um perfil usando o Utilitário de configuração do iPhone para tornar o certificado confiável no seu dispositivo.
Niralp

1
@SantaClaus Você verificou se o link com "itms-services: //" contém https: // e não http: //? Além disso, verifique se você também contém o URL do IPA com HTTPS.
Niralp

3
Estou tendo o mesmo problema que o @Niralp. Eu configurei nosso servidor apache com certificado SSL autoassinado. O servidor parece estar funcionando com SSL muito bem, mas os links OTA ainda não funcionam e fornecem o erro relatado acima. Instalei o certificado no dispositivo iOS, mas isso também não fez diferença. Alguma ideia?
Toofah

5
Criei minha própria Autoridade de Certificação e assinei o certificado ssl do servidor da web. Através do Apple Configurator, você pode criar um perfil que marque essa CA como confiável. Depois disso, a instalação funciona conforme o esperado.
Monobono

1
Vale ressaltar que os URLs contidos no manifest.plist NÃO precisam ser HTTPS. Apenas o ITMS URL precisa ser HTTPS
Brody Robertson

233

ingconti está certo.

  1. Faça o upload do seu app.plist para o dropbox.
  2. Obtenha um link compartilhado do app.plist, como https://www.dropbox.com/s/qgknrfngaxazm38/app.plist
  3. substitua www.dropbox.compor dl.dropboxusercontent.comno link, como https://dl.dropboxusercontent.com/s/qgknrfngaxazm38/app.plist
  4. Remova quaisquer parâmetros no link compartilhável da caixa de depósito, como "? Dl = 0t" (conforme Carlos Aguirre Tradeco na implantação do aplicativo Enterprise não funciona no iOS 7.1 e na minha própria experiência).
  5. Crie um download.htmlarquivo com um link formatado como<a href="itms-services://?action=download-manifest&url=https://dl.dropboxusercontent.com/s/qgknrfngaxazm38/app.plist">INSTALL!!</a>
  6. Carregar sua download.htmlpara o dropbox
  7. Mais uma vez, obtenha um link compartilhado do download.html, como https://www.dropbox.com/s/gnoctp7n9g0l3hx/download.html , e remova todos os parâmetros.
  8. Substitua www.dropbox.compor dl.dropboxusercontent.comno segundo link também, como https://dl.dropboxusercontent.com/s/gnoctp7n9g0l3hx/download.html

Agora, visite o https://dl.dropboxusercontent.com/s/gnoctp7n9g0l3hx/download.htmlseu dispositivo, você pode instalar o aplicativo como antes.

QUE MUNDO MARAVILHOSO!


4
Isso salvou meu bacon! Obrigado, obrigado, obrigado!
bentford

13
obrigado ... sou um grande fã da Apple, mas começando a odiá-lo hoje em dia .. coz dessas coisas estúpidas que ruínas meu tempo ...
Karthik

1
Eu fiz todas as etapas acima. Estou enfrentando o mesmo problema como o DanM. O download é iniciado, mas após alguns segundos o alerta "... não pôde ser baixado no momento" é apresentado.
alper_k

1
Estou recebendo este erro: "Não é possível conectar ao dl.dropboxusercontent.com" onde tentar instalar <a href = "itms-services: //? Action = download-manifesto & amp; url = dl.dropboxusercontent.com/s/56ny312cwdacho7 /xxxxx.plist > com https
nano

1
I Got-lo .Previously i arquivos salvos na minha pasta privada, mais uma vez eu mudei aqueles a pasta pública .Não se esqueça de colocar arquivos na pasta pública .Cheers Oldman
Hariprasad.J

72

Além da resposta de Mark Parnell, uma maneira rápida e suja de contornar isso é colocar o manifesto no Dropbox e, em seguida, usar a interface da web do Dropbox para obter um link https direto para ele ('Compartilhar link' -> ' Obtenha o link '->' Download ').

O ipa real pode permanecer onde você sempre o serviu. Você precisará codificar por URL o URL do plist antes de inseri-lo na consulta do URL de serviços de itms (embora apenas substituir qualquer & s por% 3D possa funcionar).

Uma desvantagem é que a caixa de diálogo de instalação agora exibirá "dl.dropbox.com deseja instalar [o que for]].


Eu não pensei nisso! Obrigado!
Papai Noel

Demorou um pouco para obter um URL de valor (codificado), mas finalmente começou a funcionar. Obrigado!
David Dunham

Solução inteligente: D Obrigado!
precisa saber é o seguinte

Mike muito obrigado, finalmente funcionou! Lifesaver!
adamteale 23/01

Eu fiz uma ferramenta para ajudar com isso: otter-ota.herokuapp.com . Ele ajustará automaticamente os URLs de compartilhamento da sua caixa de depósito, gerará uma lista (já que o xcode não faz mais isso?) E criará o link e o HTML necessários. Ele também pode hospedar uma página de destino, se você desejar.
Sopa de

36

É verdade que, a partir de agora, espera-se que você faça todas as implantações do OTA por https, a partir do iOS7.1. Que vergonha para a Apple por não documentar isso.

Para aqueles que procuram uma solução interna melhor do que confiar no dropbox ou precisar desembolsar dinheiro para obter um certificado, você pode ter uma solução se seguir as etapas descritas na dica nº 5 aqui: http: // blog. httpwatch.com/2013/12/12/five-tips-for-using-self-signed-ssl-certificates-with-ios/

A essência disso é esta:

  • Crie seu próprio certificado de autoridade da CA que você pode instalar no dispositivo totalmente confiável (eu instalei simplesmente enviando um e-mail)
  • Crie o par de chaves / cer no certificado raiz e instale-o no servidor
  • Verifique se o servidor da Web utiliza o par de chaves / cer que corresponde ao certificado raiz da autoridade de autoridade de certificação
  • Nesse ponto, você poderá instalar seus aplicativos como de costume em https
  • Tudo isso pode ser realizado no OSX usando o openssl, que já está instalado por padrão.

Isso não é o mesmo que fazer um certificado autoassinado. Nesta solução, você também está atuando como sua própria Autoridade de Certificação privada. Se o seu certificado raiz instalado no dispositivo Apple não estiver marcado como Confiável (verde), algo está errado. Fazer de novo.

Isso absolutamente funciona.

Atualização: 13/3/2014 - Forneci um pequeno utilitário de linha de comando que simplifica todo esse processo. Você pode obtê-lo em: https://github.com/deckarep/EasyCert/releases


1
Muito agradável. Obrigado pelo resumo e pela ferramenta CL.
Alex Zavatone 13/03/2014

Passei apenas uma hora descobrindo isso. O uso de uma chave de 8192 bits para o seu certificado de CA falhará. O iOS importará seu certificado, mas não confiará nele por qualquer motivo. Uma chave CA de 4096 bits funciona.
EmeraldD.

1
@EmeraldD. Não há nenhum local no código: github.com/deckarep/EasyCert/blob/master/EasyCert.go que usa uma chave de 8192 bits. De fato, a ferramenta usa chaves 2048, como o artigo demonstra. Desculpe, você perdeu tempo.
Ralph Caraveo

@ ZhaoXiang Posso acrescentar isso. Você gostaria de registrar um problema aqui: github.com/deckarep/easycert/issues e, se possível, postar todos os comandos usados ​​para converter todos os arquivos, conforme necessário.
Ralph Caraveo

1
Esta é a resposta real pessoal, +1 :))
Tech_Intelliswift

33

Eu tinha o mesmo problema e, embora já estivesse usando um servidor SSL, simplesmente alterar os links para https não estava funcionando, pois havia um problema subjacente.

insira a descrição da imagem aqui Clique aqui para ver a imagem

O trecho destacado me disse que devemos ter a opção de confiar no certificado, mas como essa é a loja de aplicativos, trabalhando no Safari, essa sugestão de recuperação simplesmente não é apresentada.


Não fiquei satisfeito com as soluções existentes porque:

  • Algumas opções exigem dependência de terceiros (Dropbox)
  • Não estávamos dispostos a pagar por um certificado SSL
    • Certificados SSL gratuitos são apenas uma solução temporária.

Finalmente encontrei uma solução criando uma Autoridade de certificação raiz autoassinada e gerando o certificado SSL do nosso servidor usando isso.

Usei o Keychain Access e o OSX Server, mas existem outras soluções válidas para cada etapa


Criando uma autoridade de certificação

Pelo que entendi, as autoridades de certificação são usadas para verificar se os certificados são genuínos. Como estamos prestes a criar um nós mesmos, não é exatamente seguro , mas significa que você pode confiar em todos os certificados de uma determinada autoridade. Uma lista dessas autoridades geralmente é incluída por padrão em seus navegadores, pois eles são realmente confiáveis. (CA global da GeoTrust, Verisign etc.)

  • Abra o Keychain e use o assistente de certificado para criar uma autoridade

insira a descrição da imagem aqui

  • Preencha as informações da sua autoridade de certificação

insira a descrição da imagem aqui

  • Não sei se é necessário, mas tornei a autoridade confiável.

insira a descrição da imagem aqui


Gerando uma solicitação de assinatura de certificado

No nosso caso, as solicitações de assinatura de certificado são geradas pelo administrador do servidor. Simplesmente é um arquivo que pergunta "Posso ter um certificado com essas informações para o meu site, por favor".

  • Em seguida, você terá que criar sua solicitação de assinatura de certificado (usei o gerenciador de certificados do OSX Server para este bit

insira a descrição da imagem aqui

  • Preencha as informações do certificado (deve conter apenas caracteres ascii !, obrigado @Jasper Blues)

insira a descrição da imagem aqui

  • Salve o CSR de geração em algum lugar

insira a descrição da imagem aqui


Criando o certificado

Agindo como a autoridade de certificação novamente, cabe a você decidir se a pessoa que enviou o CSR é genuína e não está fingindo ser outra pessoa. As autoridades reais têm suas próprias maneiras de fazer isso, mas como você tem certeza de que é você, sua verificação deve ter certeza :)

  • Volte ao Acesso ao chaveiro e abra a opção "Criar um certificado ..", como mostrado

insira a descrição da imagem aqui

  • Arraste o CSR salvo para a caixa indicada

insira a descrição da imagem aqui

  • Clique no botão "Deixe-me substituir os padrões para esta solicitação"

insira a descrição da imagem aqui

  • Eu gosto de aumentar o período de validade.

insira a descrição da imagem aqui

  • Por alguma razão, precisamos preencher algumas informações novamente

insira a descrição da imagem aqui

  • Clique em continuar nesta tela

insira a descrição da imagem aqui

  • Certifique-se de clicar em AUTENTICAÇÃO DO SERVIDOR SSL , essa me causou algumas dores de cabeça.

insira a descrição da imagem aqui

  • Você pode clicar em continuar pelo restante das opções.

  • O aplicativo Mail será aberto, dando a você a chance de enviar o certificado. Em vez de enviar por e-mail, clique com o botão direito do mouse e salve-o.

insira a descrição da imagem aqui


Instalando o certificado

Agora precisamos configurar o servidor para usar o certificado que acabamos de criar para o tráfego SSL.

  • Se o dispositivo em que você está trabalhando for o servidor, é possível que o certificado já esteja instalado.

insira a descrição da imagem aqui

  • Caso contrário, clique duas vezes no certificado Pendente e arraste o arquivo PEM que acabamos de salvar do email para o espaço indicado. (Como alternativa, você pode exportar seu PEM do chaveiro se não o salvou.)

insira a descrição da imagem aqui

  • Atualize seu servidor para usar este novo certificado. Se você achar que o novo certificado não "aderirá" e continua revertendo, volte para o bit em BOLD ITALIC CAPS

insira a descrição da imagem aqui


Configurando dispositivos

Cada dispositivo em que você precisa instalar aplicativos precisará ter uma cópia dessa autoridade de certificação para que eles saibam que podem confiar em certificados SSL dessa autoridade.

  • Volte para o Keychain Access e exporte sua autoridade de certificação como .cer

insira a descrição da imagem aqui

  • Em seguida, coloco esse arquivo no meu servidor com meus aplicativos OTA, os usuários podem clicar neste link e baixar o certificado de autoridade. Enviar o certificado diretamente aos usuários também é uma opção válida.

insira a descrição da imagem aqui

  • Instale o certificado no seu dispositivo.

insira a descrição da imagem aqui


Teste

  • Verifique se os links do plist são https

    • Experimente e instale um aplicativo! Agora deve funcionar. A autoridade de certificação é confiável e o certificado SSL veio dessa autoridade.

Eu não entendi direito a última parte da sua resposta, isso significa que eu tenho que colocar o arquivo .cer no meu servidor, o usuário deve baixar o .cer via HTTP antes de instalar o ipa via HTTPS, está correto? ?
Zhao Xiang

Observe que o .cer não precisa ser sobre HTTP, pois o Safari apresentará a interface "Deseja confiar neste certificado" que a loja de aplicativos negligencia.
James Webster

1
Automatizei completamente esse processo com uma ferramenta de linha de comando fácil de usar que requer apenas dois parâmetros. Veja a minha resposta sobre: github.com/deckarep/EasyCert/releases
Ralph Caraveo

Estou usando o IIS no Windows Server, gerei um arquivo .cer e o coloquei no meu iPhone, mas ele ainda não funciona, não sabia o porquê. Acho que prefiro gastar algum dinheiro com a certificação agora.
Zhao Xiang

1
Observe também que o certificado que deve ser instalado no dispositivo é o Certificate Authoritycert e não o auto assinado cert SSL como eu erroneamente instalado inicialmente
NSTJ

6

Posso confirmar que funciona, mas você precisa colocar o html AND plist no dropbox. Também funciona para OTA não corporativo, ou seja, você deseja compartilhar o aplicativo com seu desenvolvedor. equipe.

Eu fiz:

a) no meu site, criei uma página com este link:

.. href = "https://dl.dropboxusercontent.com/u//(seu ID do banco de dados) /ipa.html"> MyApp

b) no DropBox, escrevi outra página HTML:

.. https://dl.dropboxusercontent.com/u/(seu ID do banco de dados) /MyApp.plist "> Toque para instalar o MyApp

c) moveu o plist no DropBox, mas deixou-o em PONTO no meu servidor antigo (sem https)


7
Eu não precisava colocar o html e parece funcionar muito bem. Apenas a lista foi suficiente.
Ben G

que plist é este btw? É o app.plist ou o gerado ao criar arquivos IPA?
user1872384

3

Abra o terminal e execute o comando: curl -i https: // (o caminho do arquivo .ipa não existe)

Isso informará se o instalador pode ou não ver o arquivo IPA. Se você executar o comando curl com o '-i', verá a resposta completa e provavelmente não é o arquivo IPA. Esta é a resposta que o instalador vê; portanto, se não estiver retornando HTTP 200 e um IPA, será necessário devolvê-lo.

O instalador do ITMS não salva nenhum contexto do Safari. Se você se autenticou em um portal seguro no Safari, os cookies de autenticação não são transmitidos ao instalador. ou seja, o instalador precisa poder ver o aplicativo sem autenticação e esse pode ser o motivo pelo qual você está recebendo 'Não é possível conectar ao servidor'.


Isso foi muito útil para mim. Obrigado!
Stanislav Pankevich

você está pedindo para executar o comando do aplicativo de terminal no iPhone ou no MACBook? Parece que também estou enfrentando o mesmo problema.
user867662

2

Eu tive o mesmo problema e fiz como mencionado acima.

  • Coloque o plist na caixa de depósito.
  • Sobre o botão de download do arquivo, abaixo de uma imagem do documento com o botão direito do mouse, selecione a ação do link de cópia. Este link já é algo como https://dl.dropboxusercontent.com/s/xyz123/app.plist?stuff=stuff com muitos parâmetros.
  • Remova os parâmetros (endereço mantido apenas entre https e .plist)
  • Procure por codificação de URL on-line, selecione um desses links, copie, cole, execute e, em seguida, o texto resultante será copiado e colado no html onde eu tenho o link itms-services. A propósito, eu tenho esse html em dois locais diferentes, um deles é onde o ipa está localizado.
  • Verifique se o plist inclui referências absolutas ao arquivo ipa.

Ambas as páginas funcionaram com sucesso para instalar o aplicativo em iphones com o ios 7.1

Mas agora os iphones com o ios 7.0x não podem instalar o aplicativo.

Criei uma nova pergunta: a implantação de aplicativos ad-hoc atualizados não funciona no ios anterior à 7.1

Ambas as questões estão intimamente relacionadas e também ligadas à falta de referências oficiais.



2

Se você tiver o AWS S3, também funciona como um encanto. Bem. Relativamente falando :-)

Crie um bucket para seus ad hocs na AWS, adicione um arquivo de índice (pode ser apenas um arquivo index.html em branco) e use um cliente que possa se conectar ao S3 como CyberDuck ou Coda (usei Coda - onde você selecionaria Adicionar Site para obter uma janela de conexão) e defina as conexões como as anexadas:

Em seguida, construa sua empresa ad hoc no XCode e use https://s3.amazonaws.com/your-bucket-name/your-ad-hoc-folder/your-app.ipa como o URL do aplicativo e faça o upload para o seu novo diretório de bucket S3.

Seu link itms deve corresponder, ou seja, itms-services: //? Action = download-manifesto & url = https://s3.amazonaws.com/your-bucket-name/your-ad-hoc-folder/your-app.plist

E voilá.

Isso é apenas para URLs genéricos da AWS - não tentei com URLs personalizados na AWS; portanto, talvez você precise fazer algumas coisas de maneira diferente.

Eu estava determinado a tentar fazer com que a solução de James Webster acima funcionasse, mas não consegui que ela funcionasse com o Plesk.


1

Como alternativa ao uso do Dropbox para distribuição corporativa, você pode usar o TestFlight para a distribuição de aplicativos assinados pela empresa.

https://www.testflightapp.com/

Este é um serviço fantástico para hospedagem e distribuição de compilações ad-hoc de desenvolvimento E compilações empresariais.


1
Ironicamente, o Testflight foi aparentemente adquirido pela Apple techcrunch.com/2014/02/21/…
Thunder Rabbit

1
Além disso, agora que o Testflight foi adquirido pela Apple, eles estão abandonando o suporte para Android.
Brody Robertson

1

Além das respostas anteriores sobre o Dropbox, implementei a seguinte árvore de arquivos, como apenas o arquivo PLIST deve ser carregado no Dropbox:

  1. faça o upload do arquivo ipa para o seu servidor em http (nenhuma alteração aqui)
  2. faça o upload do arquivo de provisionamento (.mobileprovision) para o servidor em http (sem alterações aqui)
  3. faça o upload do arquivo plist para sua caixa de depósito (não há alterações a fazer dentro do arquivo plist, pois os URLs são absolutos)
  4. use a opção "Compartilhar o link com o Dropbox", que copia o link para a área de transferência. Este link deve ser copiado para o seu arquivo html na consulta da URL itms-servivces após alterar a parte www.dropbox.compor dl.dropboxusercontent.com. Observe que o URL codificou o link conforme sugerido por @Mike, mas não testei sem fazê-lo. Agora, a consulta da URL itms-services deve ficar assim:itms-services://?action=download-manifest&url=https%3A%2F%2Fdl.dropboxusercontent.com%2Fs%2FYourShortDropboxLink.plist

  5. faça o upload do arquivo html para o seu servidor em http. Observe que o arquivo html contém os dois links para os arquivos ipa e de provisionamento.

  6. acesso ao seu arquivo html a partir do seu dispositivo e agora o ipa pode ser instalado pelo OTA como normalmente.

A partir de agora, apenas o arquivo ipa precisará ser alterado para fornecer as próximas versões de aplicativos da OTA aos seus testadores beta. Até que a Apple ainda esteja alterando as regras de segurança.

Associo-me aqui após o arquivo HTML muito simples que estou usando:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
    "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>iPhone app for test</title>
</head>
<body>
<h1>iPhone app for test</h1>
<br/>
<ul>
    <li><a href="http://www.yourdomain.com/with/directories/provision/v.last/yourprovision_adhoc.mobileprovision">
            Install Provisioning File</a></li>
    <li><a href="itms-services://?action=download-manifest&url=https%3A%2F%2Fdl.dropboxusercontent.com%2Fs%2FYourShortDropboxLink.plist">
            Install Application</a></li>
</ul>
</body>
</html>

1
FYI, link a seguir pode ser usado para codificar um URL: w3schools.com/tags/ref_urlencode.asp
Lisarien

0

Nossa equipe usa o dropbox para distribuição ad-hoc, que usa https, mas ainda assim nosso aplicativo falhou na instalação. Depois de muitos problemas, percebemos que o campo do título também é obrigatório. Sempre que enviamos um link sem esse campo, o safari ignorava o link e não solicitava a instalação do usuário. Às vezes, para testes rápidos de desenvolvimento, pulamos o nó do título no xml e não o preenchemos. Caso isso seja útil para qualquer pessoa que tenha esse problema, verifique se o arquivo .plist contém os seguintes nós:

      ....
     <string>software</string>
    <key>title</key>
     <string>Your App Name</string>
      ...

0

Depois de ler este post, eu ainda tinha um problema com o download do meu aplicativo. O problema ocorreu devido ao certificado SSL autoassinado.

Encontrei uma solução para esse problema. Você precisa fazer o upload do seu arquivo de certificado com a extensão '.crt' na Web e digitar o endereço no seu safari móvel. O sistema pergunta sobre como adicionar seu certificado à lista de certificados confiáveis. Após esta operação, você poderá instalar seu aplicativo ad-hoc.


0

A solução universal é conectar seu dispositivo ao Mac e observar o que está acontecendo durante a instalação. Eu recebi um erro:

Não foi possível carregar o manifesto de download com erro subjacente: Erro Domain = NSURLErrorDomain Code = -1202 "Não é possível conectar-se ao Store" UserInfo = 0x146635d0 {NSLocalizedDescription = Não é possível conectar-se ao Store, NSLocalizedRecoverySuggestion = Deseja se conectar ao servidor de qualquer maneira ?, NSLocalizedFailureReason = Não foi possível estabelecer uma conexão segura. Verifique suas configurações de data e hora. , NSErrorFailingURLStringKey = https://myserver.com/app/manifest.plist , NSUnderlyingError = 0x14678880 "O certificado para este servidor é inválido. Você pode estar se conectando a um servidor que está fingindo ser" myserver.com ", o que poderia colocar seu informações confidenciais em risco. ", NSURLErrorFailingURLPeerTrustErrorKey =, NSErrorFailingURLKey =https://myserver.com/app/manifest.plist }

Havia até a sugestão nesse erro de verificar as configurações de data. Por alguma razão, a data foi 1 de janeiro de 1970. A definição da data correta resolveu o problema.


-1

Apter tentou mudar itms-services://?action=download-manifest&url=http://....para itms-services://?action=download-manifest&url=https://..... Também não pode funcionar. O alerta é cannot connect to my domain. Descobri que também é necessário atualizar a página da web.

O problema não está no fato de o URL principal ser HTTPS, mas em parte do código HTML em um link dentro da página. Você precisará de seus desenvolvedores para atualizar a página da web. Também notei que não há um certificado SSL válido no seu domínio de temporariedade, então você precisará instalar um ou usar o Dropbox e aqui está o link que talvez seja útil para você

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.