v1.4 Crash Reports: What We Found and What We're Fixing

Overview

v1.4 brought Cloud Sync, AI Optimization, GPS tagging — a lot of new features landed at once. More people started using 1Take daily, and that's when Firebase Crashlytics started lighting up.

We're grateful for every crash report. They show us exactly what to fix and where. A new update is coming soon with all of these fixes addressed. Here's what we found.


What We Found

Memory Pressure After Recording

After stopping a recording, the AI analyzer and audio converter were running at the same time. A 5-minute stereo recording at 48 kHz loads roughly 115 MB into memory. Running analysis and conversion simultaneously pushed peak usage past 345 MB — enough for iOS to start killing system framework allocations, causing crashes inside the Network and Metal frameworks.

Fix: Serialized the pipeline — analysis finishes first, then conversion starts. Also optimized the analyzer to reuse a shared mono buffer instead of allocating twice.

AudioPlayer KeyPath Crash

Swift's @Observable macro was auto-generating KeyPath tracking for internal AVAudioEngine properties. When the player accessed these during playback, the Swift runtime crashed inside _swift_getKeyPath.

Fix: Marked all internal audio properties as @ObservationIgnored — they have no UI relevance and should never trigger SwiftUI observation.

Out of Memory on Long Recordings

The spectral noise reducer was loading the entire audio file into memory at once. A 10-minute recording equals roughly 500 MB. iOS terminated the app.

Fix: Rewrote the processor to use chunked streaming — processing 10-second windows at a time. Peak memory dropped from 500 MB to around 20 MB, regardless of recording length.

AVAudioEngine Format Crash

On some devices, AVAudioEngine.connect() throws an Objective-C NSException when audio hardware hasn't finished initializing. Swift's do/catch can't intercept NSException, so the crash was uncatchable at the Swift layer.

Fix: Added a pre-flight format validation guard, plus a purpose-built Objective-C exception catcher wrapper to intercept the exception before it propagates.


What's Next

All of these fixes are in v1.4.2, which is being submitted to App Store review now. If you've experienced any of these crashes, the update should resolve them.

Keep the crash reports coming — they make 1Take better for everyone.