Summary
The recording pipeline currently stops appending when AVAssetWriter is no longer .writing, but it does not reliably surface writer failure details back to the user.
Why this matters
Disk-full, permission, codec, or output-path failures can result in partial or missing recordings that appear to stop normally. For a capture app, silent save failures are high-severity.
Observed gaps
startRecording() sets up the writer but does not validate later writer failure states in a user-visible way
captureOutput(...) returns early when writer.status != .writing
finishWriting {} does not inspect writer.status or writer.error
lastError is not updated on finish failure
Suggested direction
- Inspect
writer.status and writer.error during recording and during finishWriting
- Surface a clear user-visible error when finalize/save fails
- Consider rejecting stop completion until the writer finishes with success/failure
- Add targeted logging for output path, file type, and writer error details
Relevant code
Capture/CaptureManager.swift lines 421-481
Capture/CaptureManager.swift lines 623-654
Capture/CaptureManager.swift lines 512-523
Acceptance criteria
- Writer failures produce a user-visible error
- Finalization success/failure is known at stop time
- Disk/output failures are diagnosable from both UI and logs
Summary
The recording pipeline currently stops appending when
AVAssetWriteris no longer.writing, but it does not reliably surface writer failure details back to the user.Why this matters
Disk-full, permission, codec, or output-path failures can result in partial or missing recordings that appear to stop normally. For a capture app, silent save failures are high-severity.
Observed gaps
startRecording()sets up the writer but does not validate later writer failure states in a user-visible waycaptureOutput(...)returns early whenwriter.status != .writingfinishWriting {}does not inspectwriter.statusorwriter.errorlastErroris not updated on finish failureSuggested direction
writer.statusandwriter.errorduring recording and duringfinishWritingRelevant code
Capture/CaptureManager.swiftlines 421-481Capture/CaptureManager.swiftlines 623-654Capture/CaptureManager.swiftlines 512-523Acceptance criteria