--- id: bpylist2 version: "4.1.1" license: MIT license_treatment: permissive maintenance: aging --- # bpylist2 — Parse and generate NSKeyedArchiver archives License: permissive · Maintenance: aging · Downloads: 344.3K/mo ## What it is and what it does bpylist2 is a Python library for reading and writing Apple's binary plist format and NSKeyedArchiver archives—a proprietary serialization format used by Cocoa applications on macOS and iOS. It handles both plain binary plists and the more complex NSKeyedArchiver format, which encodes Cocoa objects like NSString, NSNumber, NSDate, NSArray, and NSDictionary. The library also supports custom Cocoa classes through Python class registration, allowing you to map archived objects to your own Python dataclasses or custom classes with encode/decode methods. The package has no external runtime dependencies and installs cleanly. It supports Python 3.7 through 3.11, bundling a copy of the Python 3.8 plistlib for older versions. Maintenance is aging—the last release was over a year ago—but the repository remains active and not archived, and there are no known security vulnerabilities. Use it for: - Extract data from macOS or iOS application archives or preference files for analysis or migration. - Deserialize Cocoa objects saved by native applications into Python for processing or conversion. - Build tools that need to read or modify NSKeyedArchiver-formatted data from Apple platforms. - Reverse-engineer or inspect binary plist data structures from macOS system files or app bundles. - Archive Python dictionaries and lists in a format compatible with Cocoa applications. ## Worth the install? AI-flagged interpretation of the facts above — verify before relying. Reads and writes Apple's binary plist format and NSKeyedArchiver archives, enabling serialization and deserialization of Cocoa objects in Python. Yes, if you need to work with Apple's binary plist or NSKeyedArchiver formats. The package is lightweight, dependency-free, and permissively licensed. The aging maintenance is a minor concern—it does not affect basic functionality for standard Cocoa classes, but verify compatibility if you rely on newer or less common archive features. No security vulnerabilities are known. ## Install pip install bpylist2 uv add bpylist2 poetry add bpylist2 ## Installing bpylist2 Before you install: Low friction install with no runtime dependencies. Maintenance is aging—last release was over a year ago and the repository has not received recent commits, though it remains active and not archived. License in practice: MIT license permits free use, modification, and distribution with minimal restrictions; suitable for both open-source and proprietary projects. Quickstart: from bpylist2 import archiver # Unarchive with open('my_archived_object', 'rb') as f: obj = archiver.unarchive(f.read()) # Archive my_object = {'foo': 'bar', 'some_array': [1, 2, 3, 4]} archived = archiver.archive(my_object) Requires Python 3.7 or later. For Python 3.6 and 3.7, a bundled copy of plistlib is used; Python 3.8+ uses the standard library version. Verify before relying: - Whether the aging maintenance status affects compatibility with recent macOS or iOS archive formats. - Performance characteristics when handling large or deeply nested archives. - Completeness of support for all NSKeyedArchiver-compatible Cocoa classes beyond the documented standard ones. ## Package facts - License: MIT (permissive) - Python support: supports_current - Install friction: low - Maintenance: aging - Downloads: 344.3K/month (top 15,000 on PyPI) - Known vulnerabilities: none known ## Tags binary plist parser, NSKeyedArchiver unarchive, apple plist serialization, cocoa object deserialization, bpylist format, macos archive format, plist read write, serialization, macos-interop, binary-format [View on SkillFed](https://skillfed.io/packages/bpylist2) · [View on PyPI](https://pypi.org/project/bpylist2/)