質問: [NSURL URLWithString:@"My URL Scheme"]; [webViwe loadRequest:[NSURLRequest requestWithURL:url]]; ``` ここを参考に Share Extensionのinfo.plistの`LSApplicationQueriesSchemes`のitemにはコンテナアプリで設定した`URL Schemes`のitemと同じ文字列を指定していますがうまくいきません。 iOS9になりShare Extensionからの全てのSchemeの呼び出しが禁止されてしまったのでしょうか? また、足りない設定等ありましたらご指摘いただけると助かります。
回答: *iOS8では問題なく呼び出すことができています。* iOS8では問題があったが、たまたま呼び出すことができてしまっていた、だけではないのでしょうか。 App Extensions プログラミングガイド アプリケーション拡張機能の動作を理解する>アプリケーション拡張機能との通信について *「Today」ウィジェットはNSExtensionContextクラスのopenURL:completionHandler:メソッドを呼び出して、システムに収容アプリケーションを開くように要求できます(他のタイプのアプリケーション拡張機能ではできません)。* (Apple公式の日本語ドキュメントはどう読んでも訳がこなれているようには思えないので、できれば原文に当たられたほうが良いと思います。) App Extension Programming Guide Understand How an App Extension Works>How an App Extension Communicates *A Today widget (and no other app extension type) can ask the system to open its containing app by calling the openURL:completionHandler: method of the NSExtensionContext class.* この部分をどう読むのか、もしかしたら「意見が分かれる」(NSExtensionContextを使うのでなければopenURLを読んでも良いと解釈する)とおっしゃる方もおられるかもしれませんが、Appleとしては「Today」ウィジェット以外からopenURLでコンテナアプリにアクセスすることを(NSExtensionContextのメソッドを使うかどうかに限らず)禁止していると解するべきだと思います。(そうでないと、NSExtensionContextのopenURL:completionHandler:をわざわざToday以外では使えなくした意味がなくなってしまいます。) ちなみにこれはiOS8時代からの制限です。 Apple的にはopenURLメソッドの制限だけで事足りると思っていたら、裏技が見つかったのでその裏技も封じ込められるような修正を行ったのだと思われます。 ちなみに新機能の追加直後はレビュー体制も混乱していますので、そのようなアプリ(と機能拡張)がレビューを通過しているのかもしれませんが、一度レビューを通過したアプリのバージョンアップ時に、全く同じ動作をしているアプリがrejectされることはあります。 一部推定を含んでいますので、他に素晴らしい解決策を提示される方がおられるかもしれませんし、推定されるリスクを考慮に含めても別の回避策を探されるというのもありえる判断ではあるかと思いますが、私的にはすっぱりと「Share機能拡張からopenURLでコンテナアプリを開く」ことはあきらめて、適切なユースケースを添えてAppleに機能追加の要望を出すべきではないかと思います。