web-dev-qa-db-ja.com

AppExtensionのopenURL

IOS 8ベータ2では、リリースノートに記載されているようにアプリ拡張機能からopenUrlを使用できるはずです。

enter image description here

ただし、このAPI(Xcode 6ベータ2)を使用しようとすると、次のエラーが発生します。

enter image description here

ベータ2は本当にこの問題を修正したかどうか?

16
Massimo Piazza

このコードを使用できます:

[self.extensionContext openURL:url completionHandler:^(BOOL success) {
        NSLog(@"fun=%s after completion. success=%d", __func__, success);
    }];

aPIドキュメント: openURL:completionHandler:

この質問を参照することもできます: openURLはAction Extensionでは機能しません

43
Laurence Fan

受け入れられたソリューションは_Today extensions_でのみ機能し、他の拡張タイプのSwift 3.1(iOS10でテスト済み)で機能するソリューション:

独自のURLスキームを作成してから、この関数をViewControllerに追加し、openURL("myScheme://myIdentifier")で呼び出す必要があります。

_//  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
}
_
1
coyer