在 Xcode 4.6 中,我基于“命令行工具”项目模板创建了一个新应用程序。
如何以编程方式从该“命令行工具”应用程序启动另一个应用程序(.app 应用程序包)?
在 Xcode 4.6 中,我基于“命令行工具”项目模板创建了一个新应用程序。
如何以编程方式从该“命令行工具”应用程序启动另一个应用程序(.app 应用程序包)?
有很多方法可以实现这一点,使用 Launch Services 和 or NSWorkspace。
识别捆绑应用程序的一种更灵活的方法是通过其捆绑标识符 ( CFBundleIdentifier),它是一个类似于com.apple.TextEdit. 这允许您识别应用程序,而无需硬编码将找到应用程序的假定路径,或者通过硬编码应用程序包的名称,用户可以轻松更改这两者。您可以使用NSWorkspace'slaunchAppWithBundleIdentifier: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 个都列在 Link Binary With Libraries 步骤中。此时,您可以从链接阶段同时删除Foundation.framework和AppKit.framework,只保留Cocoa.framework,如下所示:

你试过“打开”吗?至少在终端“打开”运行文件和/或应用程序。