SimPLISTic - an alternate, cross-platform format for representing property lists
Does everything plutil(1) does: (which, honestly, isn't much).
Friendlier than /usr/libexec/PlistBuddy: because it's only friendly to MacOS users, and even that, barely.
SimPLISTic format: Similar to plutil(1)'s -p switch, but more readily machine readable and grep(1)-friendly.
POSIX compliant code! - This is another reason I created this: plutil(1) and the code in CFBinaryPlist.c require CoreFoundation, which means the code won't compile outside Darwin. So you can run this tool on Linux, FreeBSD or even CygWIN!
Color! - You know my motto - everything looks better in color :-) But then, color is optional - JCOLOR=1 as with the rest of my tools. And export/setenv to apply as default. Note when piping, you'll need less -R, rather than more. Colors will identify the datatypes.
Full UNICODE Support - jlutil so it gets all UTF-8,UTF-16 and UTF-32 correctly, so as to support any language (important, since plists often i18n-alize) and not (perish the thought...) leave any emoji behind...
Convert to XML: With -x, if you really have to, though I find SimPLISTic is far more readable and easier on the eyes.
BPList16 support: no longer experimental - This works now.
This makes it easy to piece together remote invocations of ObjC over NSXPC: In the example above, the selector is doMarkUserActivityAsDirty:forceImmediate:webpageURL:expiration:hasiCloudDocument:hasUnsynchronizediCloudDoc: with an Objective-C protocol of v@:@c@@cc (return void, get id, char, id, id char char) with the object (an NSUUID, the activity), a '1' for the 2nd argument (counting from 0) two NULLs for webPageURL and expiration, a false for hasiCloudDocument and another false for hasUnsynchronizediCloudDoc.
You can get bplist16 output from breakpointing XPC in lldb and mem read -o .. or using XPoCe 2.5.
Get it here for MacOS/*OS (Universal binary) and for Linux, also with source!
Bugs
Escaping XML tags from Unicode - I don't. So it doesn't interfere with simplistic format, but might form invalid XML ..
BPList16 support may be buggy - let me know if anything doesn't work for you
Won't process XML input. At least, not yet - Got XML working.
Q&A
Why is your order of items different than that of the real plutil(1)? - Because they're displayed in order of appearance (from the top object downwards), and not their order in memory. When loaded into a CFDict and then enumerated (the way plutil(1) does it) the elements get sorted.
Why isn't Apple using a nicer, simpler, indentable and lightweight format like yours? I dunno. I wish they did. XML is so 1990...
Is this open source? It is now. All I ask is credit where due if you use it.