macOS app that continuously captures your screen activity with OCR-powered search and analytics
- Continuous Screen Capture — Automatically records screenshots of your desktop activity throughout the day
- OCR-Powered Search (Pro) — Full-text search across all captured screens using Apple Vision + a local SQLite FTS5 index
- Timeline View — Browse your activity chronologically with an interactive timeline interface
- App Analytics — Pie charts (free) and weekly trend views (Pro) showing how you spend time across applications
- Active App Tracking — Detects the frontmost application and window title via Accessibility APIs
- Privacy Controls — Exclude specific apps, add blur regions, auto-pause during screen sharing, and Touch ID lock
- Data Retention — Configurable retention policies automatically clean up old captures (3 days free, up to unlimited on Pro)
- Menu Bar Access — Quick access from the macOS menu bar
Everything runs 100% on-device. Nothing is ever uploaded. See landing/src/app/privacy/page.tsx for the full privacy policy.
DesktopRecord is free to use; a one-time $7.99 in-app purchase (StoreKit 2, non-consumable) unlocks Pro. The paywall is enforced in the shipped build — see LicenseManager.swift. Local purchase testing uses DesktopRecord/Products.storekit (already wired into the Run scheme).
- macOS 14.0+
- Xcode 15+
- Screen Recording & Accessibility permissions
git clone https://github.com/your-username/DesktopRecord.git
cd DesktopRecordGenerate the Xcode project with XcodeGen and open it:
xcodegen generate
open DesktopRecord.xcodeprojThen build and run (⌘R). On first launch, grant Screen Recording permission and relaunch.
xcodebuild test -project DesktopRecord.xcodeproj -scheme DesktopRecord \
-destination 'platform=macOS' CODE_SIGNING_ALLOWED=NO# Public freemium release (enforces the Pro paywall) — this is what ships:
bash scripts/build-release-dmg.sh
# Personal build with Pro permanently unlocked (FORCE_PRO):
bash scripts/build-pro-dmg.shBoth produce a universal (arm64 + x86_64) .app in build/. For public
distribution, sign with a Developer ID and notarize — see
docs/APP_STORE_LISTING.md and
scripts/build-release-dmg.sh for the exact commands.
A static Next.js marketing site lives in landing/:
cd landing
npm install
npm run build # static export to landing/outThe Download buttons serve landing/public/DesktopRecord.dmg; replace that file
with a freshly notarized release before deploying.
| Category | Technology |
|---|---|
| Language | Swift 5.9 |
| UI | SwiftUI |
| OCR | Apple Vision Framework |
| Database | SQLite |
| Build | XcodeGen (project.yml) |
| Platform | macOS 14.0+ |
DesktopRecord/
├── DesktopRecord/ # macOS app source
│ ├── App/ # App entry point + AppDelegate
│ ├── Models/ # CaptureRecord, AppInfo, UserSettings
│ ├── Services/ # CaptureEngine, OCRService, SearchEngine,
│ │ # DatabaseManager (SQLite/FTS5), LicenseManager
│ │ # (StoreKit 2), Privacy/Retention/Storage managers
│ ├── ViewModels/ # Timeline / Search / Analytics view models
│ ├── Views/ # SwiftUI views (Timeline, Search, Analytics,
│ │ # Settings, Onboarding, MenuBar)
│ ├── Utilities/ # Constants & helpers
│ ├── Products.storekit # Local StoreKit config for paywall testing
│ └── Info.plist / *.entitlements
├── DesktopRecordTests/ # XCTest unit tests (pure logic)
├── scripts/
│ ├── build-release-dmg.sh # Public freemium DMG (ships to users)
│ └── build-pro-dmg.sh # Personal Pro-unlocked DMG (FORCE_PRO)
├── docs/APP_STORE_LISTING.md# App Store / release marketing copy
├── landing/ # Next.js static marketing site + privacy policy
└── project.yml # XcodeGen configuration
MIT License © 2025 Mark Santos

