-
Boundary-stop data loss— fixed in PR #15 -
Stale onLoopTransition can corrupt new recording session— fixed: engine stamps each firedonLoopTransitionwith arecordingGeneration(bumped on everystopRecording, likeplaybackGeneration);handleLoopTransitiondrops the transition if the live generation moved on before its deferred Task ran -
Toggle-off pending-file leak— fixed: toggle-off path now deletes pre-created.cafand resetspendingNextLayerIndex, mirroringstopRecordingcleanup -
Tape loop gap timing drift— fixed: rewrote gap logic to use engine.pause/resume with single asyncAfter timing (3f8fa95, 878d477) -
Library view jittery scroll when VPN blocks AdMob— fixed in a10bc14 -
Library view can only delete one item when AdMob blocked— fixed in e875ed9 -
Playback cut when video ad renders in library/export view— fixed in PR #23: GMA SDK was swapping the shared AVAudioSession to .ambient/.soloAmbient; nowisAudioSessionApplicationManaged = true+ ads muted -
Flaky test suite / RecorderViewModel deinit crash— fixed in PR #24:MainActor.assumeIsolatedin deinit trapped when a background Task dropped the last reference, crashing the test host and randomly failing unrelated tests; nowisolated deinit
-
Upload localized App Store metadata— done 2026-07-09: all 19 store locales (de-DE, ja, es-ES/MX, zh-Hans, ko, hi, fr-FR/CA, pt-BR/PT, it, no, sv, da, tr, id, pl, uk) created on v1.12.0 with name, subtitle, description, keywords, what's-new via asc-mcp - 1.12.x release sequence — 1.12.0 (16 languages + localized store pages) is APPROVED, PENDING_DEVELOPER_RELEASE, holding per decision 2026-07-09. When ready: (1) release 1.12.0 via app_versions_release, (2) create 1.12.1 in ASC (blocked until then), (3) set localized what's-new (bugfix line per locale), (4) archive v1.12.1 tag (has Untitled-name fix d262f99), attach build, submit. Localized media (6 framed screenshots + preview video, all 19 locales) rides along automatically; en-US untouched (PPO test)
- Core Haptics on record/stop — tactile click via Taptic Engine on record start/stop, loop boundary crossings. Sub-ms precision, "real instrument" feel. Needs
.sensoryFeedbackapproach for reliability -
Destructive action styling— shipped in v1.10.1: red foreground on mixer delete button - Duplicate project in library — add duplicate action to swipe menu, accent-colored
- App icon refresh — current icon feels too frowny, needs more inviting/energetic feel
-
Reduce punch-in latency— shipped in v1.10.0: 5ms IO buffer, 256-frame tap buffers, Accelerate DSP, metering off audio thread -
Prevent screen lock during playback— shipped in v1.10.1 -
Always-On Display support (14 Pro+)— shipped: idle timer disabled during both recording and playback - Action Button mapping (15 Pro+) — expose start/stop recording as App Shortcut so users can trigger via Action Button hands-free
-
Tape loop gap— shipped in v1.7.0 -
Import audio— shipped: premium file import as a layer (transcodes to CAF, preserves rate/channels) -
Background audio (playback + recording)— shipped in v1.11.0: UIBackgroundModes audio, NowPlayingManager with lock screen transport controls, interruption handling with playback resume - Dynamic Island / Live Activities — show recording duration and level when backgrounded. Musicians switch to lyrics/chord apps mid-take. Depends on background audio
- Sample rate selection — allow 44.1/48/96 kHz via
setPreferredSampleRate. Main value: let external USB interfaces record at higher rates. Show actual vs requested rate in settings - USB audio interface detection — detect class-compliant device capabilities (available sample rates, input count) and surface in settings
- Input channel selector — let users pick which input channels to record from when an external interface offers more than stereo (currently clamped to first 2 channels)
- Bounce down + 4-track cap — flatten all layers into one, then lower cap from 8 to 4. Build sequentially: bounce-down first, then cap, ship together
-
Record from current playback position— shipped - Adjust mixer levels during recording — open mixer and adjust volumes while recording is live
- Delete layer without stopping recording — detach player node and continue. Needs node-to-layer map
- Quantized loop start — delay recording start until next loop boundary (hardware looper behavior)
-
Looping playback memory optimization— shipped in PR #13: overdub loops stream from disk (queue-ahead scheduleFile), no in-memory PCM per layer - ViewModel integration tests — extract AudioEngineProtocol, test state transitions with mock
- AUv3 plugin hosting — let users load third-party Audio Unit effects (reverb, compression, amp sims) per layer. Huge for musicians but significant implementation
- Non-destructive effects — reverb, delay, EQ per layer via AVAudioUnitEffect nodes. Natural stepping stone toward AUv3
- Spatial Audio monitoring — spatialized panning per layer via head-tracked AirPods Pro. Niche but unique overdubbing experience
- Session recording — record entire live session as one continuous file, separate from layer export
- Clip editing suite — fade in/out, trim edges, slip/reposition. Cohesive musician-mode feature set
- Subsection looping (premium) — draggable waveform markers for loop-in/loop-out
- Tape/analog artifacts — wobble (wow & flutter), tape hiss, speed ramp on record start
- Musician-mode features — metronome/click track, quantize to grid, pan per layer, layer rename, undo last layer
- Localization (major languages)
- iPad and landscape mode overhaul