From 45ca88b2d8abc85a0625b78eea5b3a75798a1b25 Mon Sep 17 00:00:00 2001 From: Andrey Pantyuhin Date: Fri, 3 Oct 2025 05:42:08 +0300 Subject: [PATCH 1/5] Fix release build --- .../xcschemes/Accelerometer.xcscheme | 100 ++++++++++++++++++ Accelerometer/Other/PreviewUtils.swift | 1 - .../Charts/RecordingBigChartView.swift | 2 + .../Charts/RecordingChartContainerView.swift | 2 + .../Charts/RecordingSmallChartView.swift | 2 + .../Recordings/RecordingSummaryView.swift | 6 +- .../Settings/AlwaysNotEnoughMemoryView.swift | 2 + Accelerometer/Settings/AnimationsView.swift | 2 + Accelerometer/Settings/DebugSamplesView.swift | 3 +- 9 files changed, 116 insertions(+), 4 deletions(-) create mode 100644 Accelerometer.xcodeproj/xcshareddata/xcschemes/Accelerometer.xcscheme 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..a1cb169 100644 --- a/Accelerometer/Recordings/Charts/RecordingBigChartView.swift +++ b/Accelerometer/Recordings/Charts/RecordingBigChartView.swift @@ -23,6 +23,7 @@ struct RecordingBigChartView: View { } } +#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/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 From f4a111e112739ab99bfc8f59c75407093e17a67b Mon Sep 17 00:00:00 2001 From: Andrey Pantyuhin Date: Fri, 3 Oct 2025 14:06:21 +0300 Subject: [PATCH 2/5] Silent audio session --- Accelerometer/Recordings/Recorder.swift | 45 +++++++++++++++++++++++++ 1 file changed, 45 insertions(+) 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 { From 46969b247b873d92cb767a1ba4643e3d7201bcc3 Mon Sep 17 00:00:00 2001 From: Andrey Pantyuhin Date: Fri, 3 Oct 2025 14:06:42 +0300 Subject: [PATCH 3/5] RecordingBigChartView paddings --- Accelerometer/Recordings/Charts/RecordingBigChartView.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Accelerometer/Recordings/Charts/RecordingBigChartView.swift b/Accelerometer/Recordings/Charts/RecordingBigChartView.swift index a1cb169..3b78aa3 100644 --- a/Accelerometer/Recordings/Charts/RecordingBigChartView.swift +++ b/Accelerometer/Recordings/Charts/RecordingBigChartView.swift @@ -17,7 +17,7 @@ struct RecordingBigChartView: View { measurementType: measurementType, style: .big ) - .padding(.vertical) + .padding() .navigationTitle(measurementType.name.capitalized) .navigationBarTitleDisplayMode(.inline) } From 8e03a4d15ce169b0dd68126b758d0ded52abe9f6 Mon Sep 17 00:00:00 2001 From: Andrey Pantyuhin Date: Fri, 3 Oct 2025 14:10:06 +0300 Subject: [PATCH 4/5] New recording paddings --- Accelerometer/Recordings/NewRecordingView.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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") From a49a2a2d9b10e73b7306218f09f646bb19cb36b3 Mon Sep 17 00:00:00 2001 From: Andrey Pantyuhin Date: Fri, 3 Oct 2025 16:49:48 +0300 Subject: [PATCH 5/5] Version 0.2.0 build 2 --- Accelerometer.xcodeproj/project.pbxproj | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) 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;