Я сделал очень простое приложение, чтобы открыть mobilephone
URL («Тестер»):
let url = URL(string: "mobilephone:Test?index=1")
UIApplication.shared.open(url!) { (result) in
if result {
print("success!")
}
else {
print(result)
}
}
Затем я добавил другое приложение («Обработчик») с обработчиком для этого URL (это AppDelegate
):
func application(_ application: UIApplication,
open url: URL,
options: [UIApplication.OpenURLOptionsKey : Any] = [:] ) -> Bool {
// Determine who sent the URL.
let sendingAppID = options[.sourceApplication]
let source = "\(sendingAppID ?? "Unknown")"
let alert = UIAlertController(title: source, message: url.absoluteString, preferredStyle: .alert)
alert.addAction(UIAlertAction(title: "OK", style: UIAlertAction.Style.default, handler: nil))
self.window?.rootViewController?.present(alert, animated: true, completion: nil)
return true
}
И, конечно, я зарегистрировал эту схему в Project → Info → URL Types с mobilephone
в качестве схемы и идентификатором моего приложения в качестве идентификатора.
Это прекрасно работает на симуляторе. Когда я запускаю оба приложения на симуляторе iPhone 8, я могу открыть тестер, попробовать открыть URL-адрес, и он переключается на приложение-обработчик и показывает окно сообщения. Пока все хорошо.
Но затем я развернул оба приложения на реальном телефоне iPhone 8 под управлением iOS 12.3.1, и URL не обрабатывается. Приложение Tester сообщает false
из UIApplication.shared.open
, и приложение-обработчик не запускается. Я думаю, что пропускаю некоторую часть регистрации, но не могу понять это. Любая помощь, пожалуйста?
РЕДАКТИРОВАТЬ: кажется, что когда я меняю схему на какое-то случайное имя, она работает нормально ... Схема mobilephone
зарезервирована как-то? Я не видел его в списке зарезервированных схем.