Skip to content

v0.2.0 — ANCS per-app notifications

Choose a tag to compare

@gabrielmeir53 gabrielmeir53 released this 20 May 02:01
· 8 commits to main since this release

🚀 Phase 2a is live — every iPhone app's notifications mirror to Linux desktop

Live-verified: a WhatsApp notification from a contact arrived on the Linux desktop within ~2s of the iPhone receiving it. iphonebridge now has full Phone-Link feature parity:

Feature Mechanism
SMS + iMessage incoming MAP MNS
SMS + iMessage outgoing MAP PushMessage
Contacts PBAP
Per-app notifications ANCS BLE GATT ⬅ new
Bidirectional read sync MAP read-state writes

What was new in this release

  • src/iphonebridge/ancs/ — full ANCS protocol implementation: constants, wire-format parsers/builders, GATT client subscribing to the three ANCS characteristics, AncsEvent type
  • systemd/set-le-bearer.sh — strictly-validated privileged helper that writes LastUsedBearer=le in BlueZ's pairing record so Device1.Connect() chooses BLE rather than BR/EDR
  • systemd/install-ancs-sudoers.sh — NOPASSWD sudoers rule for the above, locked to two MAC arguments
  • iphonebridge ancs-enable CLI command — applies the bearer change and cycles the iPhone connection

The unlock

ANCS only works with a proper BLE bond, which requires the iPhone re-pair to happen while:

  • Adapter Class-of-Device = A/V Hands-Free (btmgmt class 4 8)
  • BLE peripheral advert with SolicitUUIDs=ANCS is active
  • An Intel BT adapter (Realtek and most USB BT adapters don't work, per bmh129's hardware notes)

iOS does CTKD during that fresh SSP and produces both BR/EDR LinkKey AND BLE LongTermKey in the bonding record. Then LastUsedBearer=le ensures BlueZ uses the BLE side on reconnect.

Credits

This release would not exist without bmh129/ancs4linux (active 2026 fork of pzmarzly/ancs4linux). The ANCS wire-format parsers in src/iphonebridge/ancs/ are derived from their observer/ancs/ modules, and their empirical documentation of which BT adapters can actually do BLE-with-iOS saved weeks of trial-and-error.

Setup

Existing v0.1.0 users:

git pull
pip install -e .
sudo bash systemd/install-ancs-sudoers.sh
iphonebridge ancs-enable
# follow the prompts to re-pair your iPhone fresh

See the README for new install.