在 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
,如下所示:
你试过“打开”吗?至少在终端“打开”运行文件和/或应用程序。