Xcode 4.6 では、「コマンド ライン ツール」プロジェクト テンプレートに基づいて新しいアプリケーションを作成しました。
その「コマンド ライン ツール」アプリから別のアプリケーション (.app アプリケーション バンドル) をプログラムで起動するにはどうすればよいですか?
Xcode 4.6 では、「コマンド ライン ツール」プロジェクト テンプレートに基づいて新しいアプリケーションを作成しました。
その「コマンド ライン ツール」アプリから別のアプリケーション (.app アプリケーション バンドル) をプログラムで起動するにはどうすればよいですか?
これを実現するには、Launch Services や を使用する方法が多数ありますNSWorkspace
。
バンドルされたアプリケーションを識別するより柔軟な方法の 1 つは、バンドル識別子 ( CFBundleIdentifier
) を使用することです。これは、 のような文字列ですcom.apple.TextEdit
。これにより、アプリケーションが見つかると想定されるパスをハードコーディングしたり、アプリケーション バンドルの名前をハードコーディングしたりすることなく、アプリケーションを識別することができます。どちらもユーザーが簡単に変更できます。を使用してアプリを起動できNSWorkspace
ます。launchAppWithBundleIdentifier:options:additionalEventParamDescriptor:launchIdentifier:
アプリケーション バンドルのバンドル識別子がわからない場合は、そのAppName.app/Contents/Info.plist
ファイルを確認することで取得できます。次に、次のコードを使用します。
if (![[NSWorkspace sharedWorkspace]
launchAppWithBundleIdentifier:@"com.apple.TextEdit"
options:NSWorkspaceLaunchDefault
additionalEventParamDescriptor:NULL
launchIdentifier:NULL]) {
NSLog(@"launching app failed!);
}
重要:フレームワークNSWorkspace
の一部であり、AppKit.framework
最初は「コマンド ライン ツール」プロジェクト テンプレートに含まれていません。プロジェクトに追加するには、下の画像に示すように、ターゲットのリストでターゲットを選択し、[+] ボタンをクリックしてフレームワークを追加します。
AppKit.framework
と の両方を追加しCocoa.framework
ます。
これにより、3 つすべてが [バイナリとライブラリのリンク] ステップにリストされます。その時点で、リンク ステージから と の両方を削除し、以下のように だけを残すことFoundation.framework
ができます。AppKit.framework
Cocoa.framework
「開く」は試しましたか?少なくともターミナルで「開く」と、ファイルやアプリが実行されます。