Распространение беспроводного приложения для iphone - проблема с протоколом itms-сервисов

Я следовал всем указаниям Apple и некоторым другим постам в блоге. Я заархивировал приложение, создал файлы.plist и.ipa, разместил их на сервере и связал с ними. Я могу установить профиль обеспечения просто отлично. Но когда я нажимаю на ссылку, чтобы установить приложение (в сафари на iphone), ничего не происходит. Нет сообщения об ошибке. Ничего такого. Вот как выглядит ссылка:

<a href="itms-services://?action=download-manifest&url=http://mydomain.com/test/myApp.plist">Install the app</a>

Есть идеи, почему это не работает? Кажется, протокол itms-сервисов просто мертв. Типы MIME хороши (я могу указать на файл plist в адресной строке, и он отображается в виде текста).

17 ответов

Ответ на самом деле очень прост: URL должен быть "двойным экранированием", т.е.

itms-services://?action=download-manifest&url=https://example.com/My%2520App.plist

Это связано с тем, что значение становится неэкранированным https://example.com/My%20App.plist перед обработкой как другой URL. Это освобождается сервером на example.com в пространство.

Парсер не обрабатывает + специально: ...&url=https://.../test/a+b результаты в "GET /test/a+b HTTP/1.1" появляются в логах Apache. (Неразумно полагать, что все строки запроса application/x-www-form-urlencoded; это только стандартизировано в HTML.)

Кстати, похоже, что itms-сервисы используют +[NSURL URLWithString:] проверить URL: url=.../My%20App.plist не приводит к запросу, потому что [NSURL URLWithString:@"https://.../My App.plist"] возвращается nil, Однако в NSURL существует давняя ошибка: в конце он будет избегать одного недопустимого символа (BMP) вместо возврата nil. Мои тестовые случаи

  • url=.../test/%3c результаты в журнале "GET /test/< HTTP/1.1" (это определенно неверный HTTP!)
  • url=.../test/%0a приводит к ошибке на устройстве, но нет сообщения журнала (потому что Apache обрабатывает его как некорректный запрос)
  • url=.../test/%0d результаты в журнале "GET /test/\r HTTP/1.1"

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

itms-services - это идентификатор, по которому apple / iphone идентифицирует, что он должен проверить сертификат и установить его.

Чтобы проверить профиль обеспечения перед установкой файла ipa, он подключится к "ax.init.itunes.apple.com" и "ocsp.apple.com".

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

& минимальная ОС на устройстве должна быть 4.0

Я использовал IIS 6.0, и страница index.html загружалась, но когда пользователь нажимал на ссылку.plist с устройства Apple (то есть) iphone 4, я продолжал получать сообщение "не могу подключиться www.mywebsite.com". Решение, помимо добавления MIME Type, состояло в том, чтобы предоставить общий доступ к веб-файлу, где находился файл.plist, и самое важное: изменить доступ к безопасности файла манифеста.plist. дал полный контроль над пользователем Windows по умолчанию

Сделайте настройки MIME вашего сервера правильными.

Google для этого вы найдете правильный путь

http://developer.apple.com/library/ios/#featuredarticles/FA_Wireless_Enterprise_App_Distribution/Introduction/Introduction.html

Похоже, у вас есть несколько указаний на то, в чем может быть проблема, в следующий раз: проверьте консоль устройства в Xcode Organizer, она обычно содержит полезную информацию о сбое распространения OTA.

Для тех, кто заинтересован в динамическом генерировании их plist, этот пример - PHP:

$appUrl='itms-services://?action=download-manifest&url=http://server/iOSpList.php?'.
                'url%3D'.$app['url'].
                '%26bundle%3D'.$app['bundle'].
                '%26version%3D'.$app['version'].
                '%26name%3D'.$app['name'];

Кроме того, убедитесь, что тип MIME возвращается как application/xml,

Как и многие другие, я также столкнулся с этим демоном проблемы. В моем случае проблема была в том, что файл plist был неправильно отформатирован. Убедитесь, что файл соответствует точному шаблону, указанному в документации: http://developer.apple.com/library/ios/#featuredarticles/FA_Wireless_Enterprise_App_Distribution/Introduction/Introduction.html

У меня была та же проблема, что и выше. Попробовав все вышеперечисленное и потерпев неудачу, я понял, что когда я архивировал свое приложение, я не указывал URL-адрес приложения в настройках, поэтому этот URL никогда не был в моем файле plist. Когда вы посмотрите на свой plist-файл, убедитесь, что там находится URL-адрес приложения.

Убедитесь, что все URL-адреса полностью определены. В том числе и для файлов PNG.

Я обнаружил, что "не могу использовать index.html" для ios 6 для установки приложения. Исправлено изменением с index.html на dev.html. надежда поможет кому-то

Я встретил эту проблему именно так, как вы описали, и моя проблема оказалась в том, что я пропустил "http://" в URL. После того, как я добавил эту часть в поле url в файле.plist, все заработало нормально. Надеюсь, поможет!

Правильным решением является замена пробелов на "+"(плюс), так как...url=... означает, что это параметр строки запроса, и они должны быть закодированы как параметр данных формы при кодировании для URL-адресов.

Отсюда W3.org - формы в документах HTML:

"Имена и значения элементов управления экранированы. Символы пробела заменяются на" + ", а затем зарезервированные символы экранируются, как описано в [RFC1738]"

PS Это решило ту же проблему, с которой мы столкнулись при разработке icenium.com. Вы можете проверить подпись положения AdHoc там и посмотреть, как это работает для проектов с пробелами в именах.

У меня были похожие проблемы при распространении моего приложения с использованием профиля обеспечения AdHoc. Я попытался удалить старые профили, создать новые профили, перезапустить XCode, очистить и восстановить, проверить пути URL-адреса и т. Д. Приложение будет установлено на некоторых устройствах, но не на других.

Для меня сработало изменение версии приложения и сборка под новый номер.

Я попробовал несколько в то же время, так что я не уверен, какой из них был хорошим.

Создал идентификатор приложения с подстановочными знаками (имя подстановочного знака, идентификатор bunde *), создал профиль для этого приложения и подписал ipa этим профилем.

Зарегистрировано одно устройство на портале инициализации.

назвал файл, где я связал приложение dev.html вместо index.html

Я думаю, что вы также должны сделать это https, как в https://mydomain/

Если вы отправляете ссылку из электронного письма, вы НЕ МОЖЕТЕ использовать форматирование HTML в электронном письме. Вы должны использовать форматирование "Rich Text"

Не знаю почему, но так оно и есть (по крайней мере, с Outlook)

Другие вопросы по тегам