skillfed

bpylist2

Parse and generate NSKeyedArchiver archives

bpylist2 v4.1.1 344.3K downloads/30d#7,374 on PyPI22
Permissive license MIT AGING released

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 on this page — 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

bpylist2 on PyPI

pip

pip install bpylist2

uv

uv add bpylist2

poetry

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 the current Python release (>=3.7,<4.0)
Install friction low — pure-Python wheel
Runtime dependencies none
Maintenance aging — 1,068 days since the last release
Last repo commit
First released
Downloads 344,320/month — #7,374 on PyPI (30-day window, as of 2026-08-14)
Known vulnerabilities none known (OSV.dev, checked 2026-08-14)

Evidence: bpylist2-4.1.1-py3-none-any.whl

License :: OSI Approved :: MIT LicenseProgramming Language :: Python :: 3Programming Language :: Python :: 3.10Programming Language :: Python :: 3.11Programming Language :: Python :: 3.7Programming Language :: Python :: 3.8Programming Language :: Python :: 3.9

Tags

binary plist parserNSKeyedArchiver unarchiveapple plist serializationcocoa object deserializationbpylist formatmacos archive formatplist read write
serializationmacos-interopbinary-format

More Utilities packages

idna

Converts domain names between Unicode and…

permissive · top 100 on PyPI

charset-normalizer

Detects and normalizes text encoding from…

permissive · top 100 on PyPI

setuptools

Setuptools is a Python build backend and…

permissive · top 100 on PyPI

pluggy

Pluggy provides a plugin system that lets you…

permissive · top 100 on PyPI

Pygments

Pygments is a syntax highlighter that colorizes…

permissive · top 100 on PyPI

six

Six provides utility functions to write Python…

permissive · top 100 on PyPI

opack2

opack2 parses the opack binary format, a…

copyleft · top 15,000 on PyPI

openstep-parser

Parses Xcode project files (OpenStep format)…

permissive · top 15,000 on PyPI

pyobjc-framework-DeviceDiscoveryExtension

Provides Python bindings for Apple's…

permissive · top 15,000 on PyPI

pyobjc-framework-MediaExtension

Provides Python bindings to Apple's…

permissive · top 15,000 on PyPI

pyiosbackup

Parses and decrypts iOS device backups,…

copyleft · top 15,000 on PyPI

pyobjc-framework-FinderSync

Provides Python bindings to macOS's FinderSync…

permissive · top 15,000 on PyPI

pyobjc-framework-MapKit

Provides Python bindings to Apple's MapKit…

permissive · top 15,000 on PyPI

pyobjc-framework-DataDetection

Provides Python bindings to macOS's…

permissive · top 15,000 on PyPI

pyobjc-framework-BackgroundAssets

Provides Python bindings to Apple's…

permissive · top 15,000 on PyPI

pyobjc

PyObjC bridges Python and Objective-C, enabling…

permissive · top 15,000 on PyPI