On Mac, Safari bookmarks are stored in `~/Library/Safari/Bookmarks.plist`.
## Permission
It's not readable directly. To read the file, we need to open a dialog to let user select the folder `~/Library/Safari/`, then read the file.
This is only the first step, bypass permission.
Then we need to parse the plist file.
## Parse plist file
May need to copy the plist file to another folder first so other processes can read it.
The following crates can parse plist file:
- Rust plist crate: https://crates.io/crates/plist
- Python plistlib: https://docs.python.org/3/library/plistlib.html
But in my scenario, I can't directly use them.
I am in a browser environment (tauri).
On Mac, the built-in `/usr/bin/python3` comes with `plistlib`.
To get the full code in python, ask CharGPT, it could easily given you the parser code.
Another option is to use mac's built-in command `plutil`.
The available formats are `xml1`, `binary1`, `json`, `swift`, `objc`.
`json` format doesn't seem to work, `xml1` format works.
After converting to `xml1` format, it's easy to convert to json with any language.
```bash
plutil -convert xml1 -o - ./Bookmarks.plist
plutil -convert xml1 -o output.xml ./Bookmarks.plist
```