diff --git a/Package.swift b/Package.swift index fdee614..bc83bd3 100644 --- a/Package.swift +++ b/Package.swift @@ -7,25 +7,22 @@ let package = Package( name: "SharkCardScan", platforms: [ .iOS(.v13)], products: [ - // Products define the executables and libraries a package produces, and make them visible to other packages. .library( name: "SharkCardScan", targets: ["SharkCardScan"]), ], dependencies: [ - // Dependencies declare other packages that this package depends on. - // .package(url: /* package url */, from: "1.0.0"), dependencies: [ - .package( + .package( name: "SharkUtils", url: "https://github.com/gymshark/ios-shark-utils.git", .exact("1.0.5")), ], targets: [ - // Targets are the basic building blocks of a package. A target can define a module or a test suite. - // Targets can depend on other targets in this package, and on products in packages this package depends on. .target( name: "SharkCardScan", - dependencies: ["SharkUtils"]), + dependencies: ["SharkUtils"], + path: "Sources", + resources: [.copy("Resources/PrivacyInfo.xcprivacy")]), .testTarget( name: "SharkCardScanTests", dependencies: ["SharkCardScan"]), diff --git a/Sources/Resources/PrivacyInfo.xcprivacy b/Sources/Resources/PrivacyInfo.xcprivacy new file mode 100644 index 0000000..c812676 --- /dev/null +++ b/Sources/Resources/PrivacyInfo.xcprivacy @@ -0,0 +1,35 @@ + + + + + NSPrivacyCollectedDataTypes + + + NSPrivacyCollectedDataType + NSPrivacyCollectedDataTypeName + NSPrivacyCollectedDataTypeLinked + + NSPrivacyCollectedDataTypeTracking + + NSPrivacyCollectedDataTypePurposes + + NSPrivacyCollectedDataTypePurposeAppFunctionality + + + + NSPrivacyCollectedDataType + NSPrivacyCollectedDataTypePaymentInfo + NSPrivacyCollectedDataTypeLinked + + NSPrivacyCollectedDataTypeTracking + + NSPrivacyCollectedDataTypePurposes + + NSPrivacyCollectedDataTypePurposeAppFunctionality + + + + NSPrivacyTracking + + + diff --git a/Sources/SharkCardScan/CardScanViewModel.swift b/Sources/SharkCardScan/CardScanViewModel.swift index 55c8f4c..1438522 100644 --- a/Sources/SharkCardScan/CardScanViewModel.swift +++ b/Sources/SharkCardScan/CardScanViewModel.swift @@ -29,6 +29,7 @@ public class CardScanViewModel { private let cameraAccess: CameraAccessProtocol private let cameraStream: PixelBufferStream private let cardReader: CardScannerProtocol + private let dismissHandler: (() -> Void)? private let noPermissionAction: () -> Void var didDismiss: (() -> Void)? private let successHandler: (CardScannerResponse) -> Void @@ -51,13 +52,15 @@ public class CardScanViewModel { } public init(cameraAccess: CameraAccessProtocol = CameraAccess(), - cameraStream: PixelBufferStream = CameraPixelBufferStream(), - cardReader: CardScannerProtocol = CardScanner(), - noPermissionAction: @escaping () -> Void, - successHandler: @escaping (CardScannerResponse) -> Void) { + cameraStream: PixelBufferStream = CameraPixelBufferStream(), + cardReader: CardScannerProtocol = CardScanner(), + dismissHandler: (() -> Void)? = nil, + noPermissionAction: @escaping () -> Void, + successHandler: @escaping (CardScannerResponse) -> Void) { self.cameraAccess = cameraAccess self.cameraStream = cameraStream self.cardReader = cardReader + self.dismissHandler = dismissHandler self.noPermissionAction = noPermissionAction self.successHandler = successHandler cameraStream.output = cardReader.read(buffer:orientation:) @@ -85,6 +88,7 @@ public class CardScanViewModel { func didTapClose() { didDismiss?() + dismissHandler?() } func startCamera() { diff --git a/Sources/SharkCardScan/PixelBufferStream.swift b/Sources/SharkCardScan/PixelBufferStream.swift index 5938f01..551ede5 100644 --- a/Sources/SharkCardScan/PixelBufferStream.swift +++ b/Sources/SharkCardScan/PixelBufferStream.swift @@ -35,15 +35,11 @@ public class CameraPixelBufferStream: NSObject, PixelBufferStream, AVCaptureVide writeSafe.perform { guard runningBacking != newValue else { return } runningBacking = newValue - if newValue { - session.startRunning() - } else { - session.stopRunning() - } + manageAVCaptureSession() } } } - + public override init() { let writeSafe = WriteSafe() self.writeSafe = writeSafe @@ -111,7 +107,17 @@ public class CameraPixelBufferStream: NSObject, PixelBufferStream, AVCaptureVide contentView ]} } - + + private func manageAVCaptureSession() { + if runningBacking { + DispatchQueue + .global(qos: .background) + .async { [weak self] in self?.session.startRunning() } + return + } + session.stopRunning() + } + deinit { running = false } diff --git a/Sources/SharkCardScan/SharkCardScanViewController.swift b/Sources/SharkCardScan/SharkCardScanViewController.swift index 3d73f43..9306008 100644 --- a/Sources/SharkCardScan/SharkCardScanViewController.swift +++ b/Sources/SharkCardScan/SharkCardScanViewController.swift @@ -15,7 +15,7 @@ public class SharkCardScanViewController: UIViewController { private var styling: CardScanStyling private lazy var closeButton = UIButton().with { - $0.setBackgroundImage(UIImage(named: "rounded close"), for: .normal) + $0.setBackgroundImage(UIImage(named: "rounded close", in: Bundle.module, compatibleWith: nil), for: .normal) $0.accessibilityLabel = String(describing: SharkCardScanViewController.self) + "." + "CloseButton" }