共享扩展和操作扩展并非旨在充当应用程序启动器。
应用程序扩展编程指南 https://developer.apple.com/library/ios/documentation/General/Conceptual/ExtensibilityPG/ExtensionOverview.html#//apple_ref/doc/uid/TP40014214-CH2-SW2
应用程序扩展与其包含的应用程序之间没有直接通信;通常,当包含的扩展正在运行时,包含的应用程序甚至没有运行。应用扩展的包含应用程序和主机应用程序根本不进行通信。
扩展程序显示用户界面,执行一些工作,并且如果适合扩展程序的目的,则将数据返回到主机。
应用程序扩展与其包含的应用程序之间可用的交互有限。今日小部件(没有其他应用程序扩展类型)可以通过调用来要求系统打开其包含的应用程序openURL:completionHandler:
的方法NSExtensionContext
班级。 ”
源自于此的解决方法那么问题 https://stackoverflow.com/questions/24297273/openurl-not-work-in-action-extension.
工作溶液(在 iOS 9.2 上测试) 用于键盘扩展。
该类别添加了特殊的访问方法hidden sharedApplication
对象然后调用openURL:
在上面。 (当然,那么你必须使用openURL:
方法与您的应用程序方案。)
// Valentin Shergin
extension UIInputViewController {
func openURL(url: NSURL) -> Bool {
do {
let application = try self.sharedApplication()
return application.performSelector("openURL:", withObject: url) != nil
}
catch {
return false
}
}
func sharedApplication() throws -> UIApplication {
var responder: UIResponder? = self
while responder != nil {
if let application = responder as? UIApplication {
return application
}
responder = responder?.nextResponder()
}
throw NSError(domain: "UIInputViewController+sharedApplication.swift", code: 1, userInfo: nil)
}
}