распространение беспроводного приложения для iphone - проблема с протоколом itms-сервисов - PullRequest
23 голосов
/ 14 января 2011

Я следовал всем указаниям от 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 ]

16 голосов
/ 28 февраля 2011

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

15 голосов
/ 22 мая 2013

Ответ на самом деле очень прост: 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:] до validate 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"
4 голосов
/ 27 января 2011

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

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

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

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

3 голосов
/ 02 мая 2011

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

2 голосов
/ 05 июня 2012

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

2 голосов
/ 03 апреля 2011

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

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

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

1 голос
/ 28 августа 2013

Для тех, кто заинтересован в динамическом генерировании их 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.

1 голос
/ 19 ноября 2012

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

1 голос
/ 08 февраля 2011

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

1 голос
/ 29 июня 2012

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...