Распространение обновлений корпоративного приложения на iOS 8

111

У меня есть корпоративное приложение, которое я распространяю по itmsURL-адресу:

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

В моем списке у меня есть

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

и в моем приложении на iOS 8 я использую версию 0.2.1

Патрик Перини
источник
1
Какая версия iOS8 у вас установлена. Я слышал о таких проблемах с Beta 5.
Anil Natha
7
Точно такая же проблема. iOS 8 GM. Эти приложения просто отказываются загружаться сейчас.
Carl Sjogreen
3
Я использую официально выпущенную версию ios8.0, и установка не начинается. Я взглянул на потребительский блок и увидел сообщение: "<Предупреждение>: LoadExternalDownloadManifestOperation: игнорировать загрузку манифеста, уже есть bundleID: MYBUNDLENAME" ... восстановление устройства или изменение идентификатора пакета помогут
user2387149,
возможный дубликат iOS 8 - не
Кристофер Джонсон
1
@pcperini Я думаю, что ответы в другом посте содержат больше информации. Без обид.
Кристофер Джонсон

Ответы:

91

Я также столкнулся с этой проблемой при распространении нашего приложения. Мы смогли решить эту проблему, «подделав» идентификатор пакета в .plist, который использовался для распространения загрузки, сохранив при этом идентификатор пакета ipa.

Например, в вашем списке:

<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 кэширует идентификаторы пакетов и сравнивает запрошенные установки с этими кэшированными. В большинстве случаев вы увидите только всплывающее окно с запросом на установку, но ничего не происходит.

Как уже заметил Шон, это появляется в xCode 6 GM и официальной версии iOS 8. У устройств, на которые раньше не устанавливали ваше приложение, не возникнет проблем с его установкой.

Antoine
источник
3
Он работает на некоторых устройствах, но на некоторых других устройствах системный журнал по-прежнему показывает предыдущий идентификатор пакета, даже если я изменил файл plist.
храм
На самом деле предоставление изображений - правильное решение - проверьте этот ответ stackoverflow.com/a/26283611/276656
mspasov
3
В моем случае изменение идентификатора пакета сработало на некоторых устройствах - не на всех. После смены пути к plist сам решил это за меня.
pawi 05
1
Где находится .plist для редактирования, если вы загружаете приложение с Xcode Server?
Коллин
1
Этот ответ stackoverflow.com/a/28727958/108040 сработал для нас лучше, так как вам не нужно менять .plist
Робин
24

Это сработало для меня лучше, не нужно трогать ваш манифест или другие уловки (идеально подходит для Xcode Server, где plistон создается автоматически):

  1. Загрузите iExplorer ( http://www.macroplant.com/iexplorer/ )
  2. Подключите ваше устройство
  3. Удалите все файлы в "Медиа> Загрузки"
  4. Перезагрузите устройство

Это сбрасывает кеши устройства, теперь вы можете установить свое приложение как обычно.

Jlpiedrahita
источник
3
Спасибо, вы спасаете жизнь. Я использую iBrowse ( ibrowseapp.com ), который бесплатен от Macroplant
Мин Соэ
2
Это отлично сработало для нас ... не забудьте перезагрузить устройство после удаления содержимого Медиа -> Загрузки
Робин
спасибо сделал работу! Но все же думаю, что это нужно делать на телефоне каждого пользователя!
Аммар Муджиб
Работает ли «Стереть все содержимое и настройки» (в приложении «Настройки»)?
onmyway133
Что находится в папке "Загрузки"?
HamzaGhazouani 01
16

У меня та же проблема. Я воспроизвел его:

1) Установка моего приложения при обновлении с iOS 7 до iOS 8 GM

2) Удаление в iOS 8

3) Пробуем установить через itms-services: с таким же названием пакета

Когда я попытался изменить идентификатор пакета в plist сервера (не в Info.plist приложений), это сработало (приложение было загружено, значок «тени» не остался). Но похоже на яблочный жучок.

Гил Хартман
источник
1
Но вы также должны изменить имя пакета в приложении, не так ли? Я попытался изменить только список серверов, и результат: 18 сентября 09:59:20 XXX-iPhone filecoordinationd [123] <Предупреждение>: в песочнице отказано в подписке на категорию com.mo2o.XXX (идентификатор пакета com.apple.iaptransportd , 037BE63A-8737-4A4B-9C9D-B8FAF8DC0D40) 18 сентября 09:59:20 XXX-iPhone filecoordinationd [123] <Предупреждение>: в песочнице отказано в подписке на категорию com.mo2o.XXX (идентификатор пакета (null), 0B9D3B2A- 2B5D-4882-8771-61784326E507) и приложение не устанавливается
Ева Мадразо
ммм Я не прав, оно регистрирует предупреждение, но также устанавливает приложение.
Ева Мадрасо
Это нормально работает, но есть небольшой недостаток. Во время установки устройство не знает, какое приложение вы обновляете, поэтому во время установки вы увидите второй значок приложения. Однако после установки это автоматически исправляется.
Иво Янш
4
Стоит отметить, что в статье bulldozer.io говорится: «Похоже, что устройства с установленным сертификатом разработчика не затронуты». Неясно, что подразумевается под «сертификатом разработчика» (я предполагаю, что профиль обеспечения разработки, который «покрывает» рассматриваемое приложение), но это может объяснить проблемы, связанные с воспроизведением проблемы на разных устройствах.
астлетрон 02
11

Принятое решение больше не работает на iOS9.

Насколько я понимаю, Apple закрыла серьезную дыру в безопасности iOS, не позволяя специальным двоичным файлам заменять стандартные приложения или приложения, загруженные из 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
Франс
источник
Похоже, ты прав. Он отлично работает при свежих установках или обновлении предыдущей специальной версии приложения, но не работает, если установленная версия была установлена ​​из App Store.
Чарльз
Вот еще один намек на то, почему Apple внесла изменение: loopinsight.com/2015/10/05/…
Франс
Хотя я понимаю необходимость закрыть систему безопасности, это ставит нас в интересный сценарий, когда мы не можем тестировать обновления с одной версии на другую на развернутой версии, не переходя в TestFlight. Кажется, что приложение, подписанное специальным профилем и сертификатом одного и того же разработчика, должно иметь возможность обновляться.
lidsinker
@charles , «Он отлично работает при новых установках или обновлении предыдущей специальной версии приложения», вы это тестировали? потому что мы сталкиваемся с этой проблемой adhock-обновления в IOS9 ...
flypig
@flypig В то время я пробовал это на iOS 9, и это сработало. С тех пор я не пробовал, извините.
charles
9

То, что сказал Гил, кажется правильным, но, в частности, я обнаружил, что мне также нужно увеличить строку версии пакета в server.plist:

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

Это, по крайней мере, позволяет выполнить установку OTA.

(Извините ... Добавил бы в комментарии, но я слишком неряха.)

Cfold
источник
9

Просмотрите этот ответ и этот ответ .

Вы можете решить эту проблему без каких - либо хаков для iOS8 вы должны включить в assetsключе манифеста .plistфайла , display-imageи full-size-imageключи. Они были доступны в Xcode 5 при сохранении архива для корпоративного и дополнительного развертывания, но не требовались.

Я создал суть на github с шаблоном для файла install-manifest.plist .

Alexcristea
источник
7
Я действительно столкнулся с этой проблемой с включенными обоими этими ключами.
Шон Данцайзер
Я изменил идентификатор пакета, и он сработал. Не в восторге от этого.
Шон Данцайзер
Большой! Я также переместил все в подпапку и настроил только MD5 файла ipa.
Felipe FMMobile 02
3

Это ошибка, впервые обнаруженная в iOS8 Beta5. И это до сих пор не было исправлено Apple в семенах GM и официальной версии iOS8.0. Больше обсуждений можно найти здесь

Текущее обходное решение, которое я тестирую:

  • Если вам все равно, что содержимое вашего устройства: выполните чистое восстановление в режиме DFU устройства.
  • Если ты хочешь вернуть свои вещи
    1. Перед восстановлением сделайте резервную копию вашего устройства iOS в iTunes (без Ad-Hoc / корпоративного приложения)
    2. После полного восстановления устройства установите приложение Ad-Hoc / Enterprise.
    3. Восстановите резервную копию из iTunes
    4. Теперь вы можете удалить эти специальные / корпоративные приложения и переустановить их.
Сяо
источник
1
Все еще не исправлено в 8.1
Кевин
2
Все еще не исправлено в версии 8.2 ....... Может быть, мы, 15 человек в мире, делаем корпоративные приложения.
Карл Хайнц Бреме Арредондо
3

Проблема решена изменением идентификатора пакета в plist.

Обычно после нажатия ссылки itms отображается рабочий стол, на котором отображается значок установки. Однако для моего устройства iOS 8.0 после нажатия ссылки itms он не перейдет на страницу установки, но установка уже выполняется.

Таллент Сиу
источник
2

Это экстремально, но если вы не можете изменить свой идентификатор пакета, а я не мог, восстановление вашего iPhone через iTunes до последней версии iOS 8 и восстановление из резервной копии решает проблему.

pho0
источник
Не нужно восстанавливать iPhone - всего несколько шагов updraft.beekeeper.io/post/2046721
Сергей Копанев
1

Та же проблема существует в iOS 10 beta 1.

31 декабря 19:01:32 iphone-6s itunesstored [98]: LoadExternalDownloadManifestOperation: игнорировать загрузку манифеста, уже есть bundleID: com. ***************. IOS с этапом: SSDownloadPhaseWaiting

Одна вещь, которую я здесь не понимаю, - это то, что дата 31 декабря в журнале устройства XCode, однако на устройстве настроены правильная дата и время.

Обновление: ребята из HockeyApp уведомили Apple об этой проблеме во время WWDC, и исправление должно появиться в следующем сиде.

Алексей Сороколетов
источник
1
та же проблема на iOS 10
Crossle Song 05
0

Если вы создаете свои приложения для iOS с помощью сценария сборки и ранее использовали PackageApplication с флагом --sign, это может вызывать проблемы. Флаг --sign больше не работает при сборке 10.10, и после его удаления все наши приложения для iOS снова устанавливаются.

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

Джеймс Мур
источник
Это касается другой проблемы и связано со сборкой, а не с установкой, как просит OP.
wottle
Я не согласен. В b5 было внесено изменение поведения, из-за которого подписанные IPA не загружались. Если предположить, что OP не содержит ошибок в файле манифеста, то подписанный IPA практически гарантированно не сможет установить с той ошибкой, которую они предоставили. Поскольку они не упоминают, как они построили свой IPA, я не могу точно сказать, почему он терпит неудачу. С другой стороны, удаление подписей с наших IPA заставило их все снова установить.
Джеймс Мур
Это может быть правдой, но если вы посмотрите на ошибку, указанную в исходном вопросе: «Игнорировать загрузку манифеста, уже есть bundleID:», это, очевидно, связано с широко обсуждаемой теперь ошибкой iOS8 в корпоративных приложениях и невозможностью установить приложение. который был установлен до обновления до iOS8, а затем был удален после обновления до iOS8. Возможно, вы решаете проблему, но это не проблема OP.
wottle
0

Убедитесь, что у вас есть полный доступ в Интернет.

У меня была такая же проблема с установкой OTA и IOS8. Поскольку я нахожусь за корпоративным прокси-сервером, вышеперечисленные решения не работали, пока я не установил ручные настройки прокси-сервера (не требуемые в IOS7) для решения этой проблемы.

Creal
источник
0

Я только что столкнулся с этой проблемой на устройстве под управлением 8.1, обновление устройства до версии 8.3 решило проблему. Таким образом, либо ошибка больше не присутствует в версии 8.3 ...., либо в результате обновления все равно были удалены кэшированные данные.

tom01
источник