When this URL extension is run as a panel it fails to return a URL, seemingly bypassing the completion:
func saveAs() -> URL? {
let savePanel = NSSavePanel()
var saveAsURL : URL? = nil
savePanel.canCreateDirectories = true
savePanel.nameFieldStringValue = self.lastPathComponent
savePanel.directoryURL = FileManager.default.urls(for: .downloadsDirectory, in: .userDomainMask).first!
if let keyWindow = NSApp.keyWindow {
savePanel.beginSheetModal(for: keyWindow, completionHandler: { result in
/*if result == .OK {*/ saveAsURL = savePanel.url //}
})
}
else
{
NSApp.activate(ignoringOtherApps: true)
if savePanel.runModal() == .OK {
saveAsURL = savePanel.url
}
}
Swift.print("saveAsURL => \(saveAsURL.debugDescription)")
return saveAsURL
}
but run as standalone window it works fine. There is another related answer here but here the usage is different: i.e.
guard let saveAsURL = URL.init(string: "download.dmg").saveAs() else { return }
where I presume a user cancel would infer the processing should end.