背景
需要在点击Extension
的时候跳转到主App
,数据传递这块暂时不考虑,只考虑如果拉起主App
。
说到底我们还是需要使用UIApplication
的openUappstoreRL:
方法来打开主App
,但是这个API
限制在Extenapplesion
中使用
解决
Exteappearnsion是否需要界面
我最开始做的是Acappreciatetion Eappearancextension
,创建它的时候有两种类型,有界面、无界面两种。到底选哪种创建呢?还需要进一步分析。
那么我们的思路就只有一个,就是用Runtime
来approve调用openURL:
。
那首先就需要找到UIApplication
对象,同样的在Extension
里面同样被禁止直接使用。
既然不能直接使用,那我们就通过响应者链条找到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
就可以了。