Mam aplikację dla przedsiębiorstw, którą rozpowszechniam za pośrednictwem itms
adresu 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
ios
xcode
ios8
enterprise-distribution
Patrick Perini
źródło
źródło
Odpowiedzi:
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:
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.
źródło
To działało lepiej dla mnie, nie trzeba dotykać swojego manifestu ani innych sztuczek (idealne dla Xcode Server, gdzie
plist
jest generowany automatycznie):Spowoduje to zresetowanie pamięci podręcznych urządzenia. Teraz możesz normalnie zainstalować aplikację.
źródło
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.
źródło
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:
źródło
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:
To przynajmniej pozwala na wykonanie instalacji OTA.
(Przepraszam ... dodałbym do komentarzy, ale jestem zbyt wielkim n00b.)
źródło
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
assets
kluczu.plist
pliku manifestu kluczedisplay-image
ifull-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 .
źródło
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:
źródło
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.
źródło
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.
źródło
Ten sam problem występuje w iOS 10 beta 1.
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.
źródło
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
źródło
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.
źródło
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.
źródło