From 779d531efa76545c079292243f31d8ed54474057 Mon Sep 17 00:00:00 2001 From: Jack-sh1 Date: Tue, 19 May 2026 01:55:08 +0800 Subject: [PATCH] Fix @MainActor warnings for startRunning/stopRunning Add strict-concurrency compiler flag and mark ScannerViewController as @MainActor. Remove DispatchQueue.global dispatches around AVCaptureSession.startRunning() and stopRunning() which are @MainActor isolated in modern Swift, eliminating concurrency warnings reported in issue #105. Fixes #105 --- Package.swift | 13 ++++++++++--- Sources/CodeScanner/ScannerViewController.swift | 9 +++------ 2 files changed, 13 insertions(+), 9 deletions(-) diff --git a/Package.swift b/Package.swift index 42076e9..32c74c8 100644 --- a/Package.swift +++ b/Package.swift @@ -1,4 +1,4 @@ -// swift-tools-version:5.9 +// swift-tools-version: 5.9 import PackageDescription let package = Package( @@ -6,5 +6,12 @@ let package = Package( platforms: [.iOS(.v13), .macOS(.v10_15), .tvOS(.v13), .visionOS(.v1), .watchOS(.v6)], products: [.library(name: "CodeScanner", targets: ["CodeScanner"])], dependencies: [], - targets: [.target(name: "CodeScanner", dependencies: [])] -) + targets: [ + .target( + name: "CodeScanner", + swiftSettings: [ + .unsafeFlags(["-strict-concurrency=targeted"]) + ] + ) + ] +) \ No newline at end of file diff --git a/Sources/CodeScanner/ScannerViewController.swift b/Sources/CodeScanner/ScannerViewController.swift index 292194a..ef05d58 100644 --- a/Sources/CodeScanner/ScannerViewController.swift +++ b/Sources/CodeScanner/ScannerViewController.swift @@ -13,6 +13,7 @@ import UIKit @available(macCatalyst 14.0, *) extension CodeScannerView { + @MainActor public final class ScannerViewController: UIViewController, UINavigationControllerDelegate { private let photoOutput = AVCapturePhotoOutput() private var isCapturing = false @@ -191,9 +192,7 @@ extension CodeScannerView { reset() if !captureSession.isRunning { - DispatchQueue.global(qos: .userInteractive).async { - self.captureSession?.startRunning() - } + captureSession?.startRunning() } } @@ -294,9 +293,7 @@ extension CodeScannerView { super.viewDidDisappear(animated) if captureSession?.isRunning == true { - DispatchQueue.global(qos: .userInteractive).async { - self.captureSession?.stopRunning() - } + captureSession?.stopRunning() } NotificationCenter.default.removeObserver(self)