36729
iOSのSwiftでのURL Schemeについて質問です。  
自作のアプリでボタンを作り他のアプリに飛ぶようにしたいのですが、遷移先のプロジェクトURL
Schemesを設定したのち、自作の方のプロジェクトのInfo.plist内にLSApplicationQueriesSchemesのkeyを設定しようとしているのですが、以下のように候補に出てこないのですが、どうすれば良いですか？

[![画像の説明をここに入力](https://i.stack.imgur.com/j6s8U.png)](https://i.stack.imgur.com/j6s8U.png)
CC BY-SA 3.0
2017-07-27T09:56:05.417
36722
2017-07-27T13:55:40.060
2017-07-27T13:34:37.523
13972
24254
question
ios
Info.plist内にLSApplicationQueriesSchemesが見つからない。
Info.plistのキー設定値として正しいかどうか不明なものが出てきたら、以下のような事柄を試して(確認して)みてください。

  1. 公式リファレンスを参照する

[Information Property List Key
Reference](https://developer.apple.com/library/content/documentation/General/Reference/InfoPlistKeyReference/Introduction/Introduction.html)

上記を参照すると、[Launch Services
Keys](https://developer.apple.com/library/content/documentation/General/Reference/InfoPlistKeyReference/Articles/LaunchServicesKeys.html)の中に大文字小文字を含めて間違いなくぴったりの`LSApplicationQueriesSchemes`と言うキーは存在します。

と言うわけで、このキーが正しいものであることは間違いないようです。

(Appleのドキュメントは、この手の情報更新が極端に遅い場合があります。公式ドキュメント載っていないからと言って直ちに誤りとは言えないので、ご注意を。)

  2. Info.plistエディターの標準モードと生(Raw)モードを切り替えてみる

`LSApplicationQueriesSchemes`のようなキー名はある程度可読性を考えて付けられていますが、それでもキー名の中には人間に十分わかりやすい名前とは言えないものも多いので、XcodeのInfo.plistエディターでは、標準モードでは可読性の高い人間向けの名称を
**Key** の部分に表示します。あなたの画面キャプチャーでは **Bundle version**
と表示されているKeyの実際のキー名は`CFBundleVersion`です。

`LSApplicationQueriesSchemes`と言うのは生のキー文字列ですので、そのせいで候補に挙がっていないだけかもしれません。あなたの画面キャプチャーは、標準モードのままですので、右クリックメニューで
**Show Raw Keys/Values** を選び、そこにチェックが入った生モード状態にしてみてください。

ただし、こちらで試したところ、まだ`LSApplicationQueriesSchemes`には人間向けの名称は登録されていないようでしたので、これは関係ないようです。

  3. 新しいキー名の中にはまだ候補として登録されていないものがある

見出しの通りです。1.に書いたようなドキュメントは言うに及ばず、最近導入された事柄の中には、Xcodeの補助機能にはまだ反映されていないものがあります。この場合、「候補に現れない」と言うだけで、使っちゃいけないと言うわけではありません。

(iOS9で導入された、と言うのは「最近」のうちです。ただし、2〜3年も開発ツールに反映されないと言うのは、本来はあるべきではないので、Appleに[バグ報告(機能追加要望)](http://developer.apple.com/bug-
reporting/)を出した方が良いのかもしれません。)

* * *

## 【結論】1.〜3.を確かめて上記のような状態だったらどうするのか?

**Key**
の入力欄はプルダウンリストでの選択の他に、直接のキー入力もテキストのコピペもできるようになっています。(いわゆるコンボボックスというやつですね。)`LSApplicationQueriesSchemes`と言う文字列を直接コピペ等で入力してください。

* * *

ちなみに`LSApplicationQueriesSchemes`と言う項目は、「`canOpenURL(_:)`が正しく動作するかどうか」を制御するための情報ですので、`LSApplicationQueriesSchemes`を指定しなくても、開くことのできるURLを`openURL(_:)`に渡すと普通に開くことができます。

(ご存知だったかもしれませんが、質問文からは読み取れなかったので念のため。)
CC BY-SA 3.0
2017-07-27T13:31:41.593
36729
2017-07-27T13:55:40.060
2017-07-27T13:55:40.060
13972
13972
36722
answer