Add "Move to Applications" button for standalone macOS app

This commit is contained in:
世界
2026-01-17 05:15:37 +08:00
parent 9d4ce37e94
commit d10580e90f
+28 -1
View File
@@ -76,11 +76,38 @@ public class MainViewModel: BaseViewModel {
alert = AlertState(
title: String(localized: "Wrong application location"),
message: String(localized: "This app needs to be placed under the Applications folder to work."),
dismissButton: .default(String(localized: "Ok")) {
primaryButton: .default(String(localized: "Move to Applications")) { [self] in
moveToApplications()
},
secondaryButton: .cancel(String(localized: "Quit")) {
NSWorkspace.shared.selectFile(Bundle.main.bundlePath, inFileViewerRootedAtPath: "")
NSApp.terminate(nil)
}
)
}
}
private func moveToApplications() {
let source = Bundle.main.bundlePath
let appName = URL(filePath: source).lastPathComponent
let dest = "/Applications/\(appName)"
let script = """
do shell script "rm -rf '\(dest)'; mv '\(source)' '\(dest)'" with administrator privileges
"""
var error: NSDictionary?
guard let appleScript = NSAppleScript(source: script) else { return }
appleScript.executeAndReturnError(&error)
if let error {
let msg = error[NSAppleScript.errorMessage] as? String ?? "Unknown error"
alert = AlertState(errorMessage: msg)
return
}
let url = URL(filePath: dest)
NSWorkspace.shared.openApplication(at: url, configuration: .init())
NSApp.terminate(nil)
}
}