diff --git a/xcode/App-Shared/ViewController.swift b/xcode/App-Shared/ViewController.swift index 61f98471..7b9b1f91 100644 --- a/xcode/App-Shared/ViewController.swift +++ b/xcode/App-Shared/ViewController.swift @@ -219,6 +219,10 @@ class ViewController: PlatformViewController, WKNavigationDelegate, WKScriptMess func updateEnableLoggerState() { self.webView.evaluateJavaScript("webapp.switchLogger(\(Preferences.enableLogger),\(Preferences.promptLogger))") } + + func updateCurrentDirectory() { + self.webView.evaluateJavaScript("webapp.updateDirectory('\(getCurrentScriptsDirectoryString())')") + } #if os(macOS) deinit { @@ -268,7 +272,7 @@ extension ViewController: UIDocumentPickerDelegate { func changeSaveLocationHandler(_ url: URL) { Preferences.scriptsDirectoryUrl = url - webView.evaluateJavaScript("webapp.updateDirectory('\(getCurrentScriptsDirectoryString())')") + self.updateCurrentDirectory() } func exportLogFiles() { @@ -367,7 +371,7 @@ extension ViewController { // try set new save location path to bookmark guard setSaveLocationURL(url: url) else { return } // update user interface text display - self.webView.evaluateJavaScript("webapp.updateDirectory('\(getCurrentScriptsDirectoryString())')") + self.updateCurrentDirectory() // notify browser extension of relevant updates sendExtensionMessage( name: "SAVE_LOCATION_CHANGED", diff --git a/xcode/Shared/Preferences.swift b/xcode/Shared/Preferences.swift index 6d1f67fc..d26e10ed 100644 --- a/xcode/Shared/Preferences.swift +++ b/xcode/Shared/Preferences.swift @@ -252,11 +252,12 @@ private struct SecurityScopedBookmark { set(url) { let k = key // key cannot be log directly with error: Escaping autoclosure captures mutating 'self' parameter logger?.info("\(#function, privacy: .public) - try set bookmark: \(k, privacy: .public) \(url, privacy: .public)") - guard url.startAccessingSecurityScopedResource() else { - logger?.error("\(#function, privacy: .public) - failed access url: \(url, privacy: .public)") - return + // true - when url from UIDocumentPicker + // false - when set default app document + let didStartAccessing = url.startAccessingSecurityScopedResource() + defer { + if didStartAccessing { url.stopAccessingSecurityScopedResource() } } - defer { url.stopAccessingSecurityScopedResource() } guard let data = createBookmark(url) else { logger?.info("\(#function, privacy: .public) - failed create bookmark: \(k, privacy: .public) \(url, privacy: .public)") return