Распространение iOS Ad-Hoc OTA работает для iOS 6 и не работает с iOS 5

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

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

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

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

     

не удалось загрузить в настоящее время.

     <Р> Done/Retry

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

apsd [48]:: Ошибка потока для: Error Domain = NSPOSIXErrorDomain Code = 61 «Операция не может быть выполнена -конфигурирована -Connection -refused-» -UserInfo - = - 0-x-1 -4-7-0-8-0 - {-}

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

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

Тип учетной записи - это «простая» учетная запись разработчика, а не Enterprise.

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

Приложение не использует iCloud или Pushes или что-то еще. No Entitlements.plist не входит в комплект.

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

4
добавлено автор cregox, источник

5 ответы

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

Я закончил отмену всех сертификатов, удалив профили, полностью от CSR до создания среды сборки. Я экспериментировал с правами и возможностью «получить задание» и другими вещами. Но ничто из этого не помогло.

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

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

Finally, I put all that stuff in order, named the file "iTunesArtwork.png" and fixed url to be 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 вызывает все проблемы.

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

3
добавлено
Действительно, очень сложная ошибка. Очень очень сложно. Если бы я был вами, я бы назвал эту ошибку и поставил ее в качестве заголовка в ответе! Например, "'weird iOS 5, связанный с типом mime и расширением имени файла при ошибке IIS" . Я прочитал ваш вопрос и ответ пару раз слишком быстро и полностью пропустил вашу мысль. Это важно писать так, чтобы вы могли поймать взгляд читателя. Специально здесь, в сети StackExchange.
добавлено автор cregox, источник
Невероятный улов, если это действительно так
добавлено автор Ben Max Rubinstein, источник
Попробуйте Diawi. Не могу поверить, что они используют IIS :) Должно быть быстрее
добавлено автор Ben Max Rubinstein, источник
Возможно, я ошибаюсь, обвиняя всех в iOS. Может быть, есть небольшая проблема, связанная с настройкой IIS. Надеюсь, у меня есть время и протестировать OTA с OS X Server и проверить, есть ли проблема.
добавлено автор i4niac, источник
Обычно я использую TestFlight для своих собственных проектов. С этим нам нужно было иметь «сырой» OTA, никаких третьих сторон.
добавлено автор i4niac, источник

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

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

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

<?xml version="1.0" encoding="UTF-8"?>



    keychain-access-groups
    
        $(AppIdentifierPrefix)com.yourCompany.yourAppname
    
    get-task-allow
    


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

2
добавлено
@fishinear У меня проблемы с моим OTA будут работать иногда, а иногда нет. Когда вы добавляете в право, вы сохраняете $ (AppIndentifierPRefix)?
добавлено автор Alan, источник
@Alan Да, там есть $ (AppIdentifierPrefix).
добавлено автор fishinear, источник
Я попробую это завтра и посмотрю. Я могу точно сказать, что файл прав не существует, так что это может сработать, по крайней мере, я надеюсь.
добавлено автор i4niac, источник
Не работает. Я экспериментировал с get-task-allow, установленным в YES, NO, полностью удаленным, не получилось. Я кое-что пропустил, что связано с iOS 5 и iOS 6, но я понятия не имею, что это такое.
добавлено автор i4niac, источник

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

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

1
добавлено
Вы имеете в виду профили настройки? Да, попробовал это, не повезло. У меня есть как минимум 3 устройства, на которых я никогда не занимался, просто получил свой UDID и добавил эти устройства к специальному профилю, даже не предоставил профили для этих парней. Они смогли установить OTA без проблем, конечно, все эти iPhones запускают iOS 6. В моем случае ясно, что iOS 6 работает, а iOS 5 - нет.
добавлено автор i4niac, источник

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

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

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

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

  4. Войдите в приложение с профилем «Распространение» Ad-Hoc, а не с профилем «Разработка» - это важно!

Удачи!

1
добавлено
Если вы хотите получить более подробный контрольный список: stackoverflow.com/a/19661276/274502
добавлено автор cregox, источник
Всегда помогал здесь, с или без работы png's :)! Но я рад, что вы нашли правильное решение для своего дела.
добавлено автор Ben Max Rubinstein, источник
Я проверил всю процедуру несколько раз. Насколько мне известно, я мог бы потащить целое состояние и сказать, что эти шаги верны. Если бы я допустил ошибку в любом из них, то и iOS5, и iOS6 потерпели бы неудачу, даже обычная синхронизация iTunes завершится неудачей, но это не так.
добавлено автор i4niac, источник

Попробуйте. Выберите все сторонние библиотеки, исключая ваш проект в xcode, и в настройках сборки установите skip install в yes.

0
добавлено
Этот флаг установлен, cocoapods делает это при создании файла проекта Pods.
добавлено автор i4niac, источник
Mobile Dev Jobs — вакансии и аналитика
Mobile Dev Jobs — вакансии и аналитика
6 187 участник(ов)

Публикуем вакансии и запросы на поиск работы по направлению iOS, Android, Xamarin и т.д. ВАЖНО: Правила публикации и правила канала: Ссылка – https://telegra.ph/Pravila-oformleniya-vakansij-i-rezyume-11-09-2

iOS Developers — русскоговорящее сообщество
iOS Developers — русскоговорящее сообщество
2 400 участник(ов)

Общаемся на темы, посвященным iOS-разработке, Swift, Objective-C, SDK, Rx, Cocoa и т.д.