我在按钮下方使用此功能重新启动应用程序。
func relaunchApp() {
let url = URL(fileURLWithPath: Bundle.main.resourcePath!)
let path = url.deletingLastPathComponent().deletingLastPathComponent().absoluteString
let task = Process()
task.launchPath = "/usr/bin/open"
task.arguments = [path]
task.launch()
exit(0) }
这完全适用于我的Macbook Air 2015型号。但是,当我将此文件发送给具有完全相同型号的任何其他人(或Mac Mini我也试过这个)时,按下按钮后没有任何反应。这是在完全编译和只是从Xcode运行的两个条件下,或者在我这边工作。我该如何解决这个问题?
答案 0 :(得分:1)
也许这是一个时间问题...如果open
命令在您的应用完全消失之前运行,open
可能会认为它无关。无论如何,您使用open
的方法似乎不必要地复杂化。试试这个(原谅我的Objective-C,我不知道Swift):
NSError* err = nil;
[[NSWorkspace sharedWorkspace]
launchApplicationAtURL: [[NSBundle mainBundle] bundleURL]]
options: NSWorkspaceLaunchAsync | NSWorkspaceLaunchNewInstance
configuration: nil
error: &err ];
[NSApp terminate: NSApp];
答案 1 :(得分:0)
我能够通过在/
的开头添加resourcepath
并使用path
而不是absoluteString
来解决此问题。
func relaunchApp() {
let fullUrl = "/" + Bundle.main.resourcePath!
let url = URL(fileURLWithPath: fullUrl)
let path = url.deletingLastPathComponent().deletingLastPathComponent().path
let task = Process()
task.launchPath = "/usr/bin/open"
task.arguments = [path]
task.launch()
exit(0) }
当我正在使用的另一个函数直接打开文件/System/Library/PreferencePanes/Bluetooth.prefPane
时,我发现了这个问题,而在Xcode中输出了以下内容:
2016-12-09 11:51:56.749 Application[90077:1633677] launch path not accessible
现在,这个函数在Xcode之外工作但不在其中,并且在研究了这个错误之后,我找到了这个answer。只需添加正斜杠并使用path
而不是absoluteString
修复问题。
我要感谢@MartinR提及path
和absoluteString
,@ ddd和@JWWalker之间的区别,感谢他们提供的帮助。