21537


Share Extensionからコンテナアプリを呼び出すためにShare
Extensionから下記コードを実行していますがiOS9ではコンテナアプリが呼び出されません。  
iOS8では問題なく呼び出すことができています。

[code]

    UIWebView *webViwe = UIWebView.new;
    [self.view addSubview:webViwe];
    NSURL *url = [NSURL URLWithString:@"My URL Scheme"];
    [webViwe loadRequest:[NSURLRequest requestWithURL:url]];
    
[/code]

ここを参考に <http://qiita.com/Night___/items/60355d21951cffbef51b>  
Share
Extensionのinfo.plistの`LSApplicationQueriesSchemes`のitemにはコンテナアプリで設定した`URL
Schemes`のitemと同じ文字列を指定していますがうまくいきません。

iOS9になりShare Extensionからの全てのSchemeの呼び出しが禁止されてしまったのでしょうか？  
また、足りない設定等ありましたらご指摘いただけると助かります。


CC BY-SA 3.0
2016-01-31T07:00:23.430
21529
2016-04-10T06:10:06.110
2016-01-31T07:30:06.897
10492
12232
question
ios ios-app-extension ios9
iOS9 Share ExtensionからOpen URLを実行する方法


_iOS8では問題なく呼び出すことができています。_  
iOS8では問題があったが、たまたま呼び出すことができてしまっていた、だけではないのでしょうか。

[App Extensions
プログラミングガイド](https://developer.apple.com/jp/documentation/General/Conceptual/ExtensibilityPG/index.html)  
アプリケーション拡張機能の動作を理解する>アプリケーション拡張機能との通信について  
_「Today」ウィジェットはNSExtensionContextクラスのopenURL:completionHandler:メソッドを呼び出して、システムに収容アプリケーションを開くように要求できます(他のタイプのアプリケーション拡張機能ではできません)。_

(Apple公式の日本語ドキュメントはどう読んでも訳がこなれているようには思えないので、できれば原文に当たられたほうが良いと思います。)  
[App Extension Programming
Guide](https://developer.apple.com/library/ios/documentation/General/Conceptual/ExtensibilityPG/index.html)  
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に機能追加の要望を出す](http://developer.apple.com/bug-
reporting/)べきではないかと思います。


CC BY-SA 3.0
2016-01-31T10:39:43.347
21537
2016-01-31T10:39:43.347
13972
21529
answer