Развертывание корпоративных приложений не работает на iOS 7.1

Мы распространяем приложения через корпоративную учетную запись, используя itms-services:// URL. Это всегда работало нормально, но после установки iOS 7.1 beta на наш iPad он отказывается устанавливать. Вместо этого мы просто получаем общий Cannot connect to example.com сообщение, которое iOS бесполезно отображает при возникновении проблем с загрузкой приложения.

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

16 ответов

Решение

Я обнаружил проблему, подключив iPad к компьютеру и просматривая консоль через XCode Organizer при попытке установить приложение. Ошибка оказывается:

Не удалось загрузить URL-адрес, не являющийся https: http://example.com/manifest.plist

Оказывается, в iOS 7.1, URL для manifest.plist файл должен быть HTTPS, где мы использовали HTTP. Изменение URL-адреса на HTTPS решило проблему.

Т.е.

itms-services://?action=download-manifest&url=http://example.com/manifest.plist

становится

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

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

Ингконти прав.

  1. Загрузите ваш app.plist в Dropbox.
  2. Получить общую ссылку app.plist, например https://www.dropbox.com/s/qgknrfngaxazm38/app.plist
  3. замещать www.dropbox.com с dl.dropboxusercontent.com в ссылке, например https://dl.dropboxusercontent.com/s/qgknrfngaxazm38/app.plist
  4. Удалите все параметры в разделяемой ссылке Dropbox, например, "? Dl=0t" (согласно Карлосу Агирре Tradeco при развертывании приложения Enterprise не работает на iOS 7.1 и моем собственном опыте).
  5. Создать download.html файл со ссылкой в ​​формате <a href="itms-services://?action=download-manifest&url=https://dl.dropboxusercontent.com/s/qgknrfngaxazm38/app.plist">INSTALL!!</a>
  6. Загрузите свой download.html в Dropbox
  7. Снова получите общую ссылку на файл download.html, например https://www.dropbox.com/s/gnoctp7n9g0l3hx/download.html, и удалите все параметры.
  8. замещать www.dropbox.com с dl.dropboxusercontent.com также во второй ссылке, например https://dl.dropboxusercontent.com/s/gnoctp7n9g0l3hx/download.html

Теперь посетите https://dl.dropboxusercontent.com/s/gnoctp7n9g0l3hx/download.html на вашем устройстве вы можете установить приложение, как раньше.

ЧТО ЗА ЧУДЕСНЫЙ МИР!

В дополнение к ответу Марка Парнелла, быстрый и грязный способ обойти это - поместить лист манифеста в Dropbox, а затем с помощью веб-интерфейса Dropbox получить прямую ссылку https на него ('Поделиться ссылкой' -> ' Получить ссылку '->' Скачать ').

Настоящий ipa может остаться там, где вы всегда его обслуживали. Вам нужно будет URL-кодировать URL-адрес plist, прежде чем вставлять его в запрос URL-адреса itms-servivces (хотя может подойти только замена любых &s на%3D).

Одним из недостатков является то, что диалоговое окно установки теперь будет читать "dl.dropbox.com хочет установить [что угодно]".

Это правда, что в будущем вы должны будете выполнить все развертывания OTA через https в iOS7.1. Позор Apple, что не документировал это.

Для тех из вас, кто ищет лучшее внутреннее решение, нежели полагается на Dropbox или вынужден раскошелиться на получение сертификата, у вас может быть решение, если вы выполните шаги, описанные в совете № 5 здесь: http://blog.httpwatch.com/2013/12/12/five-tips-for-using-self-signed-ssl-certificates-with-ios/

Суть этого заключается в следующем:

  • Создайте свой собственный сертификат CA Authority, который вы можете установить на полностью доверенное устройство (я установил его, отправив его по электронной почте)
  • Создайте пару ключ / cer для корневого сертификата и установите ее на свой сервер
  • Убедитесь, что ваш веб-сервер использует пару ключ / сертификат, соответствующую корневому сертификату CA Authority.
  • На этом этапе вы сможете устанавливать свои приложения как обычно через https
  • Все это может быть выполнено в OSX с использованием openssl, который уже установлен по умолчанию

Это не то же самое, что просто сделать самозаверяющий сертификат, в этом решении вы также действуете как собственный частный центр сертификации. Если ваш корневой сертификат, установленный на вашем устройстве Apple, не помечен как доверенный (зеленый), значит что-то не так. Сделать это в течение.

Это абсолютно работает.

Обновление: 13.03.2014 - я предоставил небольшую утилиту командной строки, которая упрощает весь этот процесс. Вы можете получить его по адресу: https://github.com/deckarep/EasyCert/releases

У меня была та же проблема, и хотя я уже использовал сервер SSL, простое изменение ссылок на https не работало, так как была основная проблема.

Нажмите здесь для изображения

Этот выделенный бит подсказал мне, что нам следует предоставить возможность доверять сертификату, но, поскольку это магазин приложений, работающий через Safari, предложение о восстановлении просто не представлено.


Я не был доволен существующими решениями, потому что:

  • Некоторые параметры требуют зависимости от третьей стороны (Dropbox)
  • Мы не были готовы платить за сертификат SSL
    • Бесплатные SSL-сертификаты являются лишь временным решением.

Наконец-то я нашел решение, создав самозаверяющий корневой центр сертификации и с помощью этого сгенерировав SSL-сертификат нашего сервера.

Я использовал Keychain Access и OSX Server, но для каждого шага есть другие правильные решения


Создание центра сертификации

Из того, что я понимаю, центры сертификации используются для проверки подлинности сертификатов. Поскольку мы собираемся создать его самостоятельно, это не совсем безопасно, но это означает, что вы можете доверять всем сертификатам от данного органа. Список этих прав доступа обычно включен в ваши браузеры по умолчанию, так как они действительно заслуживают доверия. (GeoTrust Global CA, Verisign и т. Д.)

  • Откройте Keychain и используйте помощник по сертификатам для создания полномочий

  • Заполните информацию о вашем центре сертификации

  • Я не знаю, нужно ли это, но я доверил авторитету.


Генерация запроса на подпись сертификата

В нашем случае запросы на подпись сертификата генерируются администратором сервера. Просто это файл, который спрашивает "Могу ли я иметь сертификат с этой информацией для моего сайта, пожалуйста".

  • Далее вам нужно будет создать запрос на подпись сертификата (для этого бита я использовал менеджер сертификатов OSX Server).

  • Заполните информацию о вашем сертификате (Должен содержать только символы ascii!, спасибо @Jasper Blues)

  • Сохранить где-нибудь создать CSR


Создание сертификата

Действуя снова как центр сертификации, вы сами решаете, является ли лицо, которое прислало вам CSR, подлинным и не претендует на то, чтобы быть кем-то другим. Реальные власти имеют свои собственные способы сделать это, но так как вы, надеюсь, совершенно уверены, что вы сами, ваша проверка должна быть совершенно уверенной:)

  • Вернитесь в Keychain Access и откройте опцию "Создать сертификат...", как показано

  • Перетащите сохраненный CSR в указанное поле

  • Нажмите "Позвольте мне переопределить значения по умолчанию для этой кнопки запроса"

  • Мне нравится увеличивать срок действия.

  • По какой-то причине, мы должны заполнить некоторую информацию снова

  • Нажмите продолжить на этом экране

  • УБЕДИТЕСЬ, ЧТО ВЫ НАЖИМАЕТЕ АУТЕНТИФИКАЦИЮ SSL-СЕРВЕРА, это вызвало у меня некоторые головные боли.

  • Вы можете нажать продолжить через остальные параметры.

  • Откроется приложение Почта, которое даст вам возможность отправить сертификат. Вместо отправки по электронной почте щелкните правой кнопкой мыши и сохраните.


Установка сертификата

Теперь нам нужно настроить сервер на использование только что созданного сертификата для его трафика SSL.

  • Если устройство, на котором вы работаете, является вашим сервером, вы можете обнаружить, что сертификат уже установлен.

  • Если это не так, дважды щелкните по ожидающему сертификату и перетащите файл PEM, который мы только что сохранили из электронного письма, в указанное место. (В качестве альтернативы вы можете экспортировать свой PEM из цепочки для ключей, если вы его не сохранили.)

  • Обновите свой сервер, чтобы использовать этот новый сертификат. Если вы обнаружите, что новый сертификат не "прилипает" и продолжает возвращаться, вернитесь к " BOLD ITALIC CAPS"


Настройка устройств

Каждое устройство, на которое необходимо установить приложения, должно иметь копию этого центра сертификации, чтобы они знали, что могут доверять SSL-сертификатам от этого центра

  • Вернитесь в Keychain Access и экспортируйте свой центр сертификации как.cer

  • Затем я помещаю этот файл на свой сервер с моими приложениями OTA, пользователи могут щелкнуть эту ссылку и загрузить сертификат полномочий. Отправка сертификата по электронной почте пользователям также является допустимым вариантом.

  • Установите сертификат на свое устройство.


Тестовое задание

  • Убедитесь, что ваши plist ссылки являются https

    • Попробуйте установить приложение! Теперь должно работать. Центр сертификации является доверенным, и сертификат SSL пришел от этого центра.

Я могу подтвердить, что это работает, но Вы должны поместить html и plist на dropbox. Это работает также для OTA, не являющейся предприятием, т.е. вы хотите поделиться приложением с вашим разработчиком. команда.

Я сделал:

а) на моем сайте я сделал страницу с этой ссылкой:

.. href = "https://dl.dropboxusercontent.com/u//(your DB id) /ipa.html"> MyApp

б) на DropBox я написал еще одну HTML-страницу:

.. https://dl.dropboxusercontent.com/u/(your DB id) /MyApp.plist "> Нажмите, чтобы установить MyApp

c) переместил plist в DropBox, но оставил его в POINT на мой старый сервер (без https)

Откройте терминал и выполните команду: curl -i https:// (путь к файлу.ipa не plist)

Это скажет вам, может ли установщик увидеть файл IPA. Если вы запустите команду curl с '-i', вы увидите полный ответ, и это, вероятно, не файл IPA. Это ответ, который видит установщик, поэтому, если он не возвращает HTTP 200 и IPA, вам нужно будет вернуть его на своем конце.

Установщик ITMS не сохраняет контекст из Safari. Если вы прошли аутентификацию на безопасном портале в Safari, куки-файлы аутентификации не передаются установщику. т.е. установщик должен иметь возможность видеть приложение без аутентификации, и это может быть причиной того, что вы получаете сообщение "Не удается подключиться к серверу".

Какой-то хороший парень справился с проблемой, используя сертификат ClassSS StartSSL и общую конфигурацию Apache, которая добавляет поддержку сертификатов (будет работать с любым сертификатом) и код для автоматического изменения ссылок в существующих файлах *.plist. Слишком долго копировать, вот ссылка: http://cases.azoft.com/how-to-fix-certificate-is-not-valid-error-on-ios-7/

У меня были такие же проблемы, и я сделал, как упоминалось выше.

  • Положите лист в дропбокс.
  • Над кнопкой "Скачать файл", под изображением документа правой кнопкой мыши выберите действие "Копировать ссылку". Эта ссылка уже похожа на https://dl.dropboxusercontent.com/s/xyz123/app.plist?stuff=stuff со многими параметрами.
  • Удалить параметры (сохраняется только адрес между https и.plist)
  • Найдите в Интернете URL-кодирование, выберите одну из этих ссылок, скопируйте, вставьте, выполните, затем полученный текст скопируйте и вставьте в HTML-файл, где у меня есть ссылка на itms-сервисы. Кстати, у меня есть этот HTML в двух разных местах, один из которых находится там, где находится ipa.
  • Убедитесь, что plist содержит абсолютные ссылки на файл ipa.

Обе страницы успешно работали для установки приложения на iPhone с IOS 7.1

Но теперь iphone с ios 7.0x не может установить приложение.

Я создал новый вопрос: обновление приложения adhoc не работает на ios, предшествующих 7.1

Оба вопроса тесно связаны, а также связаны с отсутствием официальных ссылок.

Если у вас есть AWS S3, который также работает как шарм. Что ж. Условно говоря:-)

Создайте корзину для ваших специальных объявлений в AWS, добавьте индексный файл (он может быть просто пустым файлом index.html), а затем используйте клиент, который может подключиться к S3, например CyberDuck или Coda (я использовал Coda - где вы выбираете Добавить Сайт, чтобы получить окно подключения), затем установите соединения, как в приложении:

Затем создайте свое корпоративное специальное приложение в XCode и убедитесь, что вы используете https://s3.amazonaws.com/your-bucket-name/your-ad-hoc-folder/your-app.ipa в качестве URL-адреса приложения, и загрузите его в ваш новый каталог S3 Bucket.

Ваша ссылка на itms должна совпадать, т.е. itms-services://? Action = download-manifest & url = https://s3.amazonaws.com/your-bucket-name/your-ad-hoc-folder/your-app.plist

И вуаля.

Это только для общих URL-адресов AWS - я не пробовал использовать пользовательские URL-адреса в AWS, поэтому вам, возможно, придется сделать несколько вещей по-другому.

Я был полон решимости заставить решение Джеймса Вебстера работать выше, но я не смог заставить его работать с Plesk.

В качестве альтернативы использованию Dropbox для корпоративного распространения вы можете использовать TestFlight для распространения корпоративных подписанных приложений.

https://www.testflightapp.com/

Это фантастический сервис для размещения и распространения как специализированных сборок, так и корпоративных сборок.

Далее в предыдущих ответах о Dropbox я реализовал следующее дерево файлов, такое как только файл PLIST должен быть загружен в Dropbox:

  1. загрузить файл ipa на ваш сервер в http (без изменений здесь)
  2. загрузить файл обеспечения (.mobileprovision) на ваш сервер в http (без изменений здесь)
  3. загрузите файл plist в свой список сообщений (без изменений внутри файла plist, поскольку URL-адреса в абсолютном выражении)
  4. используйте опцию "Поделиться ссылкой с Dropbox", которая копирует ссылку в буфер обмена. Эта ссылка должна быть скопирована в ваш HTML-файл в запрос URL-адреса itms-servivces после изменения детали www.dropbox.com от dl.dropboxusercontent.com, Обратите внимание, что URL-адрес закодировал ссылку в соответствии с предложением @Mike, но я не тестирую без этого. Теперь запрос URL-адреса itms-сервисов должен выглядеть так: itms-services://?action=download-manifest&url=https%3A%2F%2Fdl.dropboxusercontent.com%2Fs%2FYourShortDropboxLink.plist

  5. Загрузите HTML-файл на ваш сервер в http. Обратите внимание, что html-файл содержит как ссылки на ipa, так и файлы инициализации.

  6. доступ к вашему html-файлу с вашего устройства, и теперь ipa может быть установлен OTA, как обычно.

Теперь нужно изменить только файл ipa, чтобы OTA предоставила бета-тестерам следующие версии приложений. Пока Apple пока не меняет правила безопасности.

Я присоединяюсь здесь после очень простого HTML-файла, который я использую:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
    "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>iPhone app for test</title>
</head>
<body>
<h1>iPhone app for test</h1>
<br/>
<ul>
    <li><a href="http://www.yourdomain.com/with/directories/provision/v.last/yourprovision_adhoc.mobileprovision">
            Install Provisioning File</a></li>
    <li><a href="itms-services://?action=download-manifest&url=https%3A%2F%2Fdl.dropboxusercontent.com%2Fs%2FYourShortDropboxLink.plist">
            Install Application</a></li>
</ul>
</body>
</html>

Наша команда использует Dropbox для специального распространения, которое использует https, но наше приложение не удалось установить. После долгих попыток устранения неполадок мы поняли, что поле заголовка тоже обязательно. Всякий раз, когда мы отправляли ссылку без этого поля, сафари игнорировало ссылку и не предлагало пользователю установить. Иногда для быстрых тестов разработки мы пропускали заголовочный узел в XML и не заполняли его. В случае, если это полезно для любого, имеющего эту проблему, удостоверьтесь, что ваш.plist содержит следующие заполненные узлы:

      ....
     <string>software</string>
    <key>title</key>
     <string>Your App Name</string>
      ...

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

Не удалось загрузить манифест загрузки с основной ошибкой: Ошибка Domain=NSURLErrorDomain Code=-1202 "Невозможно подключиться к хранилищу" UserInfo=0x146635d0 {NSLocalizedDescription= Невозможно подключиться к хранилищу, NSLocalizedRecoverySuggestion= Вы все равно хотите подключиться к серверу?, NSLocalizedFailureReason= Безопасное соединение не может быть установлено. Пожалуйста, проверьте настройки даты и времени., NSErrorFailingURLStringKey = https://myserver.com/app/manifest.plist, NSUnderlyingError = 0x14678880 "Сертификат для этого сервера недействителен. Возможно, вы подключаетесь к серверу, который притворяется" myserver.com ", что может привести к конфиденциальная информация в опасности. ", NSURLErrorFailingURLPeerTrustErrorKey =, NSErrorFailingURLKey = https://myserver.com/app/manifest.plist}

В этой ошибке даже предлагалось проверить настройки даты. По какой-то причине дата была 1 января 1970 года. Установка правильной даты решила проблему.

После прочтения этого поста у меня все еще была проблема с загрузкой приложения. Проблема была из-за самозаверяющего сертификата SSL.

Я нашел решение этой проблемы. Вам необходимо загрузить файл сертификата с расширением ".crt" в Интернете и ввести его адрес в своем мобильном сафари. Система спросит вас о добавлении вашего сертификата в список доверенных сертификатов. После этой операции вы сможете установить свое специальное приложение.

Apter попытался изменить itms-services://?action=download-manifest&url=http://.... в itms-services://?action=download-manifest&url=https://...., Это также не может работать. Предупреждение cannot connect to my domain, Я обнаружил, что также необходимо обновить веб-страницу тоже.

Проблема не в том, что основным URL-адресом является HTTPS, а в некотором HTML-коде в ссылке на странице. Вам понадобятся ваши разработчики для обновления веб-страницы. Я также заметил, что в вашем промежуточном домене нет действующего SSL-сертификата, поэтому вам нужно его установить или использовать Dropbox, и эта ссылка может быть полезной для вас.

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