[swift] Swift에서 카메라로 바코드 및 QR 코드 인식하기

Swift를 사용하여 iOS 앱을 개발 중이고, 카메라를 사용하여 바코드 또는 QR 코드를 스캔하고 싶다면, AVFoundation 프레임워크를 사용하여 간단하게 구현할 수 있습니다.

1. AVFoundation 프레임워크를 사용하여 카메라 설정

먼저 Info.plist 파일에 카메라 권한을 요청하는 키를 추가해야 합니다. NSCameraUsageDescription 키를 추가하고 사용자에게 보여줄 권한 요청 메시지를 값으로 설정합니다.

<key>NSCameraUsageDescription</key>
<string>카메라를 사용하여 바코드 및 QR 코드를 스캔합니다.</string>

그런 다음, AVFoundation 프레임워크를 import하고, AVCaptureSession, AVCaptureDeviceInput, AVCaptureMetadataOutput 등을 사용하여 카메라를 설정합니다.

import AVFoundation

let session = AVCaptureSession()

guard let captureDevice = AVCaptureDevice.default(for: .video) else { return }

do {
    let input = try AVCaptureDeviceInput(device: captureDevice)
    session.addInput(input)
} catch {
    print(error.localizedDescription)
}

let output = AVCaptureMetadataOutput()
session.addOutput(output)
output.setMetadataObjectsDelegate(self, queue: DispatchQueue.main)
output.metadataObjectTypes = [.upce, .code39, .code39Mod43, .code93, .code128, .ean8, .ean13, .aztec, .pdf417, .qr, .interleaved2of5, .itf14, .dataMatrix]

2. 바코드 및 QR 코드 인식

카메라가 올바르게 설정되면, 바코드 및 QR 코드를 인식할 수 있습니다. AVCaptureMetadataOutputObjectsDelegate 프로토콜을 채택하여 metadataOutput 함수를 구현하여 감지된 메타데이터를 가져올 수 있습니다.

extension YourViewController: AVCaptureMetadataOutputObjectsDelegate {
    func metadataOutput(_ output: AVCaptureMetadataOutput, didOutput metadataObjects: [AVMetadataObject], from connection: AVCaptureConnection) {
        for metadata in metadataObjects {
            guard let readableObject = metadata as? AVMetadataMachineReadableCodeObject else { continue }
            guard let stringValue = readableObject.stringValue else { continue }
            
            print(stringValue)
        }
    }
}

3. UI 요소 추가

마지막으로, 인식된 바코드 및 QR 코드를 사용자에게 표시하거나 처리하기 위해 필요한 UI 요소를 추가합니다. 여기에는 결과를 나타내거나 다른 작업을 수행하는 코드가 포함될 수 있습니다.

Swift를 사용하여 카메라로 바코드 및 QR 코드를 인식하는 방법을 설명했습니다. 이제 해당 기능을 사용하여 사용자가 편리하게 데이터를 입력하고 처리할 수 있는 기능을 구현할 수 있습니다.