// Function must be named exactly like this so a selector can be found by the compiler!
// Anyway - it's another selector in another instance that would be "performed" instead.
func openURL(_ url: URL) -> Bool {
var responder: UIResponder? = self
while responder != nil {
if let application = responder as? UIApplication {
return application.perform(#selector(openURL(_:)), with: url) != nil
}
responder = responder?.next
}
return false
}
9条答案
按热度按时间hmtdttj41#
在WWDC会话Creating Extensions for iOS and OS X, Part 1中,在22分钟左右标记使用来自UIViewController的extensionContext的
openURL:completionHandler:
方法打开自定义URL方案6rvt4ljy2#
Swift 3.1工作方案(iOS10测试):
openURL("myScheme://myIdentifier")
调用它ercv8c1e3#
它在我当前的工作应用程序中使用操作扩展
1-在父应用程序plist中添加自定义URL,如
2-在扩展视图控制器中添加这两个函数
3-在你的按钮动作中或者你想做的地方调用这个函数
这里homevc是视图控制器的类名,应该显示它
4-在你的应用委托中实现方法,如
我希望将工作正常,也可以共享扩展应用程序和父应用程序之间的数据
u2nhd7ah4#
我在这里问了一个类似的问题:Communicating with/opening Containing app from Share extension。基本上,你可以做几件事。
1.使用UIWebView的loadRequest webView加载包含应用的url的NSURL请求。比如说
1.使用UIDocumentInteractionController和自定义文件扩展名类型提供指向包含应用程序的链接(仅限于包含应用程序)
1.启动一个“假”NSURL会话以获得以下功能:在iOS中,如果您的扩展在后台任务完成时未运行,则系统会在后台启动包含应用程序的应用程序并调用应用程序:handleEventsForBackgroundURLSession:completionHandler:app委托方法。
第一个可能是你最好的选择。
hmmo2u0o5#
文档非常清楚地说明了您可以在Today扩展中使用extensionContext openURL。言外之意,openURL只能在Today异常中使用,我们的经验证明了这一点--我也不能让它在Share扩展中工作。
我很有兴趣看看这些变通方法是否被苹果的审查过程所接受。我很怀疑如果苹果想让它工作,他们很容易允许它。
Apple允许任何Today小部件使用openURL:completionHandler:方法打开小部件自己的包含应用程序。
如果您使用此方法从Today Widget中打开其他应用,则您的App Store提交可能需要进行额外审查,以确保符合Today Widget的意图。
我敢肯定这第二段是在Launcher被接受,拒绝,然后后来批准销售后添加的。
qxsslcnc6#
下面是另一种方法:
1.选择扩展目标并转到其
Build Settings
。将Require Only App-Extension Safe API
设置为NO
。1.使用
UIApplication.shared.openURL(URL(string:"openPdf://")!)
,就像你通常在扩展外打开url一样。请注意,您将收到 *'openURL'在iOS 10.0中已弃用警告 *。因此,这似乎不能保证它在未来的工作。
考虑使用本地通知来唤醒主机应用程序,而不是这样。
ds97pgxw7#
这里是
Valentin Shergin's
解决方案为ios 14和xcode 13gijlo24d8#
以下是**工作解决方案(在iOS 9.2上测试)**至少用于键盘扩展。此类别添加了访问隐藏
sharedApplication
对象的特殊方法,然后在其上调用openURL:
。(当然,你必须在你的应用程序方案中使用openURL:
方法。p5cysglq9#
我在我的扩展中使用以下代码来打开带有自定义方案URL的主应用程序:
请确保在调用此函数之前有足够的时间加载扩展。