Dystrybucja aktualizacji aplikacji dla przedsiębiorstw w systemie iOS 8

111

Mam aplikację dla przedsiębiorstw, którą rozpowszechniam za pośrednictwem itmsadresu URL:

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

W systemie iOS 7 zarówno pobieranie, jak i aktualizacje działają poprawnie. Jednak na iOS 8 pojawia się błąd:

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

W moim plista mam

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

aw mojej aplikacji na iOS 8 używam wersji 0.2.1

Patrick Perini
źródło
1
Którą wersję iOS8 używasz. Słyszałem, że ludzie mają takie problemy z Beta 5.
Anil Natha,
7
Dokładnie ten sam problem. iOS 8 GM. Te aplikacje po prostu odmawiają pobrania teraz.
Carl Sjogreen
3
Używam oficjalnie wydanego ios8.0, a instalacja się nie rozpocznie. Rzuciłem okiem na konsulę i pojawił się komunikat: „<Warning>: LoadExternalDownloadManifestOperation: Ignoruj ​​pobieranie manifestu, już mam bundleID: MYBUNDLENAME” ... przywrócenie urządzenia lub zmiana identyfikatora pakietu
załatwi sprawę
możliwy duplikat iOS 8 - nie można zainstalować aplikacji korporacyjnej
Kristopher Johnson
1
@pcperini Myślę, że odpowiedzi w innym poście zawierają więcej informacji. Bez zamierzonej obrazy.
Kristopher Johnson

Odpowiedzi:

91

Napotkałem również ten problem z naszą dystrybucją aplikacji. Udało nam się rozwiązać ten problem przez „sfałszowanie” identyfikatora pakietu wewnątrz pliku .plist przy użyciu do dystrybucji pobierania, zachowując ten sam identyfikator pakietu ipa.

Na przykład w swoim plist:

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

zmień com.mycom.MyApp na com.mycom.MyApp.ios8fix

Aplikacja zostanie zainstalowana przy użyciu nowej ikony aplikacji, która zniknie po zainstalowaniu.

Jeśli masz już zainstalowaną aplikację, podczas instalacji zobaczysz nawet nową ikonę aplikacji. Po instalacji ta ikona znika, ale Twoja już istniejąca wersja aplikacji zostanie zaktualizowana. Po czystej instalacji ikona instalacji zniknie, a ikona zainstalowanej aplikacji pojawi się na miejscu.

Wygląda na to, że iOS 8 buforuje identyfikatory pakietów i porównuje żądane instalacje z tymi z pamięci podręcznej. W większości przypadków zobaczysz tylko wyskakujące okienko z prośbą o instalację, ale nic się nie dzieje.

Jak już zauważył Sean, pojawia się to z xCode 6 GM i oficjalną wersją iOS 8. Urządzenia, które nigdy wcześniej nie instalowały Twojej aplikacji, nie będą miały problemów z zainstalowaniem aplikacji.

Antoine
źródło
3
Działa na niektórych urządzeniach, ale inne urządzenie syslog nadal pokazuje poprzedni identyfikator pakietu, nawet ja zmieniłem plik plist.
świątynia
Właściwie dostarczenie obrazów jest właściwym rozwiązaniem - sprawdź tę odpowiedź stackoverflow.com/a/26283611/276656
mspasov
3
W moim przypadku zmiana identyfikatora pakietu zadziałała na niektórych urządzeniach - nie na wszystkich. Po zmianie ścieżki na plist sam rozwiązał to za mnie.
pawi
1
Gdzie jest plik .plist do edycji, jeśli pobierasz aplikację z serwera Xcode?
Collin
1
Ta odpowiedź stackoverflow.com/a/28727958/108040 działała dla nas lepiej, ponieważ nie musisz zmieniać pliku .plist
Robin
24

To działało lepiej dla mnie, nie trzeba dotykać swojego manifestu ani innych sztuczek (idealne dla Xcode Server, gdzie plistjest generowany automatycznie):

  1. Pobierz iExplorer ( http://www.macroplant.com/iexplorer/ )
  2. Podłącz urządzenie
  3. Usuń wszystkie pliki w „Media> Pobrane”
  4. Uruchom ponownie urządzenie

Spowoduje to zresetowanie pamięci podręcznych urządzenia. Teraz możesz normalnie zainstalować aplikację.

jlpiedrahita
źródło
3
Dzięki, ratujesz życie. Używam iBrowse ( ibrowseapp.com ), który jest wolny od Macroplant
Min Soe
2
To zadziałało świetnie dla nas ... nie zapomnij ponownie uruchomić urządzenia po usunięciu zawartości Media -> Downloads
Robin
dzięki wykonał robotę! Ale wciąż myślę, że trzeba to zrobić na telefonie każdego użytkownika!
Ammar Mujeeb
Czy funkcja „Wymaż całą zawartość i ustawienia” (w aplikacji Ustawienia) działa?
onmyway133
Jaka jest zawartość folderu Pobrane?
HamzaGhazouani
16

Mam ten sam problem. Przekopiowałem to przez:

1) Zainstalowanie mojej aplikacji podczas aktualizacji z iOS 7 do iOS 8 GM

2) Usunięcie go w iOS 8

3) Próba zainstalowania go przez itms-services: z tą samą nazwą pakietu

Kiedy próbowałem zmienić identyfikator pakietu w plistie serwera (nie w aplikacjach Info.plist), zadziałało (aplikacja została pobrana, pozostała ikona "cienia"). Ale wygląda jak błąd jabłka.

Gil Hartman
źródło
1
Ale musisz też zmienić nazwę pakietu w aplikacji, prawda? Próbowałem tylko zmienić nazwę serwera, a wynik jest następujący: 18 września 09:59:20 XXX-iPhone filecoordinationd [123] <Ostrzeżenie>: odmowa subskrypcji piaskownicy na postęp w kategorii com.mo2o.XXX (identyfikator pakietu com.apple.iaptransportd , 037BE63A-8737-4A4B-9C9D-B8FAF8DC0D40) 18 września 09:59:20 Koordynacja plików XXX-iPhoned [123] <Ostrzeżenie>: odmówiono subskrypcji piaskownicy do postępu w kategorii com.mo2o.XXX (identyfikator pakietu (null), 0B9D3B2A- 2B5D-4882-8771-61784326E507), a aplikacja nie instaluje się
Eva Madrazo
mmm, nie mam racji, rejestruje ostrzeżenie, ale także instaluje aplikację.
Eva Madrazo
Działa to dobrze, jest jednak niewielka wada. Podczas instalacji urządzenie nie wie, którą aplikację aktualizujesz, więc podczas instalacji zobaczysz drugą ikonę aplikacji. Po instalacji jest to jednak automatycznie korygowane.
Ivo Jansch,
4
Warto zauważyć, że w artykule bulldozer.io jest napisane „wydaje się, że nie dotyczy to urządzeń z zainstalowanym certyfikatem programisty”. Nie jest jasne, co oznacza „certyfikat dewelopera” (wydaje mi się, że programistyczny profil udostępniania, który „obejmuje” daną aplikację), ale może to wyjaśniać problemy z odtwarzaniem problemu na różnych urządzeniach.
astletron
11

Przyjęte rozwiązanie nie działa już na iOS9.

Rozumiem, że firma Apple zamknęła poważną lukę w zabezpieczeniach systemu iOS, uniemożliwiając plikom binarnym adhoc zastępowanie standardowych aplikacji lub aplikacji pobranych z App Store. Informacje ogólne można znaleźć w tym artykule (CVE-2015-3722 / 3725 i CVE-2015-3725):

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

Biorąc pod uwagę wpływ na bezpieczeństwo, nie spodziewałbym się, że to zachowanie zmieni się w przyszłych wersjach IOS. Wydaje się, że alternatywne opcje to:

  • usuń wersję App Store przed zainstalowaniem pliku adhoc
  • rozpowszechniać adhoc jako „nową” aplikację, zmieniając identyfikator pakietu zarówno w aplikacji, jak i na liście dystrybucyjnej
  • użyj TestFlight
Frans
źródło
Wygląda na to, że masz rację. Działa dobrze przy nowych instalacjach lub aktualizowaniu poprzedniej wersji adhoc aplikacji, ale nie działa, gdy zainstalowana wersja została zainstalowana z App Store.
charles
Oto kolejna wskazówka, dlaczego Apple dokonał zmiany: loopinsight.com/2015/10/05/ ...
Frans
Chociaż rozumiem potrzebę zamknięcia zabezpieczeń, stawia nas to w interesującym scenariuszu, w którym nie możemy testować aktualizacji z jednej wersji do drugiej we wdrożonej wersji bez przechodzenia do TestFlight. Wydaje się, że aplikacja podpisana profilem ad-hoc i certyfikatem dla tego samego programisty powinna móc zostać zaktualizowana.
lidsinker
@charles , „Działa dobrze przy nowych instalacjach lub aktualizowaniu poprzedniej wersji aplikacji adhoc”, czy przetestowałeś ją? ponieważ napotykamy ten problem z aktualizacją adhock adhoc w IOS9 .....
flypig
@flypig Próbowałem go wtedy na iOS 9 i zadziałało. Nie próbowałem od tamtej pory, przepraszam.
charles
9

To, co powiedział Gil, wydaje się być poprawne, ale mówiąc dokładniej, odkryłem, że muszę również zwiększyć ciąg wersji pakietu w pliku server.plist:

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

To przynajmniej pozwala na wykonanie instalacji OTA.

(Przepraszam ... dodałbym do komentarzy, ale jestem zbyt wielkim n00b.)

Cfold
źródło
9

Spójrz na tę odpowiedź i tę odpowiedź .

Możesz rozwiązać ten problem bez żadnych hacków, w przypadku iOS8 musisz uwzględnić w assetskluczu .plistpliku manifestu klucze display-imagei full-size-image. Były dostępne w Xcode 5 podczas zapisywania archiwum na potrzeby wdrożenia korporacyjnego i add-hoc, ale nie były wymagane.

Stworzyłem sedno na githubie z szablonem pliku install-manifet.plist .

alexcristea
źródło
7
W rzeczywistości miałem ten problem z oboma tymi kluczami.
Sean Danzeiser
tak, zmieniłem identyfikator pakietu i zadziałało. Nie jestem tym zachwycony.
Sean Danzeiser
Wspaniały! Przeniosłem też wszystko do podfolderu i dostosowałem tylko MD5 pliku ipa.
Felipe FMMobile
3

To błąd po raz pierwszy znaleziony w iOS8 Beta5. I nadal nie został naprawiony przez Apple w nasionach GM i oficjalnej wersji iOS 8.0. Więcej dyskusji można znaleźć tutaj

Obecne obejście jest testowane przeze mnie:

  • Jeśli nie obchodzi Cię zawartość urządzenia: wykonaj czyste przywracanie w trybie DFU urządzenia
  • Jeśli chcesz odzyskać swoje rzeczy
    1. Wykonaj kopię zapasową urządzenia iOS w iTunes przed przywróceniem (bez aplikacji Ad-Hoc / Enterprise)
    2. Po prawidłowym przywróceniu urządzenia zainstaluj aplikację Ad-Hoc / Enterprise
    3. Przywróć kopię zapasową z iTunes
    4. Teraz możesz usunąć te aplikacje Ad-Hoc / Enterprise i ponownie je zainstalować.
Xiao
źródło
1
Nadal nie naprawiono w 8.1
Kevin
2
Nadal nie naprawiono w 8.2 ....... Może tylko 15 osób na świecie tworzy aplikacje dla przedsiębiorstw.
Karl Heinz Brehme Arredondo
3

Problem rozwiązany przez zmianę identyfikatora pakietu w plist.

Zwykle po stuknięciu łącza itms wyświetli się pulpit, na którym zostanie wyświetlona instalacja ikony. Jednak w przypadku mojego urządzenia z systemem iOS 8.0 po dotknięciu łącza itms nie zmieni się na stronę instalacji, ale instalacja już działa.

Tallent Siu
źródło
2

Jest to ekstremalne, ale jeśli nie możesz zmienić identyfikatora pakietu, czego nie mogłem, przywrócenie iPhone'a przez iTunes do najnowszego iOS 8 i przywrócenie z kopii zapasowej rozwiązuje problem.

pho0
źródło
Nie powinieneś przywracać iPhone'a - tylko kilka kroków updraft.beekeeper.io/post/2046721
Sergey Kopanev
1

Ten sam problem występuje w iOS 10 beta 1.

31 grudnia 19:01:32 iphone-6s itunesstored [98]: LoadExternalDownloadManifestOperation: Ignoruj ​​pobieranie manifestu, już pakiet ID: com. ***************. Ios z fazą: SSDownloadPhaseWaiting

Jedyną rzeczą, której tutaj nie rozumiem, jest to, że data to 31 grudnia w dzienniku urządzenia XCode, jednak urządzenie ma skonfigurowaną poprawną datę i godzinę.

Aktualizacja: Faceci z HockeyApp powiadomili Apple o tym problemie podczas WWDC i poprawka powinna pojawić się w następnym ziarnie.

Alex Sorokoletov
źródło
1
ten sam problem na iOS 10
Crossle Song,
0

Jeśli tworzysz aplikacje na iOS za pomocą skryptu kompilacji i wcześniej korzystałeś z PackageApplication z flagą --sign, może to powodować problemy. Flaga --sign nie działa już podczas tworzenia wersji 10.10, a jej usunięcie spowodowało ponowne zainstalowanie wszystkich naszych aplikacji na iOS.

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

James Moore
źródło
To dotyczy innego problemu i jest związane z budowaniem, a nie instalacją, o co prosi PO.
wottle
Nie zgadzam się. W b5 wprowadzono zmianę zachowania, która powoduje, że podpisane IPA nie ładują się. Zakładając, że OP nie ma błędów w swoim pliku manifestu, wtedy podpisany IPA jest praktycznie gwarantowany, że instalacja się nie powiedzie z dokładnie podanym błędem. Ponieważ nie wspominają o tym, jak zbudowali swój IPA, nie mogę powiedzieć na pewno, dlaczego zawodzi. Z drugiej strony usunięcie sygnatur z naszych IPA spowodowało, że wszystkie zostały ponownie zainstalowane.
James Moore
To może być prawda, ale jeśli spojrzysz na błąd określony w pierwotnym pytaniu: „Ignoruj ​​pobieranie manifestu, już masz bundleID:”, jest to oczywiście związane z szeroko omawianym błędem iOS8 w aplikacjach korporacyjnych i niemożnością zainstalowania aplikacji który został zainstalowany przed aktualizacją do iOS8, a następnie odinstalowany po uaktualnieniu do iOS8. Być może rozwiązujesz problem, ale nie jest to problem, który ma OP.
wottle
0

Upewnij się, że masz pełny dostęp do Internetu.

Miałem ten sam problem z instalacją OTA i IOS8. Ponieważ jestem za korporacyjnym serwerem proxy, powyższe rozwiązania nie działały, dopóki nie skonfigurowałem ręcznych ustawień proxy (niepotrzebne w IOS7), aby rozwiązać ten problem.

creal
źródło
0

Właśnie napotkałem ten problem na urządzeniu z systemem 8.1, uaktualnienie urządzenia do wersji 8.3 rozwiązało problem. Więc albo błąd nie jest już obecny w 8.3 ... albo aktualizacja i tak wyczyściła buforowane dane.

tom01
źródło