背景

需要在点击Extension的时候跳转到主App,数据传递这块暂时不考虑,只考虑如果拉起主App

说到底我们还是需要使用UIApplicationopenUappstoreRL:方法来打开主App,但是这个API限制在Extenapplesion中使用

iOS 从Extension跳转到App

解决

Exteappearnsion是否需要界面

我最开始做的是Acappreciatetion Eappearancextension,创建它的时候有两种类型,有界面、无界面两种。到底选哪种创建呢?还需要进一步分析。

iOS 从Extension跳转到App

那么我们的思路就只有一个,就是用Runtimeapprove调用openURL:

那首先就需要找到UIApplication对象,同样的在Extension里面同样被禁止直接使用。

iOS 从Extension跳转到App

既然不能直接使用,那我们就通过响应者链条找到UIApplication对象,拿到对象peappetiterform openURapproachL就可以了。那为了能在响应者链条中找到UIApplication对象,肯定需要选择有界面的类型创建了。

如何找到UIApplication

func openApp(url: URL) {
    var responder = self as UIResponder?
    while (responder != nil && !(responder is UIApplication)) {
        responder = responder?.next
    }
    if responder != nil {
        let selectorOpenURL = sel_registerName("openURL:")
        if responder!.responds(to: selectorOpenURL) {
            responder?.perform(selectorOpenURL, with: url)
        }
    }
}

到这里其实已经解决了打开App的问题了,传递数据只需要用App Group就可以了。