
Version
1.2-beta
Published on
Jan 23, 2026
Dev Log: Permissions, the Rolling Buffer, and Retroactive Export
TL;DR: This cycle built DevCam’s spine — deterministic permission handling, the segmented rolling buffer that makes retroactive capture possible, the export pipeline that gets clips back out, a real preferences window, and recording that starts itself reliably at launch.
Permissions that can’t get lost
Permission handling on macOS is where screen recorders go to die. If a user denies Screen Recording access and the app can’t guide them back, they uninstall. This work made the flow deterministic:
Explicit Screen Recording permission orchestration — the app always knows its permission state and what to tell you about it
Onboarding and permission messaging kept in sync instead of contradicting each other
Tightened menubar session bootstrapping, hardened readiness checks, and tests around the ugly edge cases (denied, revoked mid-session, granted-then-restarted)
The rolling buffer engine
The heart of the app. Instead of one ever-growing recording file, DevCam writes short segments and rotates them, so the buffer holds a bounded window of history no matter how long it runs:
Segmented rolling storage — fixed-length segments, oldest rotated out automatically
AVAssetWriter lifecycle coordinated with rotation, so finalizing one segment never stalls the next
Two non-negotiable constraints: the buffer must never quietly eat your disk, and a crash mid-segment must never corrupt the rest of the history.
Retroactive export
Capturing history is half the product; getting a clean clip back out is the other half:
Formalized export-range preparation — pick a range from the buffer, get exactly that range
Exporter hardened against missing or partial segments instead of failing the whole export
Tests around clip assembly so regressions surface before users see them
Preferences and auto-start
Settings got a real home — a tabbed preferences window with persistence across the app lifecycle, organized sections, and privacy-first defaults. The guiding tradeoff: sane defaults over option sprawl. And because a buffer you have to remember to start is a buffer that misses the bug, startup sequencing was fixed so recording begins dependably at launch, with silent-failure windows closed and status that tracks actual readiness.
Combined scope: 24 files changed, ~2,900 insertions across five workstreams.
Read next: beta polish — save flow, shortcuts, and sandboxing.
