<div dir="ltr"><div><div><div><div><div><div><div>> In the unbundled case, wrapping the settings value as a QBytesArray:<br>>   settings.setValue('b’,QBytesArray(b'\xde\xad\xbe\xef’))<br>> results in a simpler-looking plist file...<br><br></div>Sir, you are a genius. Adding this manual coercion made all<br>versions of the writer (native, bundled by cxfreeze, bundled by<br>pyinstaller) write the same plist, and all versions of the reader<br>happily accepted it.<br></div><br></div>In my defense, I had supposed that PyQt5 would do exactly<br>that coercion automatically, the way it automatically coerces<br></div><div>between string and QString. It does automatically coerce the<br></div><div>output of settings.value() back to a bytes type. But it seems<br></div><div>during the setValue call it does something else.<br><br></div></div></div>What I *think* PyQt does, based on some unrelated testing<br></div><div>I was doing with Nuitka, is to use "pickle" to wrap the bytes<br>type. But it doesn't do that, or silently fails attempting that,<br>in the bundled case.<br><br></div><div>No matter; problem solved. Thanks very much.<br><br><br></div></div>