iOS Action Extension не открывает мое основное приложение - PullRequest
0 голосов
/ 04 июня 2019

Я хочу иметь возможность открывать ссылки 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

Может кто-нибудь помочь?

1 Ответ

1 голос
/ 04 июня 2019

Я понял это сам и хотел поделиться этим на случай, если кто-то застрянет с тем же.

Моя проблема заключалась в том, что я вызывал функции openContainerApp или redirectToHostApp из viwDidLoad(), гдеUIResponder, очевидно, еще не готов.

Я переместил вызов функции в viewWillAppear(), и он сработал.

override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(animated)
        openContainerApp()
}
...