Ios Apps
audible-viewer-ios
What It Does
Section titled “What It Does”Logs into Audible on the iPhone, fetches the library, downloads and decrypts AAXC audiobooks, plays them back, and runs Apple’s on-device Speech framework against the audio to draw live word-level captions on screen. ADHD-friendly listen-and-read at the same time, no waiting for a Mac to pre-transcribe.
When To Use
Section titled “When To Use”- When you want an audiobook with running captions so the eye can follow the ear.
- When you want a phone-only flow that does not depend on the Mac sidecar in
~/apps/audible-viewer/. - When the book is recent enough that on-device transcription is good enough for casual reading along (no human-edited transcript).
How It Works
Section titled “How It Works”- Open the app on the iPhone, tap Connect Audible, sign in through the embedded WebKit OAuth flow.
- The app stores the Authenticator payload in the iOS Keychain and pulls the library list.
- Pick a book. The app downloads the AAXC, fetches the voucher key and IV, decrypts to local m4a via FFmpegKit.
- Tap play. AVPlayer drives the audio, an audio tap feeds
SFSpeechRecognizer, words light up as they are spoken.
Where It Lives
Section titled “Where It Lives”- Repo:
~/apps/audible-viewer-ios/ - Bundle ID:
com.themarketingshow.audibleviewer.ios - Companion Mac sidecar (independent):
~/apps/audible-viewer/(Python, pre-baked transcripts) - Project file generated by xcodegen from
project.yml— never editAudibleViewer.xcodeprojdirectly.
Build And Install
Section titled “Build And Install”After every push to this repo, the build auto-installs on the phone via ~/apps/cc/bin/run-terminal-over-ssh.sh mbp ~/apps/audible-viewer-ios/run.sh. The MBP Terminal opens, pulls, builds, codesigns, and uses devicectl to push the new build over Wi-Fi. No cable needed; the phone is already paired wirelessly.
Pulling The On-Device Log
Section titled “Pulling The On-Device Log”Build 9+ writes every auth + library call into audible-viewer-log.txt in the app’s Documents folder, exposed via UIFileSharingEnabled. Pull from the MBP:
xcrun devicectl device copy from \ --device "James iPhone 16 Pro Max 256 GB" \ --domain-type appDataContainer \ --domain-identifier com.themarketingshow.audibleviewer.ios \ --source Documents/audible-viewer-log.txt \ --destination /tmp/audible-viewer-log.txtPhases
Section titled “Phases”- Auth + Library (current): Connect Audible, see books.
- Download + Decrypt: AAXC fetch, voucher, FFmpegKit decrypt.
- Playback + Live Captions: AVPlayer + SFSpeechRecognizer audio tap.
- Polish: background audio, lock-screen art, sleep timer, sync play position with the Mac sidecar.
Known Gaps / Quirks
Section titled “Known Gaps / Quirks”- Live captions, not pre-baked word timings — accuracy is whatever Apple’s on-device model gives you. The Mac app’s WhisperX path is more accurate but slower.
- Standalone: no fallback to the Studio’s
server.pyif Audible auth breaks. - iOS 17+. Free Apple ID signing means rebuilds expire weekly if you ever switch to that path.