I've noticed that binary plists generated by plutil on Linux are regularly larger than the binary plists generated by plutil on macOS 26.4.1.
I've tried to get this down to a minimal repro, as follows...
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>A</key>
<string>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Duis finibus dapibus ligula, non vulputate neque vestibulum bibendum. Nulla interdum risus ut vehicula dapibus. Curabitur vestibulum efficitur tellus non iaculis. Maecenas eu viverra ligula, ultricies accumsan nunc. Cras id efficitur magna, vitae tincidunt eros. Fusce dictum eu nibh et rhoncus. Curabitur et libero eget risus bibendum molestie pulvinar sed ex.
Etiam viverra aliquam efficitur. Praesent porta orci dolor, ut hendrerit est posuere quis. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Duis pharetra ornare libero id elementum. Praesent vel nulla elit. In placerat velit at lorem laoreet, ut malesuada tellus rhoncus. Phasellus a maximus quam. Integer venenatis odio dui, quis cursus risus semper at. Mauris scelerisque sagittis felis a vulputate. Duis vitae aliquet risus. Pellentesque augue enim, rutrum non luctus maximus, convallis in augue. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Integer eget euismod urna. Sed ultrices felis in lacus rhoncus, id placerat neque hendrerit.
Aenean at sem ullamcorper, sodales dolor facilisis, finibus sem. Ut malesuada gravida fermentum. Nunc sagittis luctus mollis. Maecenas eget est non lacus dictum euismod. Curabitur lacinia ipsum non mi faucibus blandit. Nam ultrices suscipit erat et pharetra. Ut et leo rutrum, posuere neque sit amet, ullamcorper mauris. Sed fringilla facilisis eros, sed mattis mauris tincidunt malesuada. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Interdum et malesuada fames ac ante ipsum primis in faucibus.
Quisque condimentum malesuada neque at cursus. Aliquam elementum iaculis orci ut feugiat. Donec elementum mauris sit amet dapibus varius. Aliquam vitae eros cursus, eleifend augue eu, pulvinar ipsum. Nulla luctus pretium mauris, eget elementum eros interdum nec. Curabitur nec enim in neque sodales sagittis. Ut urna enim, consequat ut molestie in, ornare nec quam. Cras ut mi odio. Phasellus placerat turpis imperdiet nibh vestibulum, non porttitor nibh lacinia. Nam ac sodales massa, eget eleifend risus. Nullam ac nibh lobortis, elementum diam eu, lobortis tellus. Duis ut vestibulum est. Duis in dui nec nunc semper efficitur sit amet et augue.
Nam nunc neque, tincidunt sed finibus sed, laoreet vel neque. Nunc tempor ornare posuere. Praesent tristique, turpis in pulvinar dapibus, magna purus commodo magna, non facilisis eros massa eget tortor. Vivamus porta pretium quam, in hendrerit quam lacinia sit amet. Curabitur et est orci. Vivamus eu commodo risus. Nulla finibus, orci ut pharetra luctus, nulla nulla feugiat ante, id malesuada sapien lorem sit amet ante. Aenean at felis mi. Pellentesque fringilla vulputate bibendum.
</string>
<key>B</key>
<string>B</string>
</dict>
</plist>
$ ls -l bug-repro-xml-linux-snapshot.plist
-rwxrwxr-x 1 username primarygroup 2893 Apr 10 17:16 /path/to/bug-repro-xml-linux-snapshot.plist
$ ls -l bug-repro-xml-mac.plist
-rwxrwxr-x 1 username primarygroup 2889 Apr 10 17:16 /path/to/bug-repro-xml-mac.plist
I've noticed that binary plists generated by plutil on Linux are regularly larger than the binary plists generated by plutil on macOS 26.4.1.
The differences still exist when
SWIFT_DETERMINISTIC_HASHING=1is set in the environment, and they seem to happen more frequently depending on both the size of the strings within the plist and if the plist happens to have multiple keys.I've tried to get this down to a minimal repro, as follows...
Repro steps:
Save this XML plist as
bug-repro-xml.plistCreate two copies of this plist;
bug-repro-xml-linux-snapshot.plistandbug-repro-xml-mac.plistRun
plutil -convert binary1 bug-repro-xml-linux-snapshot.pliston Linux (Debian 13 in my case), using the release toolchain of Swift 6.3.0 installed via swiftly, to convert that copy of the XML plist into binary format.Run
plutil -convert binary1 bug-repro-xml-mac.pliston macOS 26.4.1 to convert the other copy of the XML plist into binary format.Compare sizing data with
ls -l.Expected results:
Actual results: