Flutter-based screen recording app targeting macOS, iOS, and Android.
macOS: NativeScreenCaptureKitbridge is the primary product path. The app now supports a simplified home screen, permission recovery, target selection (application,full screen,area), audio choice, countdown, pause/resume, recent recordings, saved-folder reveal, editable shortcuts, and detailed runtime logging.iOS: NativeReplayKitrecording is wired into the Flutter app. The mobile UI is intentionally simpler thanmacOS: the main flow isrecord / stop, with permission recovery, countdown, and microphone capture where supported. Recordings are saved into the app'sDocuments/Recordingsdirectory and exposed through Files.Android: NativeMediaProjection+MediaRecorderrecording is wired into the Flutter app. The mobile UI is also simplified torecord / stop, with permission recovery, countdown, localized strings, and a foreground service notification during active capture. Recordings are saved into the app-specific movies directory.- Localization: Flutter
ARBfiles and native strings now coverko,ja,tr,hi,id,vi,th,en,pt_BR,it,es,de,fr,pl,nl,ru, andzh_TWwith localized text instead of English fallback.
- Simplified the main product UX around direct recording instead of a complex dashboard.
- Added a status card, recording timer, explicit stop action, and verbose terminal logging for recording flow diagnostics.
- Added localization coverage across the requested market languages in Flutter
ARBfiles and native Apple/Android string resources. - Added a settings screen, persisted app preferences, and initial locale selection based on the device language when no saved locale exists.
- Added macOS-only power-user features: target choice (
application,full screen,area), audio mode choice, countdown, pause/resume, recent recordings, and editable keyboard shortcuts. - Simplified
iOSandAndroidhome UI to the minimal mobile flow while keeping supported features such as countdown, permission recovery, and start/stop recording. - Confirmed that recording on Apple platforms uses
AVAssetWriterand that Android usesMediaRecorder, rather than bundlingFFmpeg. - Added Flutter ARB localization for the recording UI with
enandko. - Localized native Apple permission descriptions through
InfoPlist.stringson bothmacOSandiOS. - Added native
Localizable.stringsfor Apple-side note/error text. - Added Android native
strings.xmlandvalues-ko/strings.xml. - Updated the permission/setup UI so
Androidprompt-on-startscreen capture is treated correctly instead of looking blocked. - Added Android app-settings fallback for denied microphone permission.
- Added Android foreground service handling for active MediaProjection recording.
- Verified Flutter tests and native platform builds after these changes.
- Wired the native recorder bridges into the Flutter app for
macOS,iOS, andAndroid. - Fixed macOS bridge registration timing to avoid startup
MissingPluginException. - Added widget coverage for startup polling, setup UI, content selection, permission actions, and record/stop flow.
- Full verification earlier on
2026年03月23日:flutter analyze: passedflutter test: passed (54/54at that point)flutter build macos: passedflutter build ios --simulator: passedflutter build apk --debug: passedxcodebuild test -project macos/Runner.xcodeproj -scheme Runner -destination 'platform=macOS': passed
- Additional verification after later UI/flow changes on
2026年03月23日:flutter analyze: passedflutter test: passedflutter build macos: passed
Note:
Later iOS / Android home-screen simplification changes were rechecked with flutter analyze and flutter test, but native mobile builds were not rerun after that final Dart-only pass.
Checked on 2026年06月01日:
flutter analyze: passedflutter test: passed
Native platform builds were not rerun during this latest verification pass.
Verified outputs:
build/macos/Build/Products/Debug/rec.app
build/macos/Build/Products/Release/rec.app
build/ios/iphonesimulator/Runner.app
build/app/outputs/flutter-apk/app-debug.apk
Android release apkis not currently verified in this README flow.- Flutter release builds on Android use the internal
gen_snapshotAOT step. - If you do not want
gen_snapshotto run, avoidflutter build apkrelease mode and useflutter build apk --debuginstead.
- Current codec path is relatively safe compared with bundling
FFmpeg:macOSandiOSuse platformAVAssetWriter, andAndroiduses platformMediaRecorder/MediaProjection. - The project is not release-ready yet for store submission:
- Apple bundle identifiers still use
com.example.rec. - Android
applicationId/namespacestill usecom.example.rec. - Android release signing still points at the debug signing config.
- A production privacy policy link and in-app privacy entry point are still missing.
- App Store
App Privacyand Google PlayData safetydisclosures still need to be completed before submission.
- Apple bundle identifiers still use
- Store metadata must accurately describe platform differences:
macOSis the full-featured desktop recorder.iOSandAndroidare simplified full-screen style recorders and do not match the macOS feature set.
macOSis the closest to BetterCapture and supports native content picking.iOSandAndroidonly support simplified full-screen style recording through their OS recording APIs.iOSandAndroidcannot match BetterCapture's macOS-only features such as per-window capture, menu bar filtering, dock filtering, or Apple-specific desktop capture options.- System permission alerts themselves are still controlled by the OS. The app can localize the usage description text and guide the user into Settings, but it cannot rewrite Apple or Android system button labels.
- Core macOS recording stack into
macos/Runner/RecorderCore/ - Shared recording dashboard and settings UI into
lib/ - macOS permission strings and sandbox entitlements
- Flutter-to-native method channel bridge in
macos/Runner/RecorderBridge.swift - iOS method channel bridge in
ios/Runner/AppDelegate.swift - Android method channel bridge in
android/app/src/main/kotlin/com/example/rec/MainActivity.kt
flutter analyze flutter test xcodebuild test -project macos/Runner.xcodeproj -scheme Runner -destination 'platform=macOS' flutter build macos flutter build ios --simulator --no-codesign flutter build apk --debug
Built macOS app:
build/macos/Build/Products/Release/rec.app
For normal GitHub updates, keep commit history and push a new commit:
git status flutter analyze flutter test git add . git commit -m "Update project" git push
The local working branch is clean-main, and it tracks GitHub main, so a
plain git push updates https://github.com/itjimkr/flutter_free_rec.
Only rewrite the single initial commit when intentionally replacing the public history:
git add .
git commit --amend --no-edit
git push --force-with-lease origin clean-main:mainThe root app does not vendor the upstream BetterCapture source tree. Portions of
the macOS recording stack were adapted from BetterCapture and are attributed in
NOTICE.
Upstream reference:
https://github.com/jsattler/BetterCapture
Rec is released under the MIT License. Portions of the macOS recording stack
were adapted from BetterCapture by Joshua Sattler, also licensed under MIT. See
LICENSE and NOTICE for details.