Skip to content

Instantly share code, notes, and snippets.

@omranjamal
Created February 4, 2026 21:02
Show Gist options
  • Select an option

  • Save omranjamal/86dfc47c196b27c96f4d8e433dfcb3ce to your computer and use it in GitHub Desktop.

Select an option

Save omranjamal/86dfc47c196b27c96f4d8e433dfcb3ce to your computer and use it in GitHub Desktop.
#!/usr/bin/env swift
import Foundation
let homeDir = FileManager.default.homeDirectoryForCurrentUser
let sflPath = homeDir
.appendingPathComponent("Library/Application Support/com.apple.sharedfilelist")
let possibleFiles = [
"com.apple.LSSharedFileList.FavoriteItems.sfl4",
"com.apple.LSSharedFileList.FavoriteItems.sfl3",
"com.apple.LSSharedFileList.FavoriteItems.sfl2"
]
var dataURL: URL? = nil
for filename in possibleFiles {
let url = sflPath.appendingPathComponent(filename)
if FileManager.default.fileExists(atPath: url.path) {
dataURL = url
break
}
}
guard let fileURL = dataURL,
let data = try? Data(contentsOf: fileURL),
let plist = try? PropertyListSerialization.propertyList(from: data, options: [], format: nil) as? [String: Any],
let objects = plist["$objects"] as? [Any] else {
print("[]")
exit(1)
}
var favorites: [[String: String]] = []
for obj in objects {
if let bookmarkData = obj as? Data {
var isStale = false
if let url = try? URL(resolvingBookmarkData: bookmarkData, options: .withoutUI, relativeTo: nil, bookmarkDataIsStale: &isStale) {
if url.isFileURL {
favorites.append([
"name": url.lastPathComponent,
"path": url.path
])
}
}
}
if let dict = obj as? [String: Any], let bookmarkData = dict["Bookmark"] as? Data {
var isStale = false
if let url = try? URL(resolvingBookmarkData: bookmarkData, options: .withoutUI, relativeTo: nil, bookmarkDataIsStale: &isStale) {
if url.isFileURL {
favorites.append([
"name": dict["Name"] as? String ?? url.lastPathComponent,
"path": url.path
])
}
}
}
}
let jsonData = try! JSONSerialization.data(withJSONObject: favorites, options: .prettyPrinted)
print(String(data: jsonData, encoding: .utf8)!)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment