IOS 8 - Не удается установить корпоративное приложение
В нашей компании есть приложение, которое можно загрузить через веб-сайт с помощью Enterprise Distribution.
![Enterprise Distribution Site]()
В iOS 8 Beta 5 нажатие ссылки для загрузки приводит к ожидаемому всплывающему окну (веб-сайт), который хотел бы установить (имя приложения) ". Нажатие" установить "в этом диалоговом окне сначала заставляет приложение застревать" Ожидание..."
![App stuck waiting]()
Пока это окончательно не укажет: "Не удалось загрузить приложение (имя приложения) в настоящее время невозможно загрузить".
![Unable to Download App]()
Установка работы, как ожидается, с помощью iOS 7.
Запуск приложения из Xcode под iOS 8 работает.
Как мы поддерживаем Enterprise Distribution iOS 8?
Возможно, необходимо внести изменения в файл манифеста? Когда я попытался создать приложение в Xcode 6 Beta 7, процесс Enterprise Archival не предложил мне создать файл манифеста...
Ответы
Ответ 1
Просматривая консоль телефона, пытающегося установить одно из моих приложений, я обнаружил:
Sep 9 12:16:56 iPhone misagent[94] <Error>: attempt to install invalid profile: 0xe8008011
Sep 9 12:16:56 iPhone installd[40] <Error>: 0x100484000 -[MIInstallableBundle _installEmbeddedProfileInBundle:]: Could not install embedded profile: 0xe8008011 (Expired)
Причины, неизвестные мне, яблоко аннулировали половину моих профилей и не смогли предупредить меня. После перехода на developer.apple.com найдите недопустимые профили:
Хит Edit
→ Generate
→ Download
Перестройте приложение с новым профилем.
Однако - плохая новость по-прежнему по крайней мере для одного из моих приложений не установлена. Просмотр через консоль ничего мне не дает. Я убежден, что это яблочная ошибка, поэтому они подали радар: 17622725
Я надеюсь, что ваша проблема будет проблемой профиля, иначе нам, возможно, придется подождать до сегодняшнего дня 1800GMT, чтобы увидеть, исправлено ли это яблоко.
ИЗМЕНИТЬ
С iOS8 GM - я просто получаю Waiting...
- я буду информировать вас о результатах отчета об ошибках.
ИЗМЕНИТЬ
После устранения неполадок найдено несколько исправлений:
Исправить 1
Как и в iOS8, если изображения, на которые вы ссылаетесь в манифестном plist, не существует - Apple не будет устанавливать приложение на телефоне - манифест является файлом, на который вы ссылаетесь на странице загрузки: itms-services://?action=download-manifest&url={url}
Убедитесь, что существуют как full-size-image
, так и display-image
:
<dict>
<key>kind</key>
<string>full-size-image</string>
<key>needs-shine</key>
<true/>
<key>url</key>
<string>https://{path_to_real_image}</string>
</dict>
<dict>
<key>kind</key>
<string>display-image</string>
<key>needs-shine</key>
<true/>
<key>url</key>
<string>https://{path_to_real_image}</string>
</dict>
Исправить 2
Корпоративные приложения не будут устанавливаться, если они существовали ранее на iOS7 из-за ошибки с iOS8. На консоли появится сообщение об ошибке:
Ignore manifest download, already have bundleID: {bundle_id}
Это можно устранить, временно изменив bundleID
в файле манифеста, но Apple знает, как они отметили отчет об ошибке как дублированный. После внутренних тестов вы также устраните проблему, поместив макет домашнего экрана General -> Reset -> Reset Home Screen Layout
Исправить 3
Если вы видите, что приложение входит в стадию installing...
, а не в loading...
, почти наверняка проблема в embedded provisioning profile
истек, чтобы исправить загрузку, вам нужно будет переархивировать приложение с помощью нового, обновленный профиль подготовки.
Исправить 4
Если вы видите, что приложение переходит на этап installing...
, и ваш provisioning profile
действителен - загрузите приложение, прикрепленное к консоли. (Xcode 6 > Окно > Устройствa > Нижняя левая кнопка [v]), вы, вероятно, обнаружите, что сбой установки с Verification Stage Failed
чуть ниже будет сообщением об ошибке. В моем случае (Entitlements found that are not permitted by provisioning profile)
- Для этой ошибки goto developer.apple.com и обновите свой Идентификатор приложения, чтобы включить правильный сервис. Для меня App Groups
необходимо было включить. Затем восстановите provisioning profile
Ответ 2
У меня такая же проблема сегодня: я не смог установить одно из моих корпоративных приложений на IOs8 (но на IOs7).
После многих часов поиска я наконец прочитал это сообщение на консоли устройства:
<Warning>: LoadExternalDownloadManifestOperation: Ignore manifest download, already have bundleID: com.ecaste.Crew-Desk
После долгого времени поиска я, наконец, прочитал этот пост:
http://support.hockeyapp.net/discussions/problems/26683-not-able-to-download-apps-ios8-beta-5-autoupdate-manually-etc
И к концу я просто изменил имя plist и ссылку для загрузки ipa (возможно, второй не нужен), и, наконец, приложение будет установлено.
Наконец, кажется, что проблема с кэшем в IOS8, которая считает, что приложение уже установлено (и это было не так, я удалил его ранее).
Надеемся на эту помощь
Ответ 3
Такая же ошибка здесь, я попытался изменить идентификатор пакета, пакет-версию, plist... но ошибка остается.
Я знаю, что это немного сложно, но это единственное, что работает для меня:
http://support.hockeyapp.net/discussions/problems/30194-ios8-workaround-can-break-today-extension?full_site=1#comment_35141099
- Подключите устройство к Mac или ПК.
-
Создайте резервную копию в iTunes
-
Установите iExplorer: http://www.macroplant.com/iexplorer/
-
Запустите iExplorer, затем выберите демонстрационный режим
-
В левой боковой панели выберите "Медиа", затем откройте папку "Загрузки",
и удалить все файлы в нем
-
Перезагрузите устройство
-
Откройте страницу загрузки и установите последнюю версию своего приложения.
Действительно, я опускаю первые два шага, и он отлично работает:)
Я надеюсь, что это поможет
Ответ 4
Установите цель развертывания ниже в
Проект > Настройка сборки > Цель развертывания iOS
Цели > Настройка сборки > Цель развертывания iOS
Ответ 5
У меня просто была эта проблема прямо сейчас, и она была вызвана mainfest plist (ключи: полноразмерное изображение + изображение-изображение), указывающие на местоположения изображения URL-адреса, которых не существует.
Похоже, что iOS6/iOS7 могут обрабатывать, если изображения не существуют, но iOS8 более ограничивает это.
Ответ 6
Основываясь на предыдущих комментариях к сообщению "ignore manifest download", мы попытались изменить идентификатор пакета (то есть com.companyName.AppName) в .plist, чтобы иметь уникальное имя, чтобы заставить iOS 8 загружать/устанавливать его в любом случае, После того, как он будет установлен, он правильно заменит существующую копию.
Я считаю, что здесь есть две проблемы. Если .plist на веб-сайте https, указывающий на сертификат предприятия, подписанный .ipa файл, имеет идентификатор пакета, соответствующий уже установленному приложению, он не будет перезаписывать его. Пакет-версия отличается от всех наших .plist файлов, поэтому она должна установить ее в любом случае. У iOS 7, похоже, нет этой проблемы. Мы планируем обойти эту проблему, испортив идентификатор пакета в plist, чтобы он всегда был уникальным для сборки.
Вторая проблема заключается в том, что при успешной установке приложения он не переключается на главный экран или не указывает на то, что он вообще что-то делает. В iOS 7 после выбора кнопки "Установить" в приглашении переключится на главный экран, где значок будет темным, а индикатор прогресса покажет ход загрузки. Тогда у приложения будет синяя точка рядом с ней, указав, что она новая. С iOS 8 он не переключается на главный экран, поэтому кажется, что он не работает. Вы можете вручную перейти на главный экран, и вы увидите темный значок с индикатором прогресса (теперь в новом месте, потому что он не знает, что он заменит существующее приложение). После успешной загрузки/установки он не помещает синюю точку в замещенное приложение.
Надеюсь, что это поможет.
Ответ 7
Это вызвало у меня огромную боль. Мне нужно было установить новое приложение OTA только на телефоны сотрудников за пределами решения MDM. Мне казалось, что я пытаюсь найти все возможные решения, которые я могу найти в Интернете, и ничего не получилось. Самое близкое, что я мог получить, - это приложение, чтобы перейти на "этап загрузки". Мое решение заняло неделю работы, пробую разные вещи. Я не уверен, что сработал в каком порядке и который бы сработал, но вот что я сделал:
В моем случае я ранее создавал это приложение с профилем подготовки от разработчика (в отличие от Enterprise). В Xcode я изменил идентификатор Bundle, чтобы присвоить ему новое имя, например, оно было первоначально com.mydomain.myapp и стало com.mydomain.mysuperapp.
Убедитесь, что подпись в приложении действительна и включает сертификат распространения для учетной записи Enterprise
Я использовал неверный профиль подготовки (один из которых не ассоциировался с идентификаторами), так как я выбрал "автоматическое построение, но он никогда не собирался устанавливать. Итак, я изменил подписание кода для выпуска в свой профиль распространения (а не профиль разработки).
Убедитесь, что приложение установлено с целью развертывания, достаточно низкой для устройств, которые будут загружать его.
Архивировано и экспортировано для развертывания Enterprise
Манифест должен содержать 57x57 png и 512x512 png-изображение, иначе установка не пройдет мимо стадии ожидания
Я создал файл index.html, который выглядел так:
<html>
<body>
<a href="itms-services://?action=download-manifest&url=https://dl.dropboxusercontent.com/s/dw80wahlwupkyd5/MyApp.plist">
Install Learning Chunks App from Dropbox</a>
</body>
</html>
Я использовал образец plist, который я нашел онлайн, и он включил некоторые дополнительные настройки. Когда я оставил их, загрузка не работала. Я вытащил их. Мой манифестный файл plist был назван: MyApp.plist и выглядел так:
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>items</key>
<array>
<dict>
<key>assets</key>
<array>
<dict>
<key>kind</key>
<string>software-package</string>
<key>url</key>
<string>https://dl.dropboxusercontent.com/s/r1bljbkcows7sje/mysuperapp.ipa</string>
</dict>
<dict>
<key>kind</key>
<string>display-image</string>
<key>needs-shine</key>
<true/>
<key>url</key>
<string> https://dl.dropboxusercontent.com/s/ujk9ipcv2naltut/logo57.png</string>
</dict>
<dict>
<key>kind</key>
<string>full-size-image</string>
<key>needs-shine</key>
<true/>
<key>url</key>
<string>https://dl.dropboxusercontent.com/s/gpebomok83mp9d5/logo512.png</string>
</dict>
</array>
<key>metadata</key>
<dict>
<key>bundle-identifier</key>
<string>com.mydomain.mysuperapp</string>
<key>bundle-version</key>
<string>1.0</string>
<key>kind</key>
<string>software</string>
<key>title</key>
<string>My Super App</string>
<key>subtitle</key>
<string>My Super App</string>
</dict>
</dict>
</array>
</dict>
</plist>
Я загрузил MyApp.plist, index.html, logo57.png, logo512.png и MyApp.ipa в DropBox. Я поделился index.html с теми, кому нужно загрузить приложение.
Пользователь может затем щелкнуть по общей ссылке в письме, и приложение должно установить.
Ответ 8
РЕДАКТОР: Проблема ниже - красная селедка. Как упоминалось выше, Dylan Hand, проблема для меня заключалась в том, что у меня были сломанные ссылки на изображения в файле манифеста. По-видимому, это не имело значения для ios7, но ios8 не завершит установку, если это правда. Когда я удалил эту ссылку, она отлично работала.
У меня есть тот же набор симптомов, что и OP (т.е. сообщение "Невозможно загрузить приложение", но только на iOS 8). Когда я пытаюсь проверить (например, Organizer → Validate), я получаю следующее сообщение.
![Screenshot of the result of validation]()
Это привело меня к следующему сообщению: fooobar.com/questions/53366/...
Утверждается, что повторное создание профилей подготовки должно привести к появлению нового права, называемого beta-reports-active
. Когда я пытаюсь сделать это на моей учетной записи предприятия, новые профили НЕ имеют нового права. Однако, когда я регенерирую профили подготовки в другой учетной записи, отличной от предприятия, новые профили имеют это поле.
Ответ 9
Если вы создаете приложения iOS с помощью сборки script, и вы ранее использовали PackageApplication с флагом -sign, это может вызвать проблемы. Флаг -sign больше не работает при построении 10.10, и его удаление заработало все наши приложения для iOS.
см. https://devforums.apple.com/thread/251624?tstart=0
Ответ 10
Этот вопрос сводил меня с ума,
Только это помогло для Enterprise Distribution:
Выполните все необходимые настройки сборки и нажмите "Архив". Выполните процесс распространения предприятия. Появится окно Организатора. На компьютере Mac найдите файл .xcacrchive, выбрав KRelease и выбрав "Show in finder".
Пользователь перемещается в папку, в которой находится файл .xcarchive. Щелкните правой кнопкой мыши файл .xcarchive и выберите "Показать содержимое пакета".
В открывшемся окне поиска найдите Продукты/Приложения
Выберите и скопируйте файл .app
Создайте новую папку где-нибудь на вашем диске с именем "Полезная нагрузка". Примечание. Имя папки чувствительно к регистру.
Вставьте скопированный файл .app в папку "Полезная нагрузка".
Сжатие папки Payload, чтобы получить файл Payload.zip
Переименуйте файл Payload.zip в .ipa и свяжите его с вашим .plist
Готово!!! файл .ipa готов к установке на устройствах, зарегистрированных в профиле подготовки, используемом в генерации .xcarchive.
Ответ 11
Я рассмотрел эту проблему.
- Поскольку Apple изменила профили настройки, пожалуйста, обновите профили подготовки (файл 1) и скопируйте их в "Полезная нагрузка /".
- Убедитесь, что в разделе "Полезная нагрузка /" указан файл Entitlements.plist(Файл 2), и этот файл plist ДОЛЖЕН быть ТЕЛЕФОНОМ PLAIN, который создается текстовым редактором.
- Убедитесь, что в "Полезной нагрузке /" создан Info.plist(файл 3), и это создается XCode;
- Скопируйте файл Entitlements.plist(файл 4) в любом месте, кроме "Payload/".
- Убедитесь, что идентификатор Bundle в файле 1-4 должен быть тем же.
- Используйте этот файл Entitlements.plist(файл 4) для повторного входа в файл IPA.
Вы можете оставить его таким образом
codesign -fs "iPhone Distribution: Your Company Name" --entitlements=/Users/SenTR/Downloads/codesign/Entitlements.plist /Users/SenTR/Downloads/codesign/Payload/Your_Project_name.app
Пример с правами доступа.
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>application-identifier</key>
<string>PREFIX.yourappBundleID</string>
<key>aps-environment</key>
<string>production</string>
<key>get-task-allow</key>
<false/>
<key>keychain-access-groups</key>
<array>
<string>PREFIX.yourappBundleID</string>
</array>
</dict>
</plist>
Если вы знаете китайский язык, это будет полезно.
http://hennry.com/2015/03/fail-to-resign-ipa-since-ios8/
Ответ 12
Эти ответы действительны, чтобы проверить, но если кто-то попробовал их, как я, и у STILL были проблемы, убедитесь, что ваше приложение содержит правильный параметр plist, который позволяет экспортировать архив будет сжат правильно. Этот - это то, что нас укусило, даже после выполнения всех вышеперечисленных шагов. Также следует отметить, что ответ, который говорит о том, что обеспечение plash веб-сайта содержит правильные ссылки на изображение, похоже, не влияет на что-либо, по крайней мере, для нас, используя XCode 6.3 для экспорта архивов. Он работал/не работал независимо от правильности ссылок. Очевидно, хорошая идея иметь эту информацию правильно. Еще одно интересное замечание: если мы экспортировали с использованием XCode 5, ipa были ВСЕГДА в правильном формате (см. Статью, связанную с SO выше); кажется, теперь XCode 6+ придирчив.
Ответ 13
Моя проблема была исправлена, удалив все встроенные outut, а затем полностью восстановив.
Ответ 14
Еще одним возможным источником этой проблемы установки является несоответствие случая между проектом и профилем подготовки (особенно, вероятно, с автоматическими или другими строками командной строки). Идентификаторы связки чувствительны к регистру. Например, если идентификатор пакета приложения в профиле подготовки com.example.MyApp
, а в конфигурации проекта и/или Info.plist используется com.example.MyApp
, Xcode 7.1 завершится с ошибкой подписи кода или возвратится к профилю общего профиля (один с * bundle id, что само по себе может быть проблемой), но команда xcodebuild
будет успешной. Дженкинс также загрузит ошибочно подписанную сборку в Hockeyapp, например. Сборка будет загружаться на клиентские устройства, но не будет установлена из-за несоответствия случая.
Таким образом,
Исправить 0
Убедитесь, что идентификатор пакета приложений настроен одинаково как в проекте, так и на портале разработчиков Apple.
Самый простой способ избежать этой конкретной проблемы - всегда использовать символы нижнего регистра в ваших идентификаторах пакетов. Копирование идентификатора пакета с портала разработчика Apple и вставка его в настройки сборки проекта (PRODUCT_BUNDLE_IDENTIFIER
) также, конечно, также помогает.
Хотя у меня была проблема с корпоративной учетной записью, на самом деле это не было бы специфично для этого типа распространения.
Исправить 0'
Обязательно ознакомьтесь с технической записью Apple, названной Устранение неполадок при сбое установки для iOS.
Ответ 15
Моя проблема заключалась в том, что у меня было место как в имени файла ipa, так и в ссылке на этот ipa в моем plist. Удаление пространства в обоих разрешало установку