在Xcode 4.6,我创建了基于“命令行工具”项目模板创建一个新的应用程序。 如何以编程从“命令行工具”应用程序启动另一个应用程序(.APP应用程序绑定)?
Answer 1:
有许多方法可以做到这一点,利用发射服务和或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
,如下图所示:
Answer 2:
您是否尝试过“开放”? 至少在终端“开放”的运行文件和/或应用。
文章来源: MacOsX: How to launch an application (.app) from a “Command Line Tool” type of app