У меня есть корпоративное приложение, которое я распространяю через itms
URL:
itms-services://?action=download-manifest&url=itms-services://?action=download-manifest&url=https://$MY_PLIST_URL.plist
На iOS 7 обе загрузки и обновления работают нормально. Однако на iOS 8 я получаю сообщение об ошибке:
LoadExternalDownloadManifestOperation: Ignore manifest download, already have bundleID: com.mycom.MyApp
В моем plist я
<key>bundle-identifier</key>
<string>com.mycom.MyApp</string>
<key>bundle-version</key>
<string>0.2.2</string>
и в моем приложении на iOS 8 я запускаю версию 0.2.1
Я также столкнулся с этой проблемой с нашим дистрибутивом приложений. Мы смогли исправить эту проблему, “подделав” идентификатор пакета внутри .plist, используя для загрузки дистрибутив, сохраняя идентификатор пакета ipa одинаковым.
Например, в вашем plist:
<key>bundle-identifier</key>
<string>com.mycom.MyApp</string>
<key>bundle-version</key>
<string>0.2.2</string>
измените com.mycom.MyApp на com.mycom.MyApp.ios8fix
Приложение будет установлено с помощью нового значка приложения, которое исчезнет после установки.
Если у вас уже установлена установка приложения, во время установки вы увидите даже новый значок приложения. После установки этот значок исчезнет, но ваша уже существующая версия приложения будет обновлена.
При чистой установке значок установки исчезнет, и значок установленного приложения появится на месте.
Похоже, что iOS 8 кэширует идентификаторы пакетов и сравнивает запрошенные установки с этими кешированными. В большинстве случаев вы увидите только всплывающее окно с запросом на установку, но ничего не происходит.
Как уже заметил Sean, это появляется с xCode 6 GM и официальной версией iOS 8. Устройства, которые никогда не устанавливали ваше приложение, не будут иметь проблем с установкой приложения.
Это работало лучше для меня, не нужно касаться вашего манифеста или другого обмана (идеально подходит для Xcode Server, где plist
автоматически сгенерирован):
- Загрузите iExplorer (http://www.macroplant.com/iexplorer/)
- Подключите устройство
- Удалить все файлы в разделе “Медиa > Загрузка”
- Перезапустить устройство
Сброс кэшей устройств, теперь вы можете установить приложение как обычно.
У меня такая же проблема.
Я воспроизвел его:
1) Наличие моего приложения при обновлении с iOS 7 до iOS 8 GM
2) Удаление его в iOS 8
3) Попытка установить его через itms-services: с тем же именем пакета
Когда я попытался изменить идентификатор пакета в серверном plist (не в приложениях Info.plist), он работал (приложение было загружено без значка “тени” ). Но это похоже на ошибку Apple.
Принятое решение больше не работает на iOS9.
Я понимаю, что Apple закрыла серьезную дыру в безопасности iOS, предотвращая замену двоичных файлов adhoc вместо приложений или приложений для приложений, загруженных из App Store. См. Эту статью для фона (CVE-2015-3722/3725 и CVE-2015-3725):
https://www.fireeye.com/blog/threat-research/2015/06/three_new_masqueatt.html
Взяв за последствия безопасности, я бы не ожидал, что это изменение изменится в будущих версиях IOS. Возможны альтернативные варианты:
- удалите версию App Store перед установкой adhoc
- распределите adhoc как “новое” приложение, изменив идентификатор пакета в обоих
приложение и план распространения - использовать TestFlight
То, что сказал Гил, кажется правильным, но, более конкретно, я обнаружил, что мне также необходимо увеличить строку версии пакета в server.plist:
<key>bundle-version</key>
<string>3.2.2</string>
Это по крайней мере позволяет выполнить установку OTA.
(Извините… добавил бы к комментариям, но я слишком много n00b.)
Посмотрите этот ответ и этот ответ.
Вы можете исправить эту проблему без хаков, для iOS8 вы должны включить в assets
ключ манифеста .plist
файл display-image
и full-size-image
. Они были доступны в Xcode 5 при сохранении архива для корпоративного и дополнительного развертывания, но не требовались.
Я создал gistub с шаблоном для файла install-manifestet.plist.
Это ошибка, обнаруженная в iOS8 Beta5. И это все еще не было зафиксировано Apple в семенах GM и официальной версии iOS8.0. Больше обсуждений можно найти здесь
Текущее обходное решение проверяется мной:
- Если вам не нравится содержимое вашего устройства: выполните чистое восстановление в режиме DFU устройства.
- Если вы хотите вернуть свои вещи
- Резервное копирование вашего устройства iOS в iTunes перед восстановлением (без приложения Ad-Hoc/enterprise)
- После восстановления вашего устройства, установите приложение Ad-Hoc/enterprise
- Восстановите резервную копию из iTunes
- Теперь вы можете удалить эти Ad-Hoc/корпоративные приложения и переустановить их.
Проблема решена путем изменения идентификатора связки в plist.
Как правило, после нажатия ссылки itms будет отображаться рабочий стол, на котором показана установка значка. Однако для моего устройства iOS 8.0 после нажатия ссылки itms он не будет изменен на страницу установки, но установка уже работает.
Это экстремально, но если вы не можете изменить свой идентификатор пакета, которого я не смог, восстановление iPhone через iTunes до последней версии iOS 8 и восстановление из резервной копии устраняет проблему.
Такая же проблема существует и в iOS 10 beta 1.
Dec 31 19:01:32 iphone-6s itunesstored [98]: LoadExternalDownloadManifestOperation: Игнорировать манифестную загрузку, уже есть bundleID: com. ***************. ios с фазой: SSDownloadPhaseWaiting
Одна вещь, которую я не понимаю здесь, – это дата 31 декабря в журнале устройств XCode, однако устройство имеет правильную дату и время.
Update:
Ребята из HockeyApp уведомили Apple об этой проблеме во время WWDC, и исправление должно появиться в следующем семестре.
Если вы создаете приложения iOS с помощью сборки script, и вы ранее использовали PackageApplication с флагом -sign, это может вызвать проблемы. Флаг -sign больше не работает при построении 10.10, и его удаление заработало все наши приложения для iOS.
Убедитесь, что у вас есть полный доступ в Интернет.
У меня возникла такая же проблема с установкой OTA и IOS8. Поскольку я за корпоративным прокси-сервером, приведенные выше решения не работали, пока я не установил параметры ручного прокси-сервера (не нужны в IOS7) для решения этой проблемы.
Я только что столкнулся с этой проблемой на устройстве с 8.1, обновление устройства до 8.3 разрешило проблему. Таким образом, либо ошибка больше не присутствует в 8.3…. или акт обновления очистил кэшированные данные в любом случае.