IOS 9 LaunchServices: ОШИБКА: Нет зарегистрированного обработчика для схемы URL itms-services

У нас есть некоторые собственные приложения, а до iOS 9 приложения будут открывать ссылку, подобную "itms-services://" после сравнения версий, приложения для новой версии будут загружены и установлены.

Но после тестирования на iOS 9 мы обнаружили, что приложения не могут открыть ссылку "itms-services://" , получили ошибку типа "LaunchServices: ERROR: нет зарегистрированного обработчика для схемы URL itms-services"

Код, который мы использовали для обновления приложения:

let downloadUrl = NSURL(string: url)
UIApplication.sharedApplication().openURL(downloadUrl!)

Мы протестировали "itms-services", "itms-services://" и полный URL-адрес в "LSApplicationQueriesSchemes" в файле plist. Но все равно не работает.

Ответ 1

Я пришел к той же проблеме с тобой. И я решаю эту проблему с помощью метода, который приложение сначала открывает html-url с сафари,

[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"http:// xx.xx.xx.xx/xx.html"]];

html url перенаправляет URL-адрес --- itms-services://? action = download-manifest & url = https://xx.xx.xx.xx/xx/xx.plist адрес. Хотя этот метод может обновить мое приложение, но для процесса обновления сначала необходимо открыть Safari, а затем предупредить о открытии App Store, если вы выберете открытую кнопку, тогда он будет предупреждать, устанавливаете ли это приложение, наконец, вы подтверждаете установку установки. приложение будет установлено автоматически.

мой html-контент:

<html>
<head>
<metahttp-equiv="Content-Type" content="text/html;charset=utf-8" />
     <script type="text/javascript">
               function load()
               {
                        window.location ="itms-services://?action=download-manifest&url=https://xxx/xx/xx.plist";
               }
     </script>
</head>
<body onload = "load()">

Ответ 2

В iOS9 (в моем случае моя схема url: hash:)

Измените info.plist: добавить пользовательские схемы URL здесь

затем зарегистрируйте обработчик событий в appdelegate:

 func application(app: UIApplication, openURL url: NSURL, options: [String : AnyObject]) -> Bool {
    // do what you want to do
    print(url);

    // return true if url matches scheme
    return true;
}

Ответ 3

Не знаю, это ваше дело, но вам нужен https-url для загрузки приложений. У нас нет SSL на нашем веб-сайте, так что мы делаем загрузку .plist в Dropbox и используем общую ссылку в ссылке itms-services..plist перенаправляет на ваш сервер, и у нас нет проблем.

Ответ 4

В iOS 9 вы должны использовать белый список любых схем URL, которые ваше приложение хочет запросить в Info.plist под ключом LSApplicationQueriesSchemes (массив строк):

введите описание изображения здесь

Со схемами, включенными в Info.plist, все работает по-прежнему. Когда вы связываетесь с iOS 9, вы не ограничены 50 различными схемами, вам просто нужно объявить, что вам нужно в Info.plist. Кажется, что нет ограничений на количество схем, которые вы можете включить, но я бы ожидал вопросов от группы обзора App Store, если они думают, что вы злоупотребляете механизмом.

Обратите внимание, что этот механизм применим только к canOpenURL, а не к openURL. Вам не нужно иметь схему, указанную в Info.plist, чтобы иметь возможность откройте его с помощью openURL.

Дополнительная информация: http://useyourloaf.com/blog/querying-url-schemes-with-canopenurl.html