DevCam dev log — building the core recording foundation: permissions, rolling buffer, and export pipeline

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.