Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
37
Help us understand the problem. What is going on with this article?
@nagaoyuriko

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

More than 3 years have passed since last update.

やりたいことって大体以下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】など、やってみたけどできなかった方

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

37
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
nagaoyuriko
Android, iOS, Firebase engineer 超初心者向けAndroid開発ライブコーディング番組はじめました https://www.youtube.com/watch?v=0iukQKGADx8&list=PLfrvxnJUaviWXfZiJ6kCCUOidM5omF-t5

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
37
Help us understand the problem. What is going on with this article?