Convert macOS/iOS Preferences Plist to JSON
Convert a macOS or iOS UserDefaults preferences plist to JSON. Covers common preference patterns including mixed types and nested structures.
Detailed Explanation
UserDefaults Preferences Plist
macOS and iOS store user preferences using the UserDefaults system, which persists data as plist files in ~/Library/Preferences/. These files contain a mix of all plist types and are commonly exported for debugging or migration.
Plist Structure
<dict>
<key>ShowSidebar</key>
<true/>
<key>FontSize</key>
<real>14.5</real>
<key>MaxRecentFiles</key>
<integer>20</integer>
<key>WindowFrame</key>
<string>{{100, 200}, {800, 600}}</string>
<key>LastOpened</key>
<date>2025-12-15T09:30:00Z</date>
<key>Theme</key>
<string>dark</string>
<key>Bookmarks</key>
<array>
<string>/Users/dev/Documents</string>
<string>/Users/dev/Projects</string>
</array>
</dict>
JSON Output
{
"ShowSidebar": true,
"FontSize": 14.5,
"MaxRecentFiles": 20,
"WindowFrame": "{{100, 200}, {800, 600}}",
"LastOpened": "2025-12-15T09:30:00Z",
"Theme": "dark",
"Bookmarks": ["/Users/dev/Documents", "/Users/dev/Projects"]
}
Mixed Type Dictionary
Preferences plists are a great example of how a single <dict> can contain every plist type: booleans, reals, integers, strings, dates, and arrays. The tree view with type badges is particularly useful here to verify the type of each preference.
WindowFrame Pattern
macOS apps store window positions as NSStringFromRect output: "{{x, y}, {w, h}}". This is a string value, not a nested structure. The converter correctly preserves it as a JSON string.
Reading Preferences on macOS
You can export any app's preferences using: defaults export com.example.myapp - | pbcopy and then paste the result into this converter.
Use Case
Useful for developers debugging app preferences, migrating settings between machines, or building admin tools that display and modify user preferences through a JSON-based interface.