Беспроводное распределение приложений iphone - проблема с протоколом itms-services
Я следил за всеми направлениями из Apple и некоторым другим блогом posts. Я заархивировал приложение, сделал файлы .plist и .ipa, поместил их на сервер и связал с ними. Я могу установить профиль подготовки просто отлично. Но когда я нажимаю на ссылку для установки приложения (в сафари на iphone), ничего не происходит. Нет сообщения об ошибке. Ничего. Вот как выглядит ссылка:
<a href="itms-services://?action=download-manifest&url=http://mydomain.com/test/myApp.plist">Install the app</a>
Любая идея, почему это не работает? Кажется, протокол itms-services просто мертв. MIME-типы прекрасны (я могу указать файл plist в адресной строке и отображать его как текст).
Ответы
Ответ 1
У меня были подобные симптомы, когда у меня было место в именах файлов манифеста и файла архива приложения. Я удалил из них все пробелы, и для меня работала беспроводная установка. Похоже, ваш манифест не имеет места, поэтому, возможно, ваш файл приложения?
Ответ 2
Ответ на самом деле очень прост: 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-services использует +[NSURL URLWithString:]
для проверки URL-адресов: url=.../My%20App.plist
не приводит к запросу, потому что [NSURL URLWithString:@"https://.../My App.plist"]
возвращает nil
. Тем не менее, в NSURL существует давняя ошибка: она будет избегать одного символа недействительного (BMP) в конце вместо того, чтобы возвращать нуль. Мои тестовые примеры
-
url=.../test/%3c
приводит к журналу "GET /test/< HTTP/1.1"
(это определенно неверный HTTP!)
-
url=.../test/%0a
приводит к ошибке на устройстве, но не сообщению журнала (поскольку Apache рассматривает его как отклоненный запрос)
-
url=.../test/%0d
приводит к журналу "GET /test/\r HTTP/1.1"
Ответ 3
itms-services - это идентификатор, по которому apple/iphone определит, что он должен проверить сертификат, и он должен установить.
Чтобы проверить профиль обеспечения перед установкой файла ipa, он подключится к "ax.init.itunes.apple.com" и "ocsp.apple.com".
Если вы используете какое-либо подключение к интрасети, проверьте, доступны ли эти ссылки или нет? если нет, вы не можете установить приложение через эфир.
& минимальная ОС на устройстве должна быть 4.0
Ответ 4
Я использовал IIS 6.0, а страница index.html загружалась, но когда пользователь нажал на ссылку .plist с яблочного устройства (i.e) iphone 4, я продолжал получать "не могу подключиться к www.mywebsite.com". Решение помимо добавления MIME-типа состояло в том, чтобы предоставить общий доступ к веб-ресурсам, где был .plist файл, и наиболее важно: изменить доступ к безопасности файла манифеста .plist. дал полный контроль над пользователями Windows по умолчанию
Ответ 5
Правильно настройте настройки MIME вашего сервера.
Google для этого вы найдете правильный путь
http://developer.apple.com/library/ios/#featuredarticles/FA_Wireless_Enterprise_App_Distribution/Introduction/Introduction.html
Ответ 6
Похоже, у вас есть несколько указателей на то, что может быть проблемой, в следующий раз: проверьте консоль устройства от Xcode Organizer, она обычно содержит полезную информацию о неудачном распределении OTA.
Ответ 7
Убедитесь, что все URL-адреса полностью защищены. В том числе для файлов png.
Ответ 8
У меня была та же проблема, что и выше. После проверки всех вышеперечисленных и сбоев, я понял, что когда я архивировал свое приложение, я не добавлял URL-адрес приложения в настройки, поэтому этот URL-адрес никогда не был в моем файле plist. Убедитесь, что когда вы просматриваете свой файл plist, там находится URL приложения.
Ответ 9
Как и многие другие, я также столкнулся с этим демоном проблемы. В моем случае проблема заключалась в том, что файл plist был неправильно сформирован. Убедитесь, что файл соответствует точной схеме, описанной в документации: http://developer.apple.com/library/ios/#featuredarticles/FA_Wireless_Enterprise_App_Distribution/Introduction/Introduction.html
Ответ 10
Для любого, кто заинтересован в динамическом создании своего 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
.
Ответ 11
Я встретил эту проблему точно так, как вы описали, и моя проблема оказалась упущенной "http://" в URL-адресе. После того, как я добавил эту часть в поле url в файле .plist, все работало нормально. Надеюсь, это поможет!
Ответ 12
У меня были подобные проблемы при распространении моего приложения с использованием профиля подготовки AdHoc. Я попытался удалить старые профили, создать новые профили, перезапустить Xcode, очистить и перестроить, проверить имена путей URL и т.д. Приложение будет установлено на некоторых устройствах, но не на других.
Что сработало для меня, так это изменение версии приложения и создание нового номера.
Ответ 13
Я обнаружил, что "не могу использовать index.html" для ios 6 для установки приложения. Исправлено изменением с 'index.html' на 'dev.html'. надежда поможет кому-то
Ответ 14
Я пробовал в одно и то же время, поэтому я не уверен, какой из них был хорошим.
Создал идентификатор приложения wildcard (имя wildcard, идентификатор пакета *), создал профиль для этого приложения и подписал ipa с этим профилем.
Зарегистрировано одно устройство на портале инициализации.
назвал файл, в котором я связал приложение dev.html вместо index.html
Ответ 15
Правильное решение - заменить пробелы на "+" (плюс), поскольку... url =... означает, что это параметр строки запроса, и они должны быть закодированы как параметр данных формы при кодировании для URL-адресов.
Отсюда W3.org - Формы в документах HTML:
"Управляющие имена и значения экранируются. Символы пробела заменяются на" + ", а затем зарезервированные символы экранируются, как описано в [RFC1738]"
P.S. Это решило ту же проблему, с которой мы столкнулись во время разработки icenium.com.
Вы можете проверить наличие соглашения AdHoc и посмотреть, как он работает для проектов с пробелами в именах.
Ответ 16
Если вы отправляете ссылку с электронного письма, вы НЕ МОЖЕТЕ использовать форматирование HTML в письме. Вы должны использовать форматирование "богатого текста"
Не знаю, почему, но вот как это (по крайней мере с Outlook)