Розміщення Ad-Hoc OTA для iOS працює для 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).

OTA відбувається через IIS з усіма типами MIME, встановленими належним чином (в іншому випадку він не пройде для iOS 6).

На пристроях iOS 5 він починає встановлювати піктограму програми app з індикатором виконання, перший заголовок - "Очікування ...", потім змінюється на назву програми, після чого відображається попереджувальний вигляд

Не вдається завантажити програму

     

зараз не вдається завантажити.

     

Виконано/Повторити

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

apsd [48]:: сталася помилка потоку: Домен помилки = NSPOSIXErrorDomain Код = 61 -4-7-0-8-0 - {-}

Точно так само, в тому числі символи "-".

Встановлення того ж ad-hoc збірки на тих же пристроях iOS 5 через синхронізацію iTunes працює так, як очікується, без помилок.

Тип облікового запису - це "звичайний" обліковий запис розробника, а не Enterprise.

Я вже намагався створити всі профілі резервування з нуля. Не намагалися видалити та створити нові сертифікати, сподіваюся, що це не потрібно.

Програма не використовує iCloud або Pushes, або що-небудь інше. До комплекту не включено жодних Entitlements.plist.

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

4

5 Відповіді

Ну, ви, напевно, будете здивовані, дізнавшись, що таке справжня причина.

Я закінчив відмовлятися від усіх сертифікатів, видаляючи профілі, переходячи від КСВ до налаштування середовища збирання. Я експериментував з правами та "get-task-allow" та іншими матеріалами. Але нічого з цього не зробило.

У якийсь момент я вирішив подивитися на сервер IIS і файл plist, який використовується для розповсюдження. Ось тут і виходить, проблема була з файлом plist. Файл зображення iTunes був названий "iTunesArtwork. png ", URL у файлі plist був http://ім'я хоста/мобільний/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 робить це правильно. Добре перевірити, що всі адреси правильні, а всі файли мають належне розширення. Якби обидві версії 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 навіть не помітить річ і приступити до встановлення.

3
додано
Дуже складна помилка дійсно. Дуже складний. Якби я був на вас, я б назвав цю помилку і поставив її як назву у відповіді! Такі, як "'weird iOS 5", що стосується типів MIME і розширення імені файлу на помилку IIS . Я прочитав ваше запитання і відповідь кілька разів занадто швидко і повністю пропустив вашу точку зору. Важливо писати таким чином, щоб ви могли побачити очі читача. Спеціально тут, у мережі StackExchange.
додано Автор cregox, джерело
Неймовірний улов, якщо це дійсно так
додано Автор Ben Max Rubinstein, джерело
Спробуйте Діаві. Не можу повірити, що вони використовують IIS :) Слід швидше
додано Автор Ben Max Rubinstein, джерело
Ну, я можу помилятися, звинувачуючи всіх на iOS. Це може бути, що є невеликий трохи неприємностей сприяв IIS установки. Я сподіваюся, що я маю деякий час і перевірити OTA з OS X Server і перевірити, чи проблема все ще існує.
додано Автор i4niac, джерело
Зазвичай я притримуюся TestFlight для власних проектів. З цим ми повинні були мати "сирі" OTA, не треті сторони.
додано Автор i4niac, джерело

Додайте файл проекту до вашого проекту та встановіть його "get-task-allow" на "NO". У мене були подібні проблеми, поки не зробили це; ОТА іноді буде працювати, а іноді й не. Незважаючи на те, що 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 У мене виникли проблеми з моєю ОТА працювати іноді, а іноді і немає. Коли ви додаєте до права, ви зберігаєте $ (AppIndentifierPRefix)?
додано Автор Alan, джерело
@Alan Так, $ (AppIdentifierPrefix) знаходиться там.
додано Автор fishinear, джерело
Я спробую це завтра і побачу. Я можу сказати напевно, що не існує жодних прав, так що це може працювати, принаймні я сподіваюся.
додано Автор i4niac, джерело
Не вийшло. Я експериментував з get-task-allow встановити YES, NO, повністю вилучений, не спрацював. Там-то я чітко пропустити, що пов'язано з iOS 5 проти iOS 6, але я поняття не маю, що це до цих пір.
додано Автор i4niac, джерело

Я зустрів цю проблему з diawi або testflight. Після того, як він почне не працювати, потрібно видалити частково завантажену програму на пристрої.

Чи намагалися ви надіслати та встановити сертифікати перед ipa?

1
додано
Ви маєте на увазі профілі надання послуг? Так, спробував, що також, не пощастило. У мене є принаймні 3 пристрої, які я ніколи не поклав на руки, тільки що отримав їх UDID і додав ці пристрої до спеціального профілю, навіть не поділився профілем забезпечення цих хлопців. Вони змогли встановити OTA без проблем, звичайно всі ті айфони запускають iOS 6. У моєму випадку зрозуміло, що iOS 6 працює, а iOS 5 не працює.
додано Автор i4niac, джерело

З мого досвіду, є кілька кроків, щоб подбати про цю проблему, яку багато з нас пережили;

  1. Переконайтеся, що UDID вашого пристрою зареєстровано на порталі надання і пов'язано з профілем надання, з яким ви підписуєтеся.

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

  3. Встановіть ідентифікацію підпису "Розповсюдження" (Ad hoc). Це допоможе, принаймні, допомогти, якщо ви скомпілюватимете його за допомогою "Збірки" та завантажте до служби типу Diawi. Якщо ви користуєтеся послугою, подібною до Diawi, завантажте підписаний вами профіль мобільного забезпечення, який ви підписали (Ad-Hoc), і дозвольте користувачам інсталювати його до встановлення програми через інтерфейс, який надає Diawi. >

  4. Підпишіть додаток із профілем Ad-Hoc "Розповсюдження", а не профілем "Розробка" - це дуже важливо!

Удачі!

1
додано
Якщо ви бажаєте отримати більший список: stackoverflow.com/a/19661276/274502
додано Автор cregox, джерело
Завжди допомагали тут, з або без ілюстрації png :)! Але я радий, що ви знайшли правильне рішення для вашої справи.
додано Автор Ben Max Rubinstein, джерело
Я перевіряв всю рутину не раз. Наскільки це виходить, я можу посперечатися, і ці кроки будуть правильними. Якби я зробив помилку в будь-якому з них, то iOS5 і iOS6 не вдасться.
додано Автор i4niac, джерело

Спробуйте обрати всі бібліотеки третіх сторін, які виключають ваш проект у xcode, а в налаштуваннях збірки встановіть skip install на yes.

0
додано
Цей прапор встановлений, cocoapods робить це, коли генерує файл проекту Pods.
додано Автор i4niac, джерело
IT KPI iOS
IT KPI iOS
74 учасників

Чат обсуждения IOS. - Оффтоп, флуд, оскорбления и вбросы здесь не приняты. - За нарушение - предупреждение или mute на неделю. - За спам и рекламу - ban. Все чаты IT KPI: https://t.me/itkpi/602

ios_jobs_ua
ios_jobs_ua
27 учасників

Mobile Dev Jobs UA
Mobile Dev Jobs UA
20 учасників

Публикуем вакансии и запросы на поиск работы по направлению iOS, Android, Xamarin, RN и т.д.