iOS Ad-Hoc OTA дистрибутив работает для iOS 6 и терпит неудачу с iOS 5 [закрыто]


У меня возникли проблемы с распределением по воздуху (OTA) для моих специальных сборок. Создание универсального приложения для iPhone / iPad с базовым SDK 6.1, целью развертывания 5.0, архитектурами armv7 и armv7s. та же специальная сборка устанавливает OTA на устройства iOS 6 (3 различных iPhone5, один iPhone4 и iPad2), но не может установить OTA на устройства iOS 5 (iPhone4S и iPad1).

ОТА происходит через IIS со всеми типами MIME, установленными правильно (в противном случае это не удалось бы для iOS 6).

На устройствах iOS 5 он начинает установку, показывая значок приложения с индикатором прогресса, первый заголовок- " ожидание...", затем изменяется на имя приложения, а затем появляется вид предупреждения, говорящий

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

Не удалось загрузить в данный момент.

Готово/Повторите Попытку

Подключенное устройство к Xcode для просмотра журналов в органайзере. Консоль имеет следующее:

Apsd[48]:: произошла ошибка потока для: Error Domain=Nsposixerrordomain Code=61 " операция не могла’ - t - Б-Е-К-О-М-П-Л-Е-Т-Е-Д. -С-О-Н-Е-С-Т-я-о -р-е-е-нас-Е-Д-и" -ус-е-р-В-Е-О-=-0-х-1-4-7-0-8-0 -{-}

Именно так, включая символы" -".

Установка же ad-hoc сборки на те же устройства iOS 5 через iTunes sync работает, как и ожидалось, без ошибок.

Тип учетной записи-это" обычная " учетная запись разработчика, а не предприятия.

Я уже пытался создать все профили подготовки с нуля. Пока не пытался удалить и создать новые сертификаты, надеюсь, что это не так требуемый.

Приложение не использует iCloud или push-сообщения, или что-нибудь еще. Никаких Льгот.plist входит в комплект поставки.

Может быть важно упомянуть тот факт, что приложение строится с CocoaPods-кучей сторонних библиотек, построенных в качестве целевой платформы Pods.

5 4

5 ответов:

Ну, вы, конечно, будете удивлены, узнав, какова реальная причина.

В итоге я отозвал все сертификаты, удалил профили, прошел весь путь от CSR до настройки среды сборки. Я экспериментировал с правами и "получить-задание-разрешить" и другими вещами. Но ничего из этого не помогло.

В какой-то момент я решил еще раз взглянуть на сервер IIS и файл plist, используемый для распространения. Так вот, проблема была с файлом plist. Изображение обложки iTunes файл был назван " iTunesArtwork.png ", url-адрес в файле plist был http://hostname/Mobile/iOS/iTunesArtwork.

Поэтому я переименовал файл в " iTunesArtwork "(удаленное расширение), что не исправило проблему, но теперь я мог видеть, как индикатор выполнения установки почти дошел до конца и сообщение о состоянии изменилось с" загрузка "на"Установка". До этого он провалился в самом начале, сразу после того, как сказал "Подождите".

Наконец, я привел все это в порядок, назвав файл " iTunesArtwork.png " и фиксированный url, чтобы быть http://hostname/Mobile/iOS/iTunesArtwork.png

И вот тогда это сработало.

Я смог придумать только следующее объяснение:

Перед началом установки iOS проверяет, все ли URL-адреса в plist указывают на допустимые ресурсы. Если что-либо из этого не удается, iOS 5 прерывает установку, в то время как iOS 6 может по крайней мере терпеть недопустимый url-адрес обложки.

Во время установки iOS сначала извлекает значок приложения, чтобы отобразить его на экране, затем загружает файл ipa и в конце извлекает художественное произведение. Здесь, опять же, iOS 5 имеет более строгие правила проверки, ему не нравятся такие имена, как "iTunesArtwork", я думаю, что ему просто не нравится имя файла без расширения. Если не удается извлечь обложку, вся установка на iOS 5 прерывается. iOS 6, похоже, игнорирует ошибки на этом этапе.

Лично я считаю, что iOS 5 делает это правильно. Это хорошая вещь, чтобы проверить, что все URL-адреса действительны и все файлы имеют правильное расширение. Если бы обе версии iOS делали это одинаково, я бы наткнулся на проблему в самом начале. начало.

UPD

Только что попробовал программу установки веб-сервера apache, работающую на Mac OS X 10.8. Могу сказать точно, в отличие от IIS, с apache iOS 5 довольно хорошо переносит отсутствующие расширения, так что это не просто iOS 5, но смесь iOS 5 и IIS, которая вызывает все проблемы.

Однако, если я помещу такие вещи, как http://hostname/Mobile/iOS/NoSuchFile в plist вместо иллюстрации, то iOS 5 не сможет установить OTA, в то время как iOS 6 даже не заметит ничего и продолжит установку.

Добавьте файл прав в свой проект и установите его "get-task-allow" в "NO". У меня были подобные проблемы, пока я не сделал это; ОТА иногда работал, а иногда нет. Несмотря на то, что Apple говорит, что она должна работать без файла прав, похоже, что это больше не так.

Убедитесь, что вы установили "get-task-allow" обратно в " YES " для нормальной разработки/отладки.

Для справки, вот содержимое файла прав:

<?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>keychain-access-groups</key>
    <array>
        <string>$(AppIdentifierPrefix)com.yourCompany.yourAppname</string>
    </array>
    <key>get-task-allow</key>
    <false/>
</dict>
</plist>

Конечно, вы нужно заменить на "yourCompany.yourAppname " материал с идентификатором вашего приложения.

Я столкнулся с этой проблемой с помощью diawi или testflight. Как только он начнет не работать, вы должны удалить частично загруженное приложение на устройстве.

Пытались ли вы отправить и установить сертификаты до ipa ?

Из моего опыта, есть несколько шагов, чтобы решить эту проблему, которую многие из нас испытали;

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

  2. Перед подписанием приложения (при компиляции с помощью опции "архив") обновите его до последних доступных профилей, возможно, удалив старые профили, показанные в органайзере, и нажав кнопку "Обновить" внизу. войдите в свою учетную запись разработчика.

  3. Установите для идентификатора подписи значение "распространение" (ad hoc). Это, по крайней мере, поможет, если вы скомпилируете его с помощью "Build" и загрузите в сервис, подобный Diawi.  Если вы используете такую службу, как Diawi, загрузите профиль мобильной подготовки, с которым вы подписали (ad-Hoc), и попросите пользователей установить его до установки приложения через интерфейс, предоставляемый Diawi.

  4. Подпишите приложение с помощью специального профиля "распространение", а не Профиль" развитие " - это принципиально важно!

Удачи вам!

Попробуйте это сделать выберите все сторонние библиотеки, исключая ваш проект в xcode и в настройках сборки установите пропустить установку в да.