Подтвердить что ты не робот

Распространение iOS Enterprise OTA Не удается загрузить приложение

Я создал приложение iOS и хочу распространять его по-эфиру. Я последовал этому руководству:

http://help.apple.com/iosdeployment-apps/mac/1.1/?lang=en-us#app43ad77ea

Приложение подписано с сертификатом предприятия и содержит профиль предоставления распределения.

Когда я пытаюсь загрузить приложение на ipad (используя технику, описанную в этом руководстве), на экране появляется значок квадрата с моим значком загрузки с именем "Ожидание...", затем через секунду имя изменения моего фактического имени приложения, а затем снова через секунду я получаю сообщение об ошибке:

Невозможно загрузить приложение

"Ваше приложение" не может быть загружено в настоящее время.

в руководстве, есть три совета по устранению неполадок:

если распространение беспроводного приложения завершилось неудачей с "невозможностью загрузки", проверьте следующее:

Убедитесь, что приложение подписано правильно. Проверьте его, установив его на устройства с помощью утилиты конфигурирования iPhone или Apple Configurator и проверьте, не возникли ли ошибки.

Убедитесь, что ссылка на файл манифеста верна, а манифест файл доступен для веб-пользователей.

Убедитесь, что URL-адрес файла .ipa(в файле манифеста) верен и .ipa файл доступен для веб-пользователей.

Я проверил все три вещи, и они в порядке.

Что еще может вызвать проблемы с загрузкой?

4b9b3361

Ответ 1

Как сказал алексей, слишком много причин могут вызвать это сообщение. Apple использует его как "поймать все ошибки".

Вы можете диагностировать его через консоль . Подключите устройство к своему рабочему столу и получите доступ к нему либо из XCode Organizer (только для Mac), либо Конфигурация iPhone > (Mac и Windows). Но...

Это просто не так просто!: - (

Консоль может быть недостаточно. Иногда там нет соответствующего сообщения.

Затем последнее средство следует за контрольным списком. Выполняем все с нуля снова. Есть много out там... Но после этого мои общие и не детализированные контрольный список для распределения по воздуху в настоящий момент.



  • Создайте раскладку. Это самая сложная часть, выполняемая всегда в Интернете, и Apple все время меняет все этапы. В общем, вам нужен сертификат, идентификатор и профиль обеспечения. Листинговые устройства почти всегда требуются. Мой текущий выбор " Распространение → В доме".

    Apple Developer -> Member Center -> Certificates, Identifiers & Profiles -> Provisioning Profiles -> Add (+)

    P.S.: Если вы хотите перечислить устройства, убедитесь, что UDID верны. Здесь много сообщений.

  • Задайте профиль в разделе Проект → Настройки сборки. - С XCode 5 все изменилось. Вместо подписи кода с идентификатором вы можете очистить все это и установить его в разделе * Подписание кода → * Профиль подготовки. Идентификатор автоматически изменится на "Автоматически". Также нет необходимости вручную загружать файлы с шага 1 и устанавливать их. Теперь XCode управляет этим.

    XCode 5 -> Project Navigator -> Project -> Build Settings

  • Архив. В Xcode 5 больше нет необходимости создавать "Build for Archive". Просто архивируйте его. Он должен появиться на Организаторе, и это займет некоторое время, если это большой проект. На этом этапе могут возникнуть многие ошибки, но они почти всегда связаны с компиляцией кода, а не с OTA.

  • Deploy. Теперь в Organizer → Архивы выберите нужный архив (он должен быть уже выбран как последний) нажмите "Распространять", затем Сохранить для предприятия или Ad Hoc Deployment. Может быть, сейчас большой. При сохранении файла существует опция "Сохранить для распространения предприятия". Это совершенно вводящее в заблуждение имя. Фактически это создает файл plist. Если у вас уже есть, все в порядке. Вы даже можете вручную отредактировать его, что обычно лучше. Для шага (5) требуется plist. Здесь хороший:

    <?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>items</key>
        <array>
            <dict>
                <key>assets</key>
                <array>
                    <dict>
                        <key>kind</key>
                        <string>software-package</string>
                        <key>url</key>
                        <string>http://example.com/app.ipa</string>
                    </dict>
                    <dict>
                        <key>kind</key>
                        <string>full-size-image</string>
                        <key>needs-shine</key>
                        <false/>
                        <key>url</key>
                        <string>http://example.com/FullSizeImage.png</string>
                    </dict>
                    <dict>
                        <key>kind</key>
                        <string>display-image</string>
                        <key>needs-shine</key>
                        <false/>
                        <key>url</key>
                        <string>http://example.com/Icon.png</string>
                    </dict>
                </array>
                <key>metadata</key>
                <dict>
                    <key>bundle-identifier</key>
                    <string>com.example.app</string>
                    <key>kind</key>
                    <string>software</string>
                    <key>subtitle</key>
                    <string>for iOS</string>
                    <key>title</key>
                    <string>My App</string>
                </dict>
            </dict>
        </array>
    </dict>
    </plist>
    
  • Распространять. Пропустите этот шаг, если вы хотите установить его с помощью утилиты конфигурирования XCode или iPhone. Все готово. Это размещение файла на веб-сайте. "Просто" добавьте HTML-страницу со ссылкой a href, например:

     itms-services://?action=download-manifest&url=http://example.com/app.plist
    

    К сожалению, работа с веб-серверами никогда не бывает простой. Так что проверьте тип сервера mime! Я сделал пару файлов PHP, чтобы справиться с ними, если ваш сервер поддерживает php. Просто сохраните файлы как они (plist, html и ipa) и ссылку на app.plist.php вместо:

    app.plist.php  

    $file = fopen("app.plist", "r");
    while(!feof($file)){
        $line = fgets($file);
        print str_replace(".ipa", ".ipa.php", $line);
    }
    fclose($file);
    ?>
    

    app.ipa.php

    <?php
    header('Content-type: application/octet-stream');
    
    $file = fopen("app.ipa", "r");
    while(!feof($file)){
        $line = fgets($file);
        print $line;
    }
    fclose($file);
    ?>
    
  • Проверить. Убедитесь, что все файлы, перечисленные в массиве активов, доступны для загрузки. Если какой-либо из этих файлов вернет 404 или такие (включая значки), вся установка завершится с ошибкой. Вы должны либо (A) сделать эти файлы доступными, либо (B) удалить те недостающие записи из plist. Значки не требуются для загрузки.

    Вот пример plist без значков:

    <?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>items</key>
        <array>
            <dict>
                <key>assets</key>
                <array>
                    <dict>
                        <key>kind</key>
                        <string>software-package</string>
                        <key>url</key>
                        <string>http://example.com/app.ipa</string>
                    </dict>
                </array>
                <key>metadata</key>
                <dict>
                    <key>bundle-identifier</key>
                    <string>com.example.app</string>
                    <key>kind</key>
                    <string>software</string>
                    <key>subtitle</key>
                    <string>for iOS</string>
                    <key>title</key>
                    <string>My App</string>
                </dict>
            </dict>
        </array>
    </dict>
    </plist>
    

Примеры файлов являются очень важной частью контрольного списка. Они должны быть на 100% правильными.

Двойная проверка файлов plist и html!

P.S.: Я пишу этот ответ, потому что в моем случае это был "простой" вопрос неправильной ссылки на файл .plist. И, как таковой, трудно, как ад, диагностировать. Ну, только в этом контрольном списке я могу найти ошибку! Он указывал на "another-app.ipa", а не на "app.ipa"!

Ответ 2

Есть много причин, чтобы вызвать это сообщение.

Лучший способ диагностировать это: подключить устройство к Mac и посмотреть Консоль для устройства в Организаторе.

В моем случае, например, это было:

verify_bundle_metadata: это приложение не было создано для поддержки этого семейства устройств

Ответ 3

Отвечая на мой собственный вопрос:

Проблема заключалась в том, что у одного из миниатюр не было правильного пути, установленного в manifest.plist - поэтому не только ipa нуждается в правильном пути, но и временные иконки загрузки, иначе установка завершится с указанной ошибкой сообщение.

Ответ 4

Другой проблемой, которая может быть, является то, что как .plist И.ipa должны размещаться с HTTPS, а не только обычным HTTP. Строка пакета программного обеспечения должна выглядеть следующим образом:

<key>kind</key>
<string>software-package</string>
<key>url</key>
<string>https://example.com/app.ipa</string>

Глупый маленький надзор, но он несколько раз отключал меня.

Ответ 5

Мы столкнулись с тем же сообщением об ошибке при попытке установить приложение iOS 5+ на iOS4.3.5. Вы также проверяли цели развертывания/сборки и целевую архитектуру в соответствии с устройствами, показывая эту проблему?

Ответ 6

Убедитесь, что корпус соответствует всем файлам. Они, как правило, нечувствительны к регистру.

Ответ 7

В моем случае проблема была на моем устройстве, старая версия того же приложения была установлена ​​с тем же идентификатором пакета (скачанным из applstore), поэтому теперь, когда я пытался загрузить свою новую версию через корпоративный дистрибутив, ничего не делал, без ошибок вообще. Удаление существующей версии с устройства решило мою проблему.

Ответ 8

Я нашел в консоли.

установить координацию (MobileInstallation) [99]: **** bundleID ****: 5: 11:1: 1: Обновление метки-метки для **** bundleID **** с ошибкой 1 _LSInstallType 1, основная ошибка (Ошибка домена = MIInstallerErrorDomain Code = 13 "Не удалось проверить код подпись /private/var/installd/Library/Caches/com.apple.mobile.installd.staging/temp.IoCSM9/extracted/Payload/App.app: 0xe8008016 (Исполняемый файл был подписан с недопустимыми правами.) " UserInfo = {LibMISErrorNumber = -402620394, LegacyErrorString = ApplicationVerificationFailed, SourceFileLine = 147, ИмяФункции = + [MICodeSigningVerifier _validateSignatureAndCopyInfoForURL: withOptions: error:], NSLocalizedDescription = Не удалось проверить подпись кода /private/var/installd/Library/Caches/com.apple.mobile.installd.staging/temp.IoCSM9/extracted/Payload/App.app: 0xe8008016 (исполняемый файл был подписан с недопустимыми правами.)}), источник 17>

Здесь мы должны посмотреть на:
Не удалось проверить кодовую подпись App.app
Исполняемый файл был подписан с недопустимыми правами.

В моем случае это было потому, что я скачал сборку предприятия с Amazon. Но профиль обеспечения, с которым он был создан, просрочен (выяснено в консоли разработчика).


Еще один с другой целью:

"Это приложение не может быть установлено в данный момент". UserInfo = {NSLocalizedDescription = Это приложение не может быть установлено на на этот раз., NSUnderlyingError = 0x100cbd3c0 {Ошибка Домен = MIInstallerErrorDomain Код = 64 "Обновления строка права доступа к идентификатору приложения (BBBUUUU.com.bundle.www) не соответствует установленной строке идентификатора приложения (CCCEEEE.com.bundle.www); отказ от обновления. " UserInfo = {LegacyErrorString = MismatchedApplicationIdentifierEntitlement, FunctionName = - [MIInstallableBundle _validateApplicationIdentifierForNewBundleSigningInfo: error:], SourceFileLine = 878, NSLocalizedDescription = Обновления строка права доступа к идентификатору приложения (BBBUUUU.com.bundle.www) не соответствует установленной строке идентификатора приложения (CCCEEEE.com.bundle.www); отвергнуто

Здесь я только что удалил предыдущую версию приложения. Ошибка состояла в том, что я изменил команду для идентификатора пакета, и было установлено приложение с предыдущим идентификатором пакета.


Откройте консоль с:

  • Xcode> Window> Devices
  • Выберите устройство
  • Разверните консоль с помощью поля со стрелкой внутри нее в левом нижнем углу.

Ответ 9

Попробуйте проверить bundle identifier в файле XCode и .plist

Ответ 10

В моем случае я сделал следующее, чтобы избавиться от сообщения "невозможно подключиться к dl.dropboxusercontent" после предоставления общей ссылки ipa. 1. Удалена часть md5 из plist 2. Загрузили 512 * 512 и 57 * 57 изображений, чтобы удалить окно, и предоставили общую ссылку в fill_size_image и display_image в plist.

Ответ 11

Первое, что нужно проверить, это то, что на устройстве, которое вы устанавливаете, установлена правильная ОС для приложения, которое вы устанавливаете. Например, если приложение создано для iOS 11, а на вашем устройстве установлена iOS 10, приложение будет установлено, но вы увидите эту ошибку "Невозможно загрузить приложение".

Ответ 12

В моем случае была проблема с неправильными правами доступа к папке FTP и файлам внутри (манифест, ipa, изображения). Убедитесь, что у них есть 775 (rwx) и что владелец/группа является вашим владельцем.

Ошибка в консоли устройства выглядела как "Невозможно подключиться к iTunes Store" или "Не удалось оформить обложку для bundleID" или "Не удалось загрузить заполнитель обложки для bundleID", Но это только о файлах.