A Matrix macOS Messages puppeting bridge.
- mautrix-imessage - Multi-purpose bridge for:
- macOS
- macOS without SIP (deprecated due to Barcelona deprecation)
- iOS (deprecated)
- Android (deprecated in favor of mautrix-gmessages)
- beeper-imessage - Deprecated/Archived
Kinda crazy we're still stuck with stuff from NextStep
Primary implementation of decoding NSAttributedString/typedstream/streamtyped from ReagentX/immessage-exporter and further documented in an extensive write-up here
Other implementations:
- python-typedstream (partial implementation, but probably workable)
- BlueBubbles/node-typedstream (probably entirely workable since they're doing what we're doing)
- meowUnsafeDecodeAttributedString from mautrix-imessage (calls out to ObjectiveC and throws away a lot of data in the macOS code path)
- yakuter/nsattrparser (surface level string grab)
The three main reasons for this bridge were:
- All but one existing bridge is deprecated
- The single operable bridge (mautrix-imessage in macOS mode) has some sharp edges
- mautrix-imessage could be upgraded to the shiny "new" bridgev2
With that in mind, the intention is to create a bare-minimum replacement for mautrix-imessage's macOS bridge using bridgev2 and attempt to remove these sharp edges:
- Easier installation as either a LaunchAgent or LaunchDaemon (Daemon may be impossible due to permissions issues)
- Improve bridge startup robustness by addressing or surfacing issues:
- Detect if Messages needs to be launched or restarted
- Attempt to ensure TCC (Transparency, Consent and Control) dialogs pops up if required by making the bridge a full-blown macOS application if needed
- Check all external dependencies work before starting
- Replace brittle Contacts support if possible
- Attempt to remove requirement for
Full Disk Access
TODO: Document building and running the bridge as a process and as a LaunchAgent.