rodneyrehm/plist
PHP library for reading and writing Apple property list (plist) files in both XML and binary formats. Convert plists to PHP arrays and back with a lightweight, straightforward API suited to macOS and iOS tooling, configuration, and data interchange.
bplist00) are not something to hand-roll: offset tables, object-reference graphs, UID/CF$UID types, dates anchored to 2001-01-01, UTF-16 strings, sets, and nested containers. A correct encoder/decoder is multiple sprints plus a long tail of edge cases. This library turns that into a composer require. Clear "buy" (MIT, free)..mobileconfig configuration profiles server-side, producing OTA install manifests (itms-services://) for enterprise iOS app distribution, emitting launchd/.plist artifacts, reading and rewriting Info.plist from uploaded IPAs during build tooling, and parsing customer-supplied plists.plutil, no Swift/ObjC interop — a real cost and reliability win for a Laravel CI pipeline.Adopt when:
SimpleXML or array-to-XML; if XML is all you need, this is overkill.Look elsewhere or proceed with caution when:
rodneyrehm/plist, check which repo actually receives fixes, and pin an exact version.Mitigation plan if adopted: wrapper + facade, one golden-file test suite covering binary/XML/date/UID/UTF-16 cases, a size and depth guard on decode, and a documented fork-and-own contingency (MIT makes this cheap).
Executives: An MIT-licensed, zero-cost PHP library that lets us generate and read Apple configuration files — .mobileconfig profiles, enterprise iOS install manifests, macOS plists — from our existing Laravel stack. It avoids buying an Apple-ecosystem vendor product and avoids standing up macOS build infrastructure, which is the expensive alternative. The risk is maintainer depth, not license or cost; MIT means we can fork and own it internally if the upstream stalls, so the downside is bounded engineering time rather than lock-in.
Engineering: Pure PHP, no extensions or native binaries, so it runs anywhere our containers run. It replaces ~1–2 sprints of binary-format work plus the ongoing edge-case tax of the bplist00 spec (offset tables, UID types, 2001-epoch dates, UTF-16). Integration cost is a thin adapter: a service provider, a facade, a pinned version, and golden-file tests for both XML and binary round-trips. Treat all decoded input as untrusted — enforce size and nesting limits at the boundary. Budget half a day for the wrapper and a day for the test fixtures; that's the whole adoption cost.
How can I help you explore Laravel packages today?