scheme でアプリケーションを起動して引数を受け取る(iOS編)

前にプロジェクトの設定方法を書いたな〜と思って探したら、アプリケーションから写真を指定して拙作「写真印刷」を起動する方法の説明だった…。

というわけで、Xcode 4.3.3でプロジェクトの設定は以下の通り。
1. プロジェクトの「TARGETS」の「Info」タブを表示、右下の「Add」ボタンをクリック
 


2. 表示されるメニューで「URL Types」を選択
 


3. 「Untitled」の URL Typeが加わるので、開いて各種情報を入力
 

  • URL Schemes : 起動する為の scheme。今回の例では paraches。


今回はこれだけ設定してあれば OK。
リンクをクリックするとアプリケーションが起動する。


で、アプリが起動すると - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions が呼ばれるので、その中で UIApplicationLaunchOptionsURLKey を使ってブラウザでクリックした URL を受け取れる。
具体的にはこんな感じ。

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    NSURL *clickedURL = (NSURL *)[launchOptions valueForKey:UIApplicationLaunchOptionsURLKey];
    ...
}

でも、これだと先の URL そのままで nameや urlの値を取り出すのが面倒…。


そこで見つけたのがこのページ。

あ〜こりゃ楽チン!
カテゴリで NSURL に queryAsDictionaryってメソッド加えてこれ一発で引数が貰える。


こんな感じ。

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    NSURL *clickedURL = (NSURL *)[launchOptions valueForKey:UIApplicationLaunchOptionsURLKey];
    NSDictionary *query = [clickedURL queryAsDictionary];
    NSString *nameString = [query objectForKey:@"name"];
    NSString *urlString = [query objectForKey:@"url"];
    ...
}

これで、渡されたデータを使ってアプリ側であれこれすれば OK!


先のリンクをクリックして nameと urlを表示するサンプルも作ってみた。