31483
Swiftを使ってiOSアプリを作成しています。  
自分のアプリにボタンを作り、そこから別のアプリを起動させたいと考えているのですが、やり方がわかりません。（URLスキームというワードがちらほら）  
ちなみに、ボタンをタップした時に起動させる別のアプリは、AppStoreでインストールできる画像をコラージュできるようなアプリを指定する予定です。

（補足）  
回答者さまのヒントを元に、以下のサイトを試しているのですがうまく実行できません。  
ただコードを真似るだけだと  
「Use of undeclared type 'NSWorkspace'」というエラーが出ます。  
どこかでNSWorkspaceを宣言しないといけないのだと思うのですが、具体的にどこに宣言したらいいのか、コード以外でも設定すべきことはあるのかわかる方がいれば教えていただきたいです。

<http://cocoaapi.hatenablog.com/entry/00000111/recID34975>
CC BY-SA 3.0
2016-12-27T11:29:54.817
31472
2016-12-28T02:20:02.920
2016-12-28T00:14:55.037
19435
19435
question
swift ios
プログラムから別のアプリを起動する
アプリケーション名が既知で固定であれば、

```

    NSWorkspace.shared().launchApplication("アプリケーション名")
    
```

ではいかがでしょうか？
CC BY-SA 3.0
2016-12-27T11:36:14.580
31473
2016-12-27T12:12:18.770
2016-12-27T12:12:18.770
14745
14745
31472
answer
URLスキームというのはCustomURLSchemeのことかとおもわれます。  
Androidなどではディープリンクとも言ったりします。

例えば次のリンクをiOSのSafariにてURL欄に打ち込むと写真アプリが起動します。  
`photos-redirect://`

これは写真アプリのSchemeに"photos-redirect"という名称でスキーム(Scheme)が登録されているからです。  
これらはアプリごとにスキームが設定されています。  
設定の初期値は"Bundle ID"(jp.com.xxxxxxx)になりますが、  
独自に名称を設定すると`appname://`のような名称をSchemeに設定できます。

話を戻しますと、URLSchemeで起動を行おうと思った場合、  
対象のアプリで設定されているSchemeを知らなくてはいけません。  
ですので、自作アプリか、他の別の方のアプリかで話が変わってきます。  
Schemeの調査の説明になると長くなるので自作アプリであることを前提でお話します。

* * *

  1. CustomURLSchemeの設定

アプリのplistファイルにてURLSchemeの設定を行うことが出来ます。  
plistファイル内を"Schemes"で検索すると下記のような項目があるので2箇所確認して修正しましょう。  
下記を設定すると`スキーム名://`で開くことが出来るようになります。

```

    <array>
        <dict>
            <key>CFBundleTypeRole</key>
            <string>Editor</string>
            <key>CFBundleURLName</key>
            <string>【アプリBundleID】</string>
            <key>CFBundleURLSchemes</key>
            <array>
                <string>【スキーム名】</string>
            </array>
        </dict>
    </array>
    
```

* * *

  2. CustomURLSchemeを開く

普通のURLと同じように扱います。  
下記でCustomURLSchemeを開くことが出来る……のですが、  
もう1つ設定が必要で後述します。

```

    let url = NSURL(string: "スキーム名://")!
    if (UIApplication.sharedApplication().canOpenURL(url)) {
        UIApplication.sharedApplication().openURL(url)
    }
    
```

* * *

  3. plistファイルで連携するアプリのCustomURLSchemeを登録する

最近のアップデートだったと思うのですが、  
連携するアプリのSchemeを設定しないと外部アプリへ遷移することが出来ません。  
ですので、開く前に下記の設定をplistファイルで行いましょう。

```

    <key>LSApplicationQueriesSchemes</key>
    <array>
      <string>スキーム名</string>
    </array>
    
```
CC BY-SA 3.0
2016-12-28T01:49:09.947
31483
2016-12-28T02:20:02.920
2016-12-28T02:20:02.920
31472
answer