From 02c1dab21bf1805c058f08e30d5e52d6ff96df3b Mon Sep 17 00:00:00 2001 From: Kevin Cao Date: Fri, 4 Oct 2019 14:50:16 +0800 Subject: [PATCH 1/3] fix memory leaks --- Sources/QRCodeReader.swift | 9 ++++++--- Sources/QRCodeReaderViewController.swift | 8 ++++---- 2 files changed, 10 insertions(+), 7 deletions(-) diff --git a/Sources/QRCodeReader.swift b/Sources/QRCodeReader.swift index 9633a0d..77e14b1 100644 --- a/Sources/QRCodeReader.swift +++ b/Sources/QRCodeReader.swift @@ -130,7 +130,8 @@ public final class QRCodeReader: NSObject, AVCaptureMetadataOutputObjectsDelegat super.init() - sessionQueue.async { + sessionQueue.async { [weak self] in + guard let self = self else { return } self.configureDefaultComponents(withCaptureDevicePosition: captureDevicePosition) } } @@ -199,7 +200,8 @@ public final class QRCodeReader: NSObject, AVCaptureMetadataOutputObjectsDelegat *Notes: if `stopScanningWhenCodeIsFound` is sets to true (default behaviour), each time the scanner found a code it calls the `stopScanning` method.* */ public func startScanning() { - sessionQueue.async { + sessionQueue.async { [weak self] in + guard let self = self else { return } guard !self.session.isRunning else { return } self.session.startRunning() @@ -212,7 +214,8 @@ public final class QRCodeReader: NSObject, AVCaptureMetadataOutputObjectsDelegat /// Stops scanning the codes. public func stopScanning() { - sessionQueue.async { + sessionQueue.async { [weak self] in + guard let self = self else { return } guard self.session.isRunning else { return } self.session.stopRunning() diff --git a/Sources/QRCodeReaderViewController.swift b/Sources/QRCodeReaderViewController.swift index d304e59..7bf032d 100644 --- a/Sources/QRCodeReaderViewController.swift +++ b/Sources/QRCodeReaderViewController.swift @@ -64,9 +64,9 @@ public class QRCodeReaderViewController: UIViewController { view.backgroundColor = .black - codeReader.didFindCode = { [weak self] resultAsObject in + codeReader.didFindCode = { [weak self, weak builder] resultAsObject in if let weakSelf = self { - if let qrv = builder.readerView.displayable as? QRCodeReaderView { + if let qrv = builder?.readerView.displayable as? QRCodeReaderView { qrv.addGreenBorder() } weakSelf.completionBlock?(resultAsObject) @@ -74,8 +74,8 @@ public class QRCodeReaderViewController: UIViewController { } } - codeReader.didFailDecoding = { - if let qrv = builder.readerView.displayable as? QRCodeReaderView { + codeReader.didFailDecoding = { [weak builder] in + if let qrv = builder?.readerView.displayable as? QRCodeReaderView { qrv.addRedBorder() } } From e021d2767cff4332f8584f97172b11971d027e14 Mon Sep 17 00:00:00 2001 From: Kevin Cao Date: Tue, 6 May 2025 17:07:59 +0800 Subject: [PATCH 2/3] Update Package.swift --- Package.swift | 3 +++ 1 file changed, 3 insertions(+) diff --git a/Package.swift b/Package.swift index 74ee7a9..2e928b6 100644 --- a/Package.swift +++ b/Package.swift @@ -3,6 +3,9 @@ import PackageDescription let package = Package( name: "QRCodeReader", + platforms: [ + .iOS(.v16) + ], products: [ .library(name: "QRCodeReader", targets: ["QRCodeReader"]), ], From 7add89f70b4972b7c17e48c3a23c5415403a54cf Mon Sep 17 00:00:00 2001 From: Kevin Cao Date: Tue, 6 May 2025 18:51:03 +0800 Subject: [PATCH 3/3] update package --- Package.swift | 29 +++++++++---------- QRCodeReader.swift.podspec | 2 +- Sources/{ => QRCodeReader}/QRCodeReader.swift | 0 .../QRCodeReaderResult.swift | 0 .../{ => QRCodeReader}/QRCodeReaderView.swift | 0 .../QRCodeReaderViewContainer.swift | 0 .../QRCodeReaderViewController.swift | 0 .../QRCodeReaderViewControllerBuilder.swift | 0 .../QRCodeReaderViewControllerDelegate.swift | 0 .../ReaderOverlayView.swift | 0 .../SwitchCameraButton.swift | 0 .../ToggleTorchButton.swift | 0 12 files changed, 15 insertions(+), 16 deletions(-) rename Sources/{ => QRCodeReader}/QRCodeReader.swift (100%) rename Sources/{ => QRCodeReader}/QRCodeReaderResult.swift (100%) rename Sources/{ => QRCodeReader}/QRCodeReaderView.swift (100%) rename Sources/{ => QRCodeReader}/QRCodeReaderViewContainer.swift (100%) rename Sources/{ => QRCodeReader}/QRCodeReaderViewController.swift (100%) rename Sources/{ => QRCodeReader}/QRCodeReaderViewControllerBuilder.swift (100%) rename Sources/{ => QRCodeReader}/QRCodeReaderViewControllerDelegate.swift (100%) rename Sources/{ => QRCodeReader}/ReaderOverlayView.swift (100%) rename Sources/{ => QRCodeReader}/SwitchCameraButton.swift (100%) rename Sources/{ => QRCodeReader}/ToggleTorchButton.swift (100%) diff --git a/Package.swift b/Package.swift index 2e928b6..f6ab473 100644 --- a/Package.swift +++ b/Package.swift @@ -1,19 +1,18 @@ -// swift-tools-version:5.0 +// swift-tools-version:5.9 import PackageDescription let package = Package( - name: "QRCodeReader", - platforms: [ - .iOS(.v16) - ], - products: [ - .library(name: "QRCodeReader", targets: ["QRCodeReader"]), - ], - targets: [ - .target( - name: "QRCodeReader", - dependencies: [], - path: "Sources"), - ] + name: "QRCodeReader", + platforms: [ + .iOS(.v16) + ], + products: [ + .library(name: "QRCodeReader", targets: ["QRCodeReader"]) + ], + targets: [ + .target( + name: "QRCodeReader", + dependencies: [], + ) + ] ) - diff --git a/QRCodeReader.swift.podspec b/QRCodeReader.swift.podspec index 26c9668..bb19361 100644 --- a/QRCodeReader.swift.podspec +++ b/QRCodeReader.swift.podspec @@ -13,6 +13,6 @@ Pod::Spec.new do |s| s.ios.deployment_target = '8.0' s.framework = 'AVFoundation' - s.source_files = 'Sources/*.swift' + s.source_files = 'Sources/QRCodeReader/*.swift' s.requires_arc = true end diff --git a/Sources/QRCodeReader.swift b/Sources/QRCodeReader/QRCodeReader.swift similarity index 100% rename from Sources/QRCodeReader.swift rename to Sources/QRCodeReader/QRCodeReader.swift diff --git a/Sources/QRCodeReaderResult.swift b/Sources/QRCodeReader/QRCodeReaderResult.swift similarity index 100% rename from Sources/QRCodeReaderResult.swift rename to Sources/QRCodeReader/QRCodeReaderResult.swift diff --git a/Sources/QRCodeReaderView.swift b/Sources/QRCodeReader/QRCodeReaderView.swift similarity index 100% rename from Sources/QRCodeReaderView.swift rename to Sources/QRCodeReader/QRCodeReaderView.swift diff --git a/Sources/QRCodeReaderViewContainer.swift b/Sources/QRCodeReader/QRCodeReaderViewContainer.swift similarity index 100% rename from Sources/QRCodeReaderViewContainer.swift rename to Sources/QRCodeReader/QRCodeReaderViewContainer.swift diff --git a/Sources/QRCodeReaderViewController.swift b/Sources/QRCodeReader/QRCodeReaderViewController.swift similarity index 100% rename from Sources/QRCodeReaderViewController.swift rename to Sources/QRCodeReader/QRCodeReaderViewController.swift diff --git a/Sources/QRCodeReaderViewControllerBuilder.swift b/Sources/QRCodeReader/QRCodeReaderViewControllerBuilder.swift similarity index 100% rename from Sources/QRCodeReaderViewControllerBuilder.swift rename to Sources/QRCodeReader/QRCodeReaderViewControllerBuilder.swift diff --git a/Sources/QRCodeReaderViewControllerDelegate.swift b/Sources/QRCodeReader/QRCodeReaderViewControllerDelegate.swift similarity index 100% rename from Sources/QRCodeReaderViewControllerDelegate.swift rename to Sources/QRCodeReader/QRCodeReaderViewControllerDelegate.swift diff --git a/Sources/ReaderOverlayView.swift b/Sources/QRCodeReader/ReaderOverlayView.swift similarity index 100% rename from Sources/ReaderOverlayView.swift rename to Sources/QRCodeReader/ReaderOverlayView.swift diff --git a/Sources/SwitchCameraButton.swift b/Sources/QRCodeReader/SwitchCameraButton.swift similarity index 100% rename from Sources/SwitchCameraButton.swift rename to Sources/QRCodeReader/SwitchCameraButton.swift diff --git a/Sources/ToggleTorchButton.swift b/Sources/QRCodeReader/ToggleTorchButton.swift similarity index 100% rename from Sources/ToggleTorchButton.swift rename to Sources/QRCodeReader/ToggleTorchButton.swift