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

мы распространяем приложения через корпоративную учетную запись, используя itms-services:// URL-адрес. Это всегда работало нормально, но после установки прошивки iOS 7.1 на 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 для рассматриваемого домена. Мы уже сделали, но я думаю, у вас будут проблемы без него.


ingconti прав.

  1. загрузить приложения.plist в dropbox.
  2. получить ссылку на приложение.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 " (согласно Carlos Aguirre Tradeco at развертывание корпоративного приложения не работает на 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. опять же, получите ссылку на скачивание.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 в вашем устройстве, вы можете установить приложение, как и раньше.

КАКОЙ ЗАМЕЧАТЕЛЬНЫЙ МИР!


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

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

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


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

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

суть этого такова:

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

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

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

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


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

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

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


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

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

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

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


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

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

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

enter image description here

  • заполните информацию Центра сертификации

enter image description here

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

enter image description here


генерация a Запрос Подписи Сертификата

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

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

enter image description here

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

enter image description here

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

enter image description here


создание удостоверение

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

  • вернитесь к Keychain Access и откройте "создать сертификат.. вариант " как показал

enter image description here

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

enter image description here

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

enter image description here

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

enter image description here

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

enter image description here

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

enter image description here

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

enter image description here

  • вы можно нажать кнопку Продолжить через остальные параметры.

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

enter image description here


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

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

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

enter image description here

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

enter image description here

  • обновить свой сервер, чтобы использовать этот новый сертификат. Если вы обнаружите, что новый сертификат не будет "прилипать" и продолжает возвращаться, вернуться к биту в ЖИРНЫЙ КУРСИВ CAPS

enter image description here


Настройки Устройства

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

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

enter image description here

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

enter image description here

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

enter image description here


тест

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

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

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

Я:

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

.. href="https://dl.dropboxusercontent.com/u/ / (Ваш идентификатор DB) / ipa.html " >MyApp

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

.. https://dl.dropboxusercontent.com/u/(Ваш идентификатор БД) / MyApp.файл plist"> Кран чтобы установить MyApp

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


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

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

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


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

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

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

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

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

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


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


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

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

затем создайте свое предприятие 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.


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

https://www.testflightapp.com/

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


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

  1. загрузите файл ipa на свой сервер в http (без изменений здесь)
  2. загрузить выделение ресурсов (.mobileprovision) файл на ваш сервер в http (без изменений здесь)
  3. загрузите файл plist в свой в Dropbox (никаких изменений внутри файла plist, поскольку URL-адреса находятся в absolute)
  4. использовать опцию "Поделиться ссылкой с Dropbox", которая копирует ссылку в буфер обмена. Эта ссылка должна быть скопирована в ваш html-файл в запрос URL-адреса itms-servivces после изменения части www.dropbox.com by dl.dropboxusercontent.com. Примечание. Я URL закодировал ссылку, как предложил @Mike, но я не тестирую без этого. Теперь запрос URL itms-services должен выглядеть следующим образом: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 для ad-hoc дистрибутива, который использует https, но все же наше приложение не удалось установить. После долгих хлопот мы поняли, что заголовок поле тоже требуется. Всякий раз, когда мы отправляли ссылку без этого поля, safari игнорировала ссылку и не предлагала пользователю установить. Иногда для тестов быстрой разработки мы пропускали узел заголовка в xml и не заполняли его. В случае, если это полезно для тех, кто имеет эту проблему, убедитесь, что ваш .plist содержит следующие заполненные узлы:

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

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

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


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

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

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


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