我的主
Swift应用程序中有一个子应用程序.我做了它,因此它在构建它时会自动复制到主应用程序的Resources文件夹中.这样,我希望能够从主应用程序启动子应用程序的实例.
问题是,我遇到了一个很难调试/找到答案的错误.
这是我的代码:
let args = ["--args", "-admin_url", site.url, "-login", site.login, "-pass", site.password]
let helperPath = (NSBundle.mainBundle().pathForResource("App Helper", ofType: "app"))!
let task = NSTask.init()
task.launchPath = helperPath
task.arguments = args
task.launch()
而错误:
[56490:7218926] Couldn't posix_spawn: error 13
我不知道在哪里寻找,搜索什么.我不知道我做错了什么.
我想知道这个问题是否与子应用程序本身有关.那个子应用程序现在是空的.我将Application is Agent设置为YES.在MainMenu.xib中,我将Visible at launch选项设置为no.
该子应用程序需要在后台完成一些工作,根本不需要任何UI.
谢谢 !
最佳答案 不要使用NSTask,使用NSWorkspace:
let helperAppURL = NSBundle.mainBundle().URLForResource("App Helper",
withExtension:"app")!
_ = try? NSWorkspace.sharedWorkspace().openURL(helperAppURL,
options:[.Default],
configuration:[NSWorkspaceLaunchConfigurationArguments :
["--args", "-admin_url", site.url, "-login",
site.login, "-pass", site.password]])
在上面的代码中,为简洁起见,我忽略了openURL()命令的结果,但实际上它可以返回表示任务的NSRunningApplication实例.
要跟踪您启动的帮助程序应用程序的实例,可以在适当类型的集合类中保留对此NSRunningApplication的引用,并在时间到来时调用其terminate()
方法.