アプリの拡張機能 (例: カスタム キーボード) では、UIViewController.extensionContext
iOS 8.1.2 で処理されますが、フィールドはnil
次の Swift 呼び出しにあります。
self.extensionContext?.openURL(appURL, completionHandler: nil)
// Does nothing because extensionContext is nil (iOS 8.1)
実際には、 Apple のドキュメントApplication.sharedApplication.openURL(...)
に記載されているように、App Extension で使用することもできません。
したがって、8.1.2 の時点での回避策は、次のようにダムUIWebView
を使用して含まれているアプリにリダイレクトすることです。
let webView = UIWebView(frame: CGRectMake(0, 0, 0, 0));
let url = "MyKeyboard://";
let content = "<head><meta http-equiv='refresh' content='0; URL=\(url)'></head>";
webView.loadHTMLString(content, baseURL: nil);
self.view.addSubview(webView);
let delayInSeconds = 2.0
let startTime = dispatch_time(DISPATCH_TIME_NOW, Int64(delayInSeconds * Double(NSEC_PER_SEC)))
dispatch_after(startTime, dispatch_get_main_queue()) { () -> Void in
webView.removeFromSuperview()
}
含まれているアプリの URL スキームとして、 WhereMyKeyboard://
を適切に定義する必要があります。
これが Apple によって承認されているかどうかはまだわからないことに注意してください。カスタム キーボードからのアプリへの転送は、ユーザー エクスペリエンスにとって十分に悪い場合があります。