可以imessage扩展打开主机应用程序吗?

Mai*_*ize 3 objective-c imessage swift ios-extensions ios10

我试过了[self.extensionContext openURL:completion],但我的应用程序崩溃了.我听说有些扩展无法使用此方法,可以使用iMessage扩展吗?

顺便说一句,主持应用程序可以激活其iMessage扩展吗?

tym*_*mac 5

共享扩展和动作扩展不适用于应用程序启动器.

App扩展编程指南

应用扩展程序与其包含应用程序之间没有直接通信; 通常,包含的应用程序在运行包含的扩展时甚至不运行.包含应用和主机应用的应用扩展程序根本不进行通信.

扩展程序显示用户界面,执行一些工作,并且,如果适合扩展程序的目的,则将数据返回给主机.

应用扩展程序与其包含的应用程序之间的可用交互有限."今日"窗口小部件(并且没有其他应用程序扩展类型)可以通过调用类的openURL:completionHandler:方法来要求系统打开其包含的应用程序NSExtensionContext."

在此输入图像描述

从这个SO问题得出的解决方法.

键盘扩展的工作解决方案(在iOS 9.2上测试).

此类别添加了访问隐藏 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)
}

}
Run Code Online (Sandbox Code Playgroud)