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

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

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

Ответ 1

Я нашел проблему, подключив 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 для данного домена. Мы уже это сделали, но я думаю, что у вас будут проблемы без него.

Ответ 2

ingconti прав.

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

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

Ответ 3

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

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

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

Ответ 4

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

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

Суть в этом:

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

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

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

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

Ответ 5

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

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

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


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

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

Наконец-то я нашел решение, создав Self Signed Root Certificate Authority и получив сертификат SSL нашего сервера, используя это.

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


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

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

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

enter image description here

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

enter image description here

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

enter image description here


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

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

  • Затем вам нужно будет создать свой запрос подписи сертификата (я использовал диспетчер сертификатов сервера OSX для этого бита

enter image description here

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

enter image description here

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

enter image description here


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

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

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

enter image description here

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

enter image description here

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

enter image description here

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

enter image description here

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

<Т411 >

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

enter image description here

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

enter image description here

  • Вы можете щелкнуть мышью по остальным параметрам.

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

enter image description here


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

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

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

enter image description here

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

enter image description here

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

enter image description here


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

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

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

enter image description here

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

enter image description here

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

enter image description here


Тест

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

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

Ответ 6

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

Я сделал:

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

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

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

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

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

Ответ 7

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

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

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

Ответ 8

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

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

Обе страницы успешно работали для установки приложения в iphones с помощью ios 7.1

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

Я создал новый вопрос: обновленное развертывание adhoc-приложений не работает на ios до 7.1

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

Ответ 9

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

Ответ 10

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

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

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

Ваша ссылка 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.

Ответ 11

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

https://www.testflightapp.com/

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

Ответ 12

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

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

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

  • доступ к вашему 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>

Ответ 13

Наша команда использует dropbox для ad-hoc-распространения, который использует https, но все же наше приложение не удалось установить. После многих проблем мы поняли, что поле title также требуется. Всякий раз, когда мы отправляли ссылку без этого поля, Safari игнорировала ссылку и не запрашивала установку пользователя. Иногда для быстрых тестов разработки мы пропускали заголовок node в xml и не заполняли его. В случае, если это полезно для тех, кто имеет эту проблему, убедитесь, что ваш .plist содержит следующие узлы:

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

Ответ 14

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

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

Ответ 15

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

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

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

Ответ 16

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, а здесь ссылка может быть полезной для вас