Я хочу иметь возможность открывать ссылки Safari в моем приложении. Для этого я создал расширение Action. Я попробовал несколько вариантов следующего кода для тестирования, но ни один из них не открыл мое основное приложение:
Первая попытка:
func openContainerApp() {
var responder: UIResponder? = self as UIResponder
let selector = #selector(openURL(_:))
while responder != nil {
if responder!.responds(to: selector) && responder != self {
responder!.perform(selector, with: URL(string: "awesome://item?id=20036169")!)
}
responder = responder?.next
}
self.extensionContext!.completeRequest(returningItems: [], completionHandler: nil)
}
Вторая попытка:
func redirectToHostApp() {
let url = URL(string: "awesome://item?id=20036169")
let selectorOpenURL = sel_registerName("openURL:")
let context = NSExtensionContext()
context.open(url! as URL, completionHandler: nil)
var responder = self as UIResponder?
while (responder != nil){
if responder?.responds(to: selectorOpenURL) == true{
responder?.perform(selectorOpenURL, with: url)
}
responder = responder!.next
}
}
Я добавил «потрясающую» схему URL в моём основном приложении. Я также возвращаю "true" для всех возможных методов делегата openURL в моем делегате приложения:
func application(_ application: UIApplication, open url: URL, sourceApplication: String?, annotation: Any) -> Bool {
return true
}
func application(_ application: UIApplication, handleOpen url: URL) -> Bool {
return true
}
func application(_ app: UIApplication, open url: URL, options: [UIApplication.OpenURLOptionsKey : Any] = [:]) -> Bool {
return true
}
Я установил NSExtensionActivationSupportsWebURLWithMaxCount
в своем расширении действия на 1.
Несмотря на все это, мое основное приложение не открывается. Нажатие на расширение действия в Safari ничего не делает.
Я пробовал эти решения, но ни одно из них не работает:
https://stackoverflow.com/a/28037297/1634905
https://forums.developer.apple.com/thread/65621
Может кто-нибудь помочь?