在 Xcode 4.6 中,我基于“命令行工具”项目模板创建了一个新应用程序。
如何以编程方式从该“命令行工具”应用程序启动另一个应用程序(.app 应用程序包)?
最佳答案
有多种方法可以实现此目的,例如使用 Launch Services 和/或 NSWorkspace
。
识别捆绑应用程序的更灵活方法之一是通过其捆绑标识符 (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
,如下所示:
关于xcode - Mac OS X : How to launch an application (. 应用程序)来自 "Command Line Tool"类型的应用程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15484390/