Seems like you can access $HOME/Library/Application\ Support/Google/Chrome/NativeMessagingHosts using this approach:
func requestAccess() {
let chromeNativeMessagingPath = NSString(string: "~/Library/Application Support/Google/Chrome/NativeMessagingHosts").expandingTildeInPath
let openPanel = NSOpenPanel()
openPanel.canChooseDirectories = true
openPanel.canChooseFiles = false
openPanel.allowsMultipleSelection = false
openPanel.directoryURL = URL(fileURLWithPath: chromeNativeMessagingPath)
openPanel.message = "Please grant access to the Chrome NativeMessagingHosts folder"
openPanel.prompt = "Grant Access"
openPanel.begin { [weak self] (result) in
if result == .OK, let selectedURL = openPanel.url {
// Bookmark the URL for persistent access
do {
let bookmarkData = try selectedURL.bookmarkData(options: .withSecurityScope, includingResourceValuesForKeys: nil, relativeTo: nil)
UserDefaults.standard.set(bookmarkData, forKey: "ChromeNativeMessagingHostsBookmark")
self?.accessDirectory(selectedURL)
} catch {
print("Failed to create security-scoped bookmark: \(error)")
}
}
}
}
func accessDirectory(_ url: URL) {
// Example of how to access the directory later using the bookmark
do {
// Start accessing the security-scoped resource
guard url.startAccessingSecurityScopedResource() else {
print("Failed to access security-scoped resource")
return
}
// Now you have access to the directory, you can read/write files
let fileManager = FileManager.default
let contents = try fileManager.contentsOfDirectory(at: url, includingPropertiesForKeys: nil)
print("Contents of directory: \(contents)")
// When done, release the access
url.stopAccessingSecurityScopedResource()
} catch {
print("Error accessing directory: \(error)")
url.stopAccessingSecurityScopedResource()
}
}