Distribuição de atualização de aplicativo empresarial no iOS 8


111

Tenho um aplicativo empresarial que estou distribuindo por meio de um itmsURL:

itms-services://?action=download-manifest&url=itms-services://?action=download-manifest&url=https://$MY_PLIST_URL.plist

No iOS 7, os downloads e as atualizações funcionam bem. No iOS 8, no entanto, recebo o erro:

LoadExternalDownloadManifestOperation: Ignore manifest download, already have bundleID: com.mycom.MyApp

No meu plist, eu tenho

<key>bundle-identifier</key>
<string>com.mycom.MyApp</string>
<key>bundle-version</key>
<string>0.2.2</string>

e no meu aplicativo no iOS 8, estou executando a versão 0.2.1


1
Qual versão do iOS8 você está executando. Já ouvi falar de pessoas que têm problemas como esse com o Beta 5.
Anil Natha

7
Exatamente o mesmo problema. iOS 8 GM. Esses aplicativos simplesmente se recusam a baixar agora.
Carl Sjogreen

3
Estou executando o ios8.0 oficialmente lançado e a instalação não inicia. Dei uma olhada no console e há uma mensagem dizendo: "<Warning>: LoadExternalDownloadManifestOperation: Ignorar download de manifesto, já tem bundleID: MYBUNDLENAME" ... restaurar o dispositivo ou alterar o id do pacote
resolverá o problema


1
@pcperini acho que as respostas do outro post têm mais informações. Sem intenção de ofender.
Kristopher Johnson

Respostas:


91

Também encontrei esse problema com a distribuição de nosso aplicativo. Conseguimos corrigir esse problema 'falsificando' o identificador de pacote dentro do .plist usando para distribuição de download, mantendo o mesmo identificador de pacote ipa.

Por exemplo, em seu plist:

<key>bundle-identifier</key>
<string>com.mycom.MyApp</string>
<key>bundle-version</key>
<string>0.2.2</string>

altere com.mycom.MyApp para com.mycom.MyApp.ios8fix

O aplicativo será instalado usando um novo ícone de aplicativo, que desaparecerá após a instalação.

Se você já instalou o aplicativo, verá um novo ícone do aplicativo durante a instalação. Após a instalação, este ícone desaparece, mas sua versão já existente do aplicativo será atualizada. Com uma instalação limpa, o ícone de instalação desaparecerá e o ícone do aplicativo instalado aparecerá no lugar.

Parece que o iOS 8 está armazenando em cache os identificadores de pacote e compara as instalações solicitadas com essas instalações em cache. Na maioria das vezes, você verá apenas um pop-up solicitando a instalação, mas nada acontece.

Como Sean já notou, isso aparece com o xCode 6 GM e a versão oficial do iOS 8. Dispositivos que nunca instalaram seu aplicativo antes não terão problemas para instalar o aplicativo.


3
Funciona em alguns dispositivos, mas em outros dispositivos, o syslog ainda mostra o id do pacote anterior, até eu mudei o arquivo plist.
templo de

Na verdade, fornecer imagens é a solução correta - verifique esta resposta stackoverflow.com/a/26283611/276656
mspasov

3
No meu caso, alterar o identificador de pacote funcionou em alguns dispositivos - não em todos. Depois de mudar o caminho para o próprio plist, resolvi isso para mim.
pawi

1
Onde está o .plist para editar se você estiver baixando o aplicativo do servidor Xcode?
Collin

1
Esta resposta stackoverflow.com/a/28727958/108040 funcionou melhor para nós, já que você não precisa alterar o .plist
Robin

24

Isso funcionou melhor para mim, sem necessidade de mexer no seu manifesto ou outro truque (perfeito para o servidor Xcode onde o plisté gerado automaticamente):

  1. Faça download do iExplorer ( http://www.macroplant.com/iexplorer/ )
  2. Conecte seu dispositivo
  3. Exclua todos os arquivos em "Mídia> Downloads"
  4. Dispositivo de reinício

Isso redefine os caches do dispositivo, agora você pode instalar seu aplicativo normalmente.


3
Obrigado, você é um salva-vidas. Eu uso o iBrowse ( ibrowseapp.com ) que é gratuito da Macroplant
Min Soe

2
Funcionou muito bem para nós ... não se esqueça de reiniciar o dispositivo após excluir o conteúdo de Mídia -> Downloads
Robin

obrigado fez o trabalho! Mas ainda pensando que isso precisa ser feito no celular de cada usuário!
Ammar Mujeeb

A função "Apagar todo o conteúdo e configurações" (no aplicativo Configurações) funciona?
onmyway133 de

Qual é o conteúdo da pasta Downloads?
HamzaGhazouani 01 de

16

Eu estou tendo o mesmo problema. Eu o reproduzi por:

1) Ter meu aplicativo instalado durante a atualização do iOS 7 para o iOS 8 GM

2) Removendo no iOS 8

3) Tentando instalá-lo via itms-services: com o mesmo nome de pacote

Quando tentei alterar o identificador de pacote no plist do servidor (não nos aplicativos Info.plist), funcionou (o aplicativo foi baixado e não permaneceu nenhum ícone de "sombra"). Mas parece um inseto da maçã.


1
Mas você também tem que mudar o nome do bundle no app, não é? Tentei apenas alterar a plist do servidor e o resultado é: 18 de setembro 09:59:20 XXX-iPhone filecoordinationd [123] <Warning>: sandboxing negou inscrição para progresso na categoria com.mo2o.XXX (id do pacote com.apple.iaptransportd , 037BE63A-8737-4A4B-9C9D-B8FAF8DC0D40) 18 de setembro 09:59:20 XXX-iPhone filecoordinationd [123] <Warning>: sandboxing negou inscrição para progresso na categoria com.mo2o.XXX (id do pacote (nulo), 0B9D3B2A- 2B5D-4882-8771-61784326E507) e o aplicativo não instala
Eva Madrazo

mmm Não estou certo, ele registra o aviso, mas também instala o aplicativo.
Eva Madrazo

Isso funciona bem, mas há uma pequena desvantagem. Durante a instalação, o dispositivo não sabe qual aplicativo você está atualizando, então você verá um segundo ícone de aplicativo durante a instalação. Após a instalação, isso é corrigido automaticamente.
Ivo Jansch

4
É interessante notar que naquele artigo bulldozer.io diz "parece que os dispositivos que têm um certificado de desenvolvedor instalado não são afetados". Não está claro o que significa 'certificado de desenvolvedor' (acho que um perfil de provisionamento de desenvolvimento que 'cobre' o aplicativo em questão), mas isso pode explicar os problemas de reprodução do problema em dispositivos diferentes.
Astletron 02 de

11

A solução aceita não funciona mais no iOS9.

Meu entendimento é que a Apple fechou uma brecha séria na segurança do iOS, impedindo que binários adhoc substituíssem aplicativos de estoque ou aplicativos baixados da App Store. Consulte este artigo para obter os antecedentes (CVE-2015-3722 / 3725 e CVE-2015-3725):

https://www.fireeye.com/blog/threat-research/2015/06/three_new_masqueatt.html

Considerando as implicações de segurança, eu não esperaria que esse comportamento mudasse nas versões futuras do IOS. As opções alternativas parecem ser:

  • exclua a versão da App Store antes de instalar o adhoc
  • distribuir o adhoc como 'novo' aplicativo alterando o id do pacote tanto no aplicativo quanto no plist de distribuição
  • usar TestFlight

Parece que você está certo. Ele funciona bem em novas instalações ou na atualização de uma versão adhoc anterior do aplicativo, mas não funciona quando a versão instalada foi instalada da App Store.
Charles,

Aqui está outra dica de por que a Apple fez a mudança: loopinsight.com/2015/10/05/…
Frans

Embora eu entenda a necessidade de fechar a segurança, isso nos coloca em um cenário interessante, onde não podemos testar atualizações de uma versão para outra na versão implementada sem ir para TestFlight. Parece que um aplicativo assinado por um perfil ad-hoc e certificado para o mesmo desenvolvedor pode ser atualizado.
Lidsinker

@charles , "Funciona bem em novas instalações ou atualizando uma versão adhoc anterior do aplicativo", você testou? porque encontramos este problema adhoc de atualização adhock no IOS9 ...
flypig

@flypig Eu tinha tentado no iOS 9 na época e funcionou. Não tentei desde então, desculpe.
Charles

9

O que Gil disse parece estar correto, mas, mais especificamente, descobri que também precisava incrementar a string de versão do pacote no server.plist:

    <key>bundle-version</key>
    <string>3.2.2</string>

Isso pelo menos permite que você realize uma instalação OTA.

(Desculpe ... Teria adicionado comentários, mas sou muito n00b.)


9

Dê uma olhada nesta resposta e nesta resposta .

Você pode corrigir esse problema sem qualquer hacks, para iOS8 você deve incluir na assetschave do .plistarquivo de manifesto o display-imageefull-size-image chaves . Eles estavam disponíveis no Xcode 5 ao salvar um arquivo para implantação corporativa e add-hoc, mas não eram necessários.

Eu criei uma essência no github com o modelo para o arquivo install-manifet.plist .


7
Na verdade, eu estava tendo esse problema com as duas chaves incluídas.
Sean Danzeiser

sim eu mudei o identificador do pacote e funcionou. Não estou entusiasmado com isso.
Sean Danzeiser

Ótimo! Também movo tudo para uma subpasta e ajusto apenas o MD5 do arquivo ipa.
Felipe FMMobile

3

Este é um bug encontrado pela primeira vez no iOS8 Beta5. E ainda não foi corrigido pela Apple na semente GM e na versão oficial iOS8.0. Mais discussões podem ser encontradas aqui

A solução alternativa atual sendo testada por mim:

  • Se você não se importa com o conteúdo do seu dispositivo: faça uma restauração limpa no modo DFU do dispositivo
  • Se você quer suas coisas de volta
    1. Faça backup do seu dispositivo iOS no iTunes antes de restaurar (sem Ad-Hoc / aplicativo empresarial)
    2. Depois de restaurar seu dispositivo de forma limpa, instale seu aplicativo Ad-Hoc / empresarial
    3. Restaure seu backup do iTunes
    4. Agora você está livre para excluir esses aplicativos Ad-Hoc / corporativos e reinstalá-los.

1
Ainda não corrigido no 8.1
Kevin

2
Ainda não corrigido em 8.2 ....... Talvez apenas nós 15 pessoas no mundo façamos aplicativos corporativos.
Karl Heinz Brehme Arredondo

3

Problema resolvido alterando o identificador do pacote em plist.

Normalmente, depois de tocar no link itms, ele mostrará a área de trabalho que mostra o ícone de instalação. No entanto, para meu dispositivo iOS 8.0, após tocar no link itms, ele não mudará para a página de instalação, mas a instalação já está funcionando antes.


2

Isso é extremo, mas se você não pode alterar seu identificador de pacote, o que eu não podia, restaurar seu iPhone através do iTunes para o iOS 8 mais recente e restaurar de um backup corrige o problema.


Você não deve restaurar o iPhone - apenas algumas etapas updraft.beekeeper.io/post/2046721
Sergey Kopanev

1

O mesmo problema existe no iOS 10 beta 1.

31 de dezembro 19:01:32 iphone-6s itunesstored [98]: LoadExternalDownloadManifestOperation: Ignorar o download do manifesto, já tem bundleID: com. ***************. Ios com fase: SSDownloadPhaseWaiting

Uma coisa que não entendi aqui é que a data é 31 de dezembro no log do dispositivo XCode, no entanto, o dispositivo tem data e hora corretas configuradas.

Atualização: O pessoal do HockeyApp notificou a Apple sobre esse problema durante a WWDC e a correção deve vir na próxima semente.


1
mesmo problema no iOS 10
Crossle Song

0

Se você construir seus aplicativos iOS com um script de construção e antes estava usando PackageApplication com o sinalizador --sign, isso pode estar causando problemas. O sinalizador --sign não funciona mais ao construir no 10.10 e removê-lo fez com que todos os nossos aplicativos iOS fossem instalados novamente.

consulte: https://devforums.apple.com/thread/251624?tstart=0


Isso está tratando de uma questão diferente e está relacionada à construção, e não à instalação, como o OP está pedindo.
wottle

Discordo. Houve uma mudança de comportamento introduzida em b5 que faz com que os IPAs assinados não carreguem. Supondo que o OP não tenha erros em seu arquivo de manifesto, é praticamente garantido que um IPA assinado não seja instalado com exatamente o erro fornecido. Já que eles não mencionam como construíram seu IPA, não posso dizer ao certo por que está falhando. Por outro lado, remover sigs de nossos IPAs fez com que todos fossem instalados novamente.
James Moore

Isso pode ser verdade, mas se você observar o erro especificado na pergunta original: "Ignorar o download do manifesto, já tem bundleID:", ele está obviamente relacionado ao agora amplamente discutido bug do iOS8 em aplicativos corporativos e à incapacidade de instalar um aplicativo que foi instalado antes da atualização para iOS8, desinstalando depois de atualizar para iOS8. Você pode estar tratando de um problema, mas não é o problema do OP.
wottle

0

Certifique-se de ter acesso total à Internet.

Eu estava enfrentando o mesmo problema com a instalação OTA e IOS8. Como estou atrás de um proxy corporativo, as soluções acima não funcionaram até que eu defina as configurações manuais de proxy (não necessárias no IOS7) para resolver esse problema.


0

Acabei de encontrar esse problema em um dispositivo com 8.1, atualizar o dispositivo para 8.3 resolveu o problema. Portanto, ou o bug não está mais presente no 8.3 .... ou o ato de atualizar limpou os dados armazenados em cache de qualquer maneira.

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.