diff --git a/Accelerometer.xcodeproj/project.pbxproj b/Accelerometer.xcodeproj/project.pbxproj index 0abacfb..1e2d100 100644 --- a/Accelerometer.xcodeproj/project.pbxproj +++ b/Accelerometer.xcodeproj/project.pbxproj @@ -940,7 +940,7 @@ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 1; + CURRENT_PROJECT_VERSION = 2; DEVELOPMENT_ASSET_PATHS = "\"Accelerometer/Preview Content\""; DEVELOPMENT_TEAM = 3HG9ZBM8AV; ENABLE_PREVIEWS = YES; @@ -974,7 +974,7 @@ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 1; + CURRENT_PROJECT_VERSION = 2; DEVELOPMENT_ASSET_PATHS = "\"Accelerometer/Preview Content\""; DEVELOPMENT_TEAM = 3HG9ZBM8AV; ENABLE_PREVIEWS = YES; diff --git a/Accelerometer.xcodeproj/xcshareddata/xcschemes/Accelerometer.xcscheme b/Accelerometer.xcodeproj/xcshareddata/xcschemes/Accelerometer.xcscheme new file mode 100644 index 0000000..6dd9635 --- /dev/null +++ b/Accelerometer.xcodeproj/xcshareddata/xcschemes/Accelerometer.xcscheme @@ -0,0 +1,100 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Accelerometer/Other/PreviewUtils.swift b/Accelerometer/Other/PreviewUtils.swift index 2f0c543..bba4655 100644 --- a/Accelerometer/Other/PreviewUtils.swift +++ b/Accelerometer/Other/PreviewUtils.swift @@ -213,4 +213,3 @@ struct PreviewUtils { static let gravityTestRecording = recordingWithType(.gravity, duration: 60) } #endif - diff --git a/Accelerometer/Recordings/Charts/RecordingBigChartView.swift b/Accelerometer/Recordings/Charts/RecordingBigChartView.swift index c74ede5..3b78aa3 100644 --- a/Accelerometer/Recordings/Charts/RecordingBigChartView.swift +++ b/Accelerometer/Recordings/Charts/RecordingBigChartView.swift @@ -17,12 +17,13 @@ struct RecordingBigChartView: View { measurementType: measurementType, style: .big ) - .padding(.vertical) + .padding() .navigationTitle(measurementType.name.capitalized) .navigationBarTitleDisplayMode(.inline) } } +#if DEBUG struct RecordingBigChartView_Previews: PreviewProvider { static var previews: some View { Group { @@ -44,3 +45,4 @@ struct RecordingBigChartView_Previews: PreviewProvider { } } } +#endif diff --git a/Accelerometer/Recordings/Charts/RecordingChartContainerView.swift b/Accelerometer/Recordings/Charts/RecordingChartContainerView.swift index bab8d14..1cd5b73 100644 --- a/Accelerometer/Recordings/Charts/RecordingChartContainerView.swift +++ b/Accelerometer/Recordings/Charts/RecordingChartContainerView.swift @@ -196,6 +196,7 @@ struct RecordingChartContainerView: View { // MARK: - Previews +#if DEBUG struct RecordingChartContainerView_Previews: PreviewProvider { static let recording = PreviewUtils.mediumRecording static let type = measurementType(from: recording) @@ -225,3 +226,4 @@ struct RecordingChartContainerView_Previews: PreviewProvider { recording.sortedMeasurementTypes.first ?? .acceleration } } +#endif diff --git a/Accelerometer/Recordings/Charts/RecordingSmallChartView.swift b/Accelerometer/Recordings/Charts/RecordingSmallChartView.swift index cc0074b..06072e9 100644 --- a/Accelerometer/Recordings/Charts/RecordingSmallChartView.swift +++ b/Accelerometer/Recordings/Charts/RecordingSmallChartView.swift @@ -28,6 +28,7 @@ struct RecordingSmallChartView: View { // MARK: - Previews +#if DEBUG struct RecordingSmallChartView_Previews: PreviewProvider { static var sampleRecordings: [Recording] = [ @@ -55,3 +56,4 @@ struct RecordingSmallChartView_Previews: PreviewProvider { } } } +#endif diff --git a/Accelerometer/Recordings/NewRecordingView.swift b/Accelerometer/Recordings/NewRecordingView.swift index ee85aa1..dba914c 100644 --- a/Accelerometer/Recordings/NewRecordingView.swift +++ b/Accelerometer/Recordings/NewRecordingView.swift @@ -74,7 +74,7 @@ struct NewRecordingView: View { .controlSize(.large) .tint(noneSelected ? .gray : .accentColor) .disabled(noneSelected) - .padding(.horizontal) + .padding() .animation(.easeInOut, value: noneSelected) } .navigationTitle("New recording") diff --git a/Accelerometer/Recordings/Recorder.swift b/Accelerometer/Recordings/Recorder.swift index 82676cf..0ef5db2 100644 --- a/Accelerometer/Recordings/Recorder.swift +++ b/Accelerometer/Recordings/Recorder.swift @@ -8,6 +8,7 @@ import DequeModule import Combine import SwiftUI +import AVFoundation @MainActor class Recorder: ObservableObject { @@ -30,6 +31,8 @@ class Recorder: ObservableObject { private let disableIdleTimer = true private var subscriptions: [AnyCancellable] = [] + private var audioPlayer: AVAudioPlayer? + init(measurer: Measurer, settings: Settings) { self.measurer = measurer self.settings = settings @@ -40,6 +43,8 @@ class Recorder: ObservableObject { Task { await watchFreeSpace() } + + configureAudioSession() } var recordingInProgress: Bool { @@ -69,6 +74,8 @@ class Recorder: ObservableObject { objectWillChange.send() } + + startSilentAudioLoop() } } @@ -107,6 +114,8 @@ class Recorder: ObservableObject { subscriptions.removeAll() objectWillChange.send() } + + stopSilentAudioLoop() } } @@ -201,6 +210,42 @@ class Recorder: ObservableObject { return hasEnoughMemory } + // MARK: - Audio control + + private func configureAudioSession() { + let session = AVAudioSession.sharedInstance() + do { + try session.setCategory(.playback, options: [.mixWithOthers]) + try session.setMode(.default) + try session.setActive(true) + } catch { + print("Audio session setup failed:", error) + } + } + + + private func startSilentAudioLoop() { + guard audioPlayer == nil else { return } + if let url = Bundle.main.url(forResource: "silence", withExtension: "mp3") { + do { + let player = try AVAudioPlayer(contentsOf: url) + player.numberOfLoops = -1 + player.volume = 0 + player.play() + audioPlayer = player + } catch { + print("Failed to start silent audio:", error) + } + } + } + + private func stopSilentAudioLoop() { + audioPlayer?.stop() + audioPlayer = nil + } + + // MARK: - Debug + #if (DEBUG) func createDebugSamples() { Task { diff --git a/Accelerometer/Recordings/RecordingSummaryView.swift b/Accelerometer/Recordings/RecordingSummaryView.swift index 45807b3..4e118fd 100644 --- a/Accelerometer/Recordings/RecordingSummaryView.swift +++ b/Accelerometer/Recordings/RecordingSummaryView.swift @@ -50,7 +50,7 @@ struct RecordingSummaryView: View { .name .capitalizingFirstLetter() ) - .font(.headline) + .font(.headline) RecordingSmallChartView( recording: recording, measurementType: type @@ -129,7 +129,7 @@ struct RecordingSummaryView: View { isLoading = false } } - + private func export(type: MeasurementType) { guard !exportLoading, let recording = fullRecording else { return } exportLoading = true @@ -201,6 +201,7 @@ struct FileDocumentWrapper: FileDocument { // MARK: - Previews +#if DEBUG struct RecordingSummaryView_Previews: PreviewProvider { static let settings = Settings() @@ -251,3 +252,4 @@ struct RecordingSummaryView_Previews: PreviewProvider { .preferredColorScheme(.dark) } } +#endif diff --git a/Accelerometer/Settings/AlwaysNotEnoughMemoryView.swift b/Accelerometer/Settings/AlwaysNotEnoughMemoryView.swift index 2978f03..1f13ce4 100644 --- a/Accelerometer/Settings/AlwaysNotEnoughMemoryView.swift +++ b/Accelerometer/Settings/AlwaysNotEnoughMemoryView.swift @@ -7,6 +7,7 @@ import SwiftUI +#if DEBUG struct AlwaysNotEnoughMemoryView: View { @EnvironmentObject var settings: Settings @@ -34,3 +35,4 @@ struct AlwaysNotEnoughMemoryViewPreviews: PreviewProvider { .environmentObject(Settings()) } } +#endif diff --git a/Accelerometer/Settings/AnimationsView.swift b/Accelerometer/Settings/AnimationsView.swift index 07cebbb..12287d7 100644 --- a/Accelerometer/Settings/AnimationsView.swift +++ b/Accelerometer/Settings/AnimationsView.swift @@ -7,6 +7,7 @@ import SwiftUI +#if DEBUG struct AnimationsView: View { @EnvironmentObject var settings: Settings @@ -38,3 +39,4 @@ struct AnimationsViewPreviews: PreviewProvider { .environmentObject(Settings()) } } +#endif diff --git a/Accelerometer/Settings/DebugSamplesView.swift b/Accelerometer/Settings/DebugSamplesView.swift index f4e38a8..b1e5ed4 100644 --- a/Accelerometer/Settings/DebugSamplesView.swift +++ b/Accelerometer/Settings/DebugSamplesView.swift @@ -7,6 +7,7 @@ import SwiftUI +#if DEBUG struct DebugSamplesView: View { @EnvironmentObject var settings: Settings @@ -33,4 +34,4 @@ struct DebugSamplesViewPreviews: PreviewProvider { .environmentObject(Settings()) } } - +#endif