post Image
【Swift】特定のアプリがインストールされているかどうかで処理を分ける 2017完全版 – URL SchemesとLSApplicationQueriesSchemes –

やりたいことって大体以下3つですよね

【1】xxxアプリがインストールされているか知りたい

【2】(インストールされてなかったら)AppStoreのxxxアプリの詳細画面を出したい

【3】(インストールされてたら)xxxアプリを起動したい

1つ1つの単品記事はよく見かけるのですが
あっちゃこっちゃ調べて結構めんどかったのと
LSApplicationQueriesSchemesのトラップにやっぱり引っかかったので
全人類代表して長尾が1記事にまとめます。

【1】 xxxアプリがインストールされているか知りたい = canOpenURL

ソースコードにはこう書きます。

UIApplication.shared.canOpenURL(URL(string: "xxxアプリに設定してあるスキーム://")!)

つまり

if UIApplication.shared.canOpenURL(URL(string: "xxxアプリに設定してあるスキーム://")!) {
    // xxxアプリがインストールされている
} else {
    // xxxアプリがインストールされていない
}

です。

しかし
(iOS9以降は)ソースコード書いただけでは動かない
のです。
info.plistLSApplicationQueriesSchemes
xxxアプリスキームを書いてあげる必要があります。

① info.plistのLSApplicationQueriesSchemesにxxxアプリのスキームを記述する方法

1、info.plistInformation Property Listの横のをクリック(+が見えなかったりしますがマウスを乗せると見えます)
5.png

2、をクリックするとこんな感じで選べみたいになりますが無視してLSApplicationQueriesSchemesという文字をコピって
7.png

3、貼りつけます
8.png

4、・貼りつけたLSApplicationQueriesSchemesTypeArrayにする(❶)
  ・(写真では白い三角で大変見づらいですが)出てきた▶︎をクリックする(❷)
  ・(▶︎をクリックしても何も起こらないが)LSApplicationQueriesSchemesの右のをクリックする(❸)
9.png

5、item 0というのが登場するのでValuexxxアプリのスキームを書く
  (写真はxxxアプリがTwitterの場合の例です)
10.png

以上の
UIApplication.shared.canOpenURL(URL(string: "xxxアプリに設定してあるスキーム://")!)
のソースコードの記述と
info.plistのLSApplicationQueriesSchemesにxxxアプリのスキームを記述
があれば
xxxアプリがインストールされているかを知ることができます。

スキームって?

アプリを特定するための自由に決められる文字列(名前)のことです。

xxxアプリTwitterとかLINEとかFacebookみたいに
他人が作ったアプリの場合は
スキームを知るにはxxxアプリを作った人に聞くしかないですが
有名なアプリであれば我々のアプリのスキームはこれですと大体公開されてます。
せっかくなのでよく使うスキームを書いておきます。

Twitter
twitter

LINE
line

Facebook
fb (特定のページを開きたいなどは別のスキームが必要みたいです)

Instagram
instagram

けっこう、まんまですね。

逆にxxxアプリが自作アプリの場合
あらかじめxxxアプリにスキームを設定しておく必要があるので
xxxアプリにスキームを設定する方法も書いておきます。

② xxxアプリにスキームを設定する方法

1、プロジェクトが選択されている状態で、ピンクの丸がついてるinfoタブをクリックすると
  下の方にURLTypesというのがあるのでをクリックします。
1.png

2、をクリックするとこんなんが出てきます。
2.png

3、Identifierのとこには$(PRODUCT_BUNDLE_IDENTIFIER)というものを$マークごと入れます。
  URL Schemesのとこに、自分で決めた文字列を入れます。
  (世に出てる他のアプリと被らないような文字列にします。xxxとかだと被りそうなのでダメです。)
3.png

4、ちゃんと設定できたかどうかはinfo.plistに入っているかを見れば確認できます。
4.png

TwitterとかLINEのアプリには
ここにtwitterとかlineとかの文字列が設定されてるワケです。

【2】 AppStoreのxxxアプリの詳細画面を出したい = openURL

ソースコードは

guard let url = URL( string: "itms-apps://itunes.apple.com/app/id{AppleID}" ) else { return }
UIApplication.shared.openURL( url )

AppleIDっていうのは

iTunesConnectのココに書いてあるヤツのことで
11.png

AppStoreでアプリを表示した時のURLのidxxxxxxxxxの数字の部分と同じヤツです
12.png

実際IDを入れて書くとこんな感じです↓

guard let url = URL( string: "itms-apps://itunes.apple.com/app/id1065859705" ) else { return }
UIApplication.shared.openURL( url )

【3】 xxxアプリを起動したい = openURL

【2】と同じことです。
起動したいアプリによってURLとかスキームを変えるだけです。

xxxというスキームの自作アプリなどをシンプルに起動したい場合

guard let twitterUrl = URL(string: "xxx://") else { return }
UIApplication.shared.openURL(twitterUrl)

Twitterアプリだったらこうなりますね↓

guard let twitterUrl = URL(string: "twitter://") else { return }
UIApplication.shared.openURL(twitterUrl)

おまけで、Twitterの特定のユーザのプロフィールを起動したい場合はこうです↓

guard let twitterUrl = URL(string: "twitter://user?id=371600086") else { return }
UIApplication.shared.openURL(twitterUrl)

LSApplicationQueriesSchemesの記述が必要なのは【1】だけ

【2】【3】のopenURLやりたいだけの時はLSApplicationQueriesSchemesの記述は必要ないです

LSApplicationQueriesSchemesの記述なしでopenURLは動きます。
アプリ起動するんだから、絶対必要そうな感じしますよね?
いらないんだって。これが一番ややこしかった。

【1】【2】【3】など、やってみたけどできなかった方

コメントくれたらお返ししますのでお気軽にどうぞ!


『 Swift 』Article List
Category List

Eye Catch Image
Read More

Androidに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

AWSに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Bitcoinに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

CentOSに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

dockerに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

GitHubに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Goに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Javaに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

JavaScriptに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Laravelに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Pythonに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Rubyに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Scalaに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Swiftに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Unityに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Vue.jsに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Wordpressに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

機械学習に関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。