forus TECH

IT系技術メモ&本まとめ、ライフハック etc

【iOS】AppExtensionからURLスキームでアプリを起動する_iOS8.3

f:id:yusukekuni:20150501143811p:plain

iOS8以降で追加可能となったカスタムキーボードのようなAppExtensionから他アプリ(本体アプリ等)を起動する際のポイント。

iOS8.2までは以下の方法で可能だった。
(ボタンタップ時にアプリを起動する例)

-(IBAction)toApp:(id)sender{
    UIWebView *webView = UIWebView.new;
    [self addSubview:webView];
    [webView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"com.sample.yourapp://"]]];
}

iOS8.3からは上記ではアプリが起動されないため以下のように変更する。

-(IBAction)toApp:(id)sender{
    UIResponder* responder = self;
    while ((responder = [responder nextResponder]) != nil) {
        NSLog(@"responder = %@", responder);
        if ([responder respondsToSelector:@selector(openURL:)] == YES) {
            [responder performSelector:@selector(openURL:) withObject:[NSURL URLWithString:@"com.sample.yourapp://"]];
        }
    }
}

この方法であれば8.2以前でも起動することができるので場合分けは不要。