问题描述
我正在开发 iMessage 应用扩展程序,出于某些原因,我需要在此扩展程序中获取应用程序窗口。以前我是这样做的,如下所述:-
guard let currentwindow : UIWindow = UIApplication.shared.keyWindow else {return}
在 xcode 12 中它运行良好。另一方面,更新到 12.5.1 后,这开始给我相同的代码错误。 如下:-
其次,我无法调用 UIApplication.shared.canopenURL(settingsUrl)
解决方法
您可以执行以下操作来测试从您的扩展程序对 UIApplication.shared
的访问:
guard UIApplication.responds(to: NSSelectorFromString("sharedApplication")) else {
return
}
let shared = UIApplication.perform(NSSelectorFromString("sharedApplication"))?.takeUnretainedValue() as? UIApplication
通过使用 perform
,您可以忽略编译器并在运行时确定您的调用。
请注意,这可能不适用于您的扩展程序。 API 不允许您默认从扩展程序访问它是有原因的,即使它在普通应用中运行良好也是如此。
您拨打 UIApplication.shared.open
也是如此。
所以最后,您可能无法使用 UIApplication.shared
。主要区别在于扩展程序与应用程序。