ine*_*tus 3 cocoa swift macos-big-sur
我想发布 macOS 应用程序的更新。我有一个自动启动应用程序的登录项。我在助手应用程序中使用了以下代码:
if !alreadyRunning
{
DistributedNotificationCenter.default().addObserver(self, selector: #selector(AppDelegate.terminate), name: NSNotification.Name("killme"), object: mainIdentifier)
let path = Bundle.main.bundlePath as NSString
var components = path.pathComponents
components.removeLast()
components.removeLast()
components.removeLast()
components.append("MacOS")
components.append("MyAppName")
let newPath = NSString.path(withComponents: components)
NSWorkspace.shared.launchApplication(newPath)
}
else
{
self.terminate()
}
Run Code Online (Sandbox Code Playgroud)
已经工作三年了。然而,在 macOS Big Sur 中,该launchApplication函数现已被弃用,它表示我应该使用该openApplication函数。
我将应用程序的下部更改为:
let url = URL(fileURLWithPath: newPath)
let configuration = NSWorkspace.OpenConfiguration()
configuration.promptsUserIfNeeded = true
configuration.allowsRunningApplicationSubstitution = true
NSWorkspace.shared.openApplication(at: url, configuration: configuration, completionHandler: nil)
Run Code Online (Sandbox Code Playgroud)
事实上,我已经尝试了配置上可用的所有标志。会抛出几个不同的错误。它要么说不允许启动器应用程序启动我的主应用程序,要么说辅助应用程序无法运行终端命令。
一个简单的解决方法是忽略弃用警告,我想避免这种情况。我的 LoginItem 应用程序如何在 Big Sur 上运行我的主应用程序?
小智 5
openApplication需要 MyAppName.app 文件夹的 URL,而不是二进制文件。
再尝试removeLast()一次删除“Contents”,并且不要添加“MacOS”或“MyAppName”。
let path = Bundle.main.bundlePath as NSString
var components = path.pathComponents
components.removeLast()
components.removeLast()
components.removeLast()
components.removeLast()
let newPath = NSString.path(withComponents: components)
let url = URL(fileURLWithPath: newPath)
let configuration = NSWorkspace.OpenConfiguration()
NSWorkspace.shared.openApplication(at: url, configuration: configuration, completionHandler: nil)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
316 次 |
| 最近记录: |