<feed xmlns='http://www.w3.org/2005/Atom'>
<title>libplist, branch master</title>
<subtitle>Library to handle Apple Property List format files in binary or XML</subtitle>
<link rel='alternate' type='text/html' href='https://cgit.libimobiledevice.org/libplist.git/'/>
<entry>
<title>Add OpenStep to man page</title>
<updated>2026-04-10T10:21:50+00:00</updated>
<author>
<name>Dave Nicolson</name>
</author>
<published>2026-04-09T06:18:58+00:00</published>
<link rel='alternate' type='text/html' href='https://cgit.libimobiledevice.org/libplist.git/commit/?id=dddb76d74a646a7ec41cfa6b9f7772830b7acbd2'/>
<id>dddb76d74a646a7ec41cfa6b9f7772830b7acbd2</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>Fix fread() unused return values by actually handling errors</title>
<updated>2026-04-10T10:21:17+00:00</updated>
<author>
<name>Nikias Bassen</name>
</author>
<published>2026-04-10T10:21:17+00:00</published>
<link rel='alternate' type='text/html' href='https://cgit.libimobiledevice.org/libplist.git/commit/?id=9dfcfe8dc22233cb08aa22ba743640d8db92c4e7'/>
<id>9dfcfe8dc22233cb08aa22ba743640d8db92c4e7</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>Fix Cython crashes</title>
<updated>2026-03-30T18:21:22+00:00</updated>
<author>
<name>Dave Nicolson</name>
</author>
<published>2026-03-30T18:21:22+00:00</published>
<link rel='alternate' type='text/html' href='https://cgit.libimobiledevice.org/libplist.git/commit/?id=f41b1ea67045e0c09339974d83e389972d84f166'/>
<id>f41b1ea67045e0c09339974d83e389972d84f166</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>Add OpenStep coercion support for non-OpenStep plist types</title>
<updated>2026-03-22T18:16:51+00:00</updated>
<author>
<name>Nikias Bassen</name>
</author>
<published>2026-03-22T18:16:51+00:00</published>
<link rel='alternate' type='text/html' href='https://cgit.libimobiledevice.org/libplist.git/commit/?id=c8b36a80bad4a1fe488927af4da0ecbcf10079bb'/>
<id>c8b36a80bad4a1fe488927af4da0ecbcf10079bb</id>
<content type='text'>
- Use PLIST_OPT_COERCE option to coerce PLIST_BOOLEAN, PLIST_DATE, PLIST_UID, and PLIST_NULL to OpenStep-compatible types (1 or 0, ISO 8601 strings, integers, and 'NULL' string)
- Add plist_to_openstep_with_options() function to allow passing coercion option (and others)
- Update plist_write_to_string() and plist_write_to_stream() accordingly
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
- Use PLIST_OPT_COERCE option to coerce PLIST_BOOLEAN, PLIST_DATE, PLIST_UID, and PLIST_NULL to OpenStep-compatible types (1 or 0, ISO 8601 strings, integers, and 'NULL' string)
- Add plist_to_openstep_with_options() function to allow passing coercion option (and others)
- Update plist_write_to_string() and plist_write_to_stream() accordingly
</pre>
</div>
</content>
</entry>
<entry>
<title>Add JSON coercion support for non-JSON plist types</title>
<updated>2026-03-20T16:12:47+00:00</updated>
<author>
<name>Calil Khalil</name>
</author>
<published>2026-02-21T13:39:24+00:00</published>
<link rel='alternate' type='text/html' href='https://cgit.libimobiledevice.org/libplist.git/commit/?id=3edac28498d883f1f768699ee15ce85a82bb2a7b'/>
<id>3edac28498d883f1f768699ee15ce85a82bb2a7b</id>
<content type='text'>
- Add PLIST_OPT_COERCE option to coerce PLIST_DATE, PLIST_DATA, and PLIST_UID to JSON-compatible types (ISO 8601 strings, Base64 strings, and integers)
- Add plist_to_json_with_options() function to allow passing coercion options (and others)
- Update plist_write_to_string() and plist_write_to_stream() to support coercion option
- Add --coerce flag to plistutil for JSON output
- Create plist2json symlink that automatically enables coercion when invoked
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
- Add PLIST_OPT_COERCE option to coerce PLIST_DATE, PLIST_DATA, and PLIST_UID to JSON-compatible types (ISO 8601 strings, Base64 strings, and integers)
- Add plist_to_json_with_options() function to allow passing coercion options (and others)
- Update plist_write_to_string() and plist_write_to_stream() to support coercion option
- Add --coerce flag to plistutil for JSON output
- Create plist2json symlink that automatically enables coercion when invoked
</pre>
</div>
</content>
</entry>
<entry>
<title>xplist: Enforce single root value inside &lt;plist&gt;</title>
<updated>2026-02-25T01:27:00+00:00</updated>
<author>
<name>Sami Kortelainen</name>
</author>
<published>2026-02-25T01:27:00+00:00</published>
<link rel='alternate' type='text/html' href='https://cgit.libimobiledevice.org/libplist.git/commit/?id=6e03a1df6d1aa87c8f9e2b35f1a2ca60feca1c0e'/>
<id>6e03a1df6d1aa87c8f9e2b35f1a2ca60feca1c0e</id>
<content type='text'>
Ensure that XML property lists contain exactly one root value inside the &lt;plist&gt; element and reject any additional value nodes before &lt;/plist&gt;.

Add tests covering root value handling and nested CF$UID conversion behavior.

Co-authored-by: Sami Kortelainen &lt;sami.kortelainen@piceasoft.com&gt;
Co-authored-by: Nikias Bassen &lt;nikias@gmx.li&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Ensure that XML property lists contain exactly one root value inside the &lt;plist&gt; element and reject any additional value nodes before &lt;/plist&gt;.

Add tests covering root value handling and nested CF$UID conversion behavior.

Co-authored-by: Sami Kortelainen &lt;sami.kortelainen@piceasoft.com&gt;
Co-authored-by: Nikias Bassen &lt;nikias@gmx.li&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>xplist: Convert nested {CF$UID:&lt;int&gt;} dicts to PLIST_UID safely</title>
<updated>2026-02-22T02:39:54+00:00</updated>
<author>
<name>Sami Kortelainen</name>
</author>
<published>2026-02-22T02:39:54+00:00</published>
<link rel='alternate' type='text/html' href='https://cgit.libimobiledevice.org/libplist.git/commit/?id=f5e74fc1e007b8f625d91e40c160785580de8f60'/>
<id>f5e74fc1e007b8f625d91e40c160785580de8f60</id>
<content type='text'>
Convert single-entry { "CF$UID" : &lt;integer&gt; } dictionaries to PLIST_UID
nodes when closing a dict in the XML parser.

Refactor node cleanup logic:
- Split plist_free_data() into internal _plist_free_data()
- Introduce plist_free_children() to release child nodes separately
- Update plist_set_element_val() to free children before changing
  container node types
- Ensure PLIST_DICT hashtables do not free values (assert + force
  free_func = NULL)

This avoids in-place container mutation issues and ensures child
nodes and container metadata are released correctly before
changing node type.

Co-authored-by: Sami Kortelainen &lt;sami.kortelainen@piceasoft.com&gt;
Co-authored-by: Nikias Bassen &lt;nikias@gmx.li&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Convert single-entry { "CF$UID" : &lt;integer&gt; } dictionaries to PLIST_UID
nodes when closing a dict in the XML parser.

Refactor node cleanup logic:
- Split plist_free_data() into internal _plist_free_data()
- Introduce plist_free_children() to release child nodes separately
- Update plist_set_element_val() to free children before changing
  container node types
- Ensure PLIST_DICT hashtables do not free values (assert + force
  free_func = NULL)

This avoids in-place container mutation issues and ensures child
nodes and container metadata are released correctly before
changing node type.

Co-authored-by: Sami Kortelainen &lt;sami.kortelainen@piceasoft.com&gt;
Co-authored-by: Nikias Bassen &lt;nikias@gmx.li&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>plistutil: Read STDIN in chunks instead of 1 byte at a time</title>
<updated>2026-02-20T04:17:32+00:00</updated>
<author>
<name>Nikias Bassen</name>
</author>
<published>2026-02-20T04:17:32+00:00</published>
<link rel='alternate' type='text/html' href='https://cgit.libimobiledevice.org/libplist.git/commit/?id=3bdee70a9c1490ea011c6fb65193b2c7e242d26d'/>
<id>3bdee70a9c1490ea011c6fb65193b2c7e242d26d</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>plistutil: Add a --nodepath option to allow selecting a specific node</title>
<updated>2026-02-20T02:38:36+00:00</updated>
<author>
<name>Nikias Bassen</name>
</author>
<published>2026-02-20T02:38:36+00:00</published>
<link rel='alternate' type='text/html' href='https://cgit.libimobiledevice.org/libplist.git/commit/?id=e3d5bbdf1f213caafedf185251fba02558d30b98'/>
<id>e3d5bbdf1f213caafedf185251fba02558d30b98</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>plistutil: Use getopt for solid option parsing</title>
<updated>2026-02-20T01:32:19+00:00</updated>
<author>
<name>Nikias Bassen</name>
</author>
<published>2026-02-20T01:32:19+00:00</published>
<link rel='alternate' type='text/html' href='https://cgit.libimobiledevice.org/libplist.git/commit/?id=30132a9e2ce44f8325d574ea7a3c28466c132f0e'/>
<id>30132a9e2ce44f8325d574ea7a3c28466c132f0e</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
</feed>
