xcode - Mac OS X : How to launch an application (. 应用程序)来自 "Command Line Tool"类型的应用程序?

标签 xcode macos command-line

在 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!);
}

重要提示:NSWorkspaceAppKit.framework 框架的一部分,该框架最初并未包含在“命令行工具”项目模板中。要将其添加到您的项目中,请在目标列表中选择目标,如下图所示,然后单击 + 按钮添加其他框架。

enter image description here

添加AppKit.frameworkCocoa.framework

这将导致所有 3 个都列在“链接二进制文件与库”步骤中。此时,您可以从链接阶段删除 Foundation.frameworkAppKit.framework,只保留 Cocoa.framework,如下所示:

enter image description here

关于xcode - Mac OS X : How to launch an application (. 应用程序)来自 "Command Line Tool"类型的应用程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15484390/

相关文章:

ios - Storyboard不会做出按钮 Action

ios - 如何解决 iOS UITableView 在滚动时覆盖 UILabel 和 UITextField?

ios - xcode 8 swift 3 单元格之间的 UItableview 空间?

macos - 如何在NSView上绘制EPS数据

java - 用于铁路模拟的命令处理程序/解析器

xcode - 为什么在 Xcode9 中创建新分支总是失败并返回 "not a valid branch name"?

macos - 如何让iTerm2出现在当前空间?

bash - 从日期字符串获取纪元时间

go - 如何丢弃在我的应用程序中导入的第三方包中定义的标志

linux - 为什么一些 Linux 程序指定长格式和简写参数?