BLOGサブスレッドの日常

2016.05.13

iOS9にてcanOpenURLでカスタムURLスキームをチェックする

chao

はじめに

金曜担当のしみずです。どうぞよろしく。
iOS9から他のアプリを起動する際のカスタムURLスキームを使ってcanOpenURLするのに制限が入ったようです。
そのことを今日知ったという、なんとも遅いですが調べたので書いていきます。

カスタムURLスキームで遷移するコード

「custom_app」というスキームで遷移するアプリがインストールされていて、それを起動するには

Objective-C

NSString *url = [NSURL URLWithString:@"custom_app://hoge"];
if ([[UIApplication sharedApplication] canOpenURL:url]) {
    [UIApplication sharedApplication] openURL:url];
}

Swift

let *url = [NSURL URLWithString:@"custom_app://hoge"];
if UIApplication.sharedApplication().canOpenURL(url) {
    UIApplication.sharedApplication().openURL(url)
}

のようなコードになります。

iOS9 ではエラーになる

しかし、iOS9 ではこのコードを実行しても遷移が行われません。
canOpenURLでこんなエラーが出ます。

error: "This app is not allowed to query for scheme custom_app"

これはいけない。
canOpenURL の戻り値が false なのです。

Info.plist に設定が必要になった

iOS9からは、Info.plist に LSApplicationQueriesSchemes をArrayで作成して、そこに起動するスキーム部分を記載していく必要があるそうです。

これを入れればエラーは出ないし、canOpenURL の戻り値も正しい結果が得られるようになります。

ちなみに何故かはわかりませんが、openURL を直接した場合は Info.plist に追加しなくても正常に遷移されるようで
あくまで canOpenURL が対象みたいです。

おわりに

自宅作業なのでほとんど家にいて動かないのです。
そうすると、当然のように腹が出てきてしまうので最近は間食をしないように心がけております。
目標-7kg!

猫、不機嫌により本日の週間ウチのネコはお休みします。

この記事を書いた人

chao