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