酢ろぐ!

カレーが嫌いなスマートフォンアプリプログラマのブログ。

Xcode 4でコマンドライン オプションを設定/取得する

MacOS向けにコマンドラインアプリの開発をしています。コマンドオプションを受け取る形のアプリなのですが、そもそもmain関数で受け取るオプションをどう設定して良いのか判らずデバッグの進みが悪かったです。

調べてもXcode 3.x向けの記事だったりで困ってしまいました。適当に弄ってたらコマンドオプションの設定の変え方が判ったので、ブログに残しておきます。

コマンドライン オプションを設定する

Xcodeのターゲットを変えるボタンをクリックします。

「Manage Schemes...」の項目を選択します。

Schemeの一覧が出てくるので左側の「Edit...」をクリックします。

デバッグモードの時だけオプションを設定したいので、「Run {プロジェクト名} / Debug」を選択して、右側の「Arguments Passed On Launch」欄で+ボタンをクリックします。

引数項目が追加されるので引数を入力します。

ここでは、以下のようにディレクトリのパスを入力することとします。

-i /Users/ch3cooh/piyo

コマンドライン オプションを取得する

対して設定したコマンドライン オプションを受け取る方法ですが、下記の通りNSUserDefaultsクラスを使用すれば取得できるようです。

http://www.cocoabuilder.com/archive/cocoa/179905-most-elegant-way-to-process-command-line-arguments-in-cocoa.html

下記の通り、[ [NSUserDefaults standardUserDefaults] stringForKey:@"{コマンドオプション}"]でオプションの値を取得することができます。getoptを使用するよりずっと簡単で安全です。

int main (int argc, const char * argv[]) {
    @autoreleasepool {

        NSUserDefaults *args = [NSUserDefaults standardUserDefaults];
        NSLog(@"input = %@", [args stringForKey:@"i"]);

    }
    return 0;
}

出力結果をみてみると、以下のような出力を得られ、問題なくコマンドライン引数が取得出来ていることが判ります。

input = /Users/ch3cooh/piyo