この記事でのバージョン
iOS9.1
Xcode 7.1
はじめに
特定のアプリがインストールしているかを調べる時などに使うcanOpenURLですが、
iOS9から以下のようなエラーが出るようになりました。
-canOpenURL: failed for URL: "hoge://" - error: "This app is not allowed to query for scheme hoge"
これはATSの話と同様、仕様変更に原因があるようで、
ThirdPartyアプリがcanOpenURLを使用して、ユーザーがインストールしているアプリを調べることへの対策をしているようです。
との事らしいです。
canOpenURLの許可
残念ながら全てのcanOpenURLを許可する事は出来ないみたいです。
しかし、info.plistにLSApplicationQueriesSchemesを登録する事で、
特定のスキームだけを有効にする事は出来ます。
上記の画像のようにLSApplicationQueriesSchemesというkeyでArrayを作成し、
許可したいスキームをArrayの中に登録する事でそのスキームでcanOpenURLが出来るようになります。
XcodeProjectUpdater
Unityで開発したアプリの話になりますが、
以前作成した、Xcodeプロジェクトの自動設定を行うXcodeProjectUpdaterに
ApplicationQueriesSchemesの自動設定を追加しました。
おわりに
指定したスキームならcanOpenURLを有効に出来ますが、
大量にスキームがある場合はどうしようもありません。
既にインストールされている端末には広告を表示しない、みたいなやつはどうするんでしょうかね。