[swift] 연락처(Contacts) 정보를 이용한 QR코드 스캔 및 추가 기능 구현

이 기술 블로그에서는 Swift를 사용하여 QR코드를 스캔하고 연락처 정보를 추가하는 방법에 대해 설명하겠습니다.

1. QR코드 스캔

QR코드를 스캔하기 위해 AVFoundation 프레임워크를 사용합니다. 먼저, 카메라 접근 권한을 확인하고, 카메라를 통해 QR코드를 인식하도록 구현합니다.

import AVFoundation

class QRScannerViewController: UIViewController, AVCaptureMetadataOutputObjectsDelegate {
    var captureSession: AVCaptureSession!
    var previewLayer: AVCaptureVideoPreviewLayer!

    override func viewDidLoad() {
        super.viewDidLoad()

        let captureDevice = AVCaptureDevice.default(for: .video)

        do {
            let input = try AVCaptureDeviceInput(device: captureDevice!)
            captureSession = AVCaptureSession()
            captureSession.addInput(input)

            let metadataOutput = AVCaptureMetadataOutput()
            captureSession.addOutput(metadataOutput)

            metadataOutput.setMetadataObjectsDelegate(self, queue: DispatchQueue.main)
            metadataOutput.metadataObjectTypes = [.qr]

            previewLayer = AVCaptureVideoPreviewLayer(session: captureSession)
            previewLayer.frame = view.layer.bounds
            previewLayer.videoGravity = .resizeAspectFill
            view.layer.addSublayer(previewLayer)

            captureSession.startRunning()
        } catch {
            print(error)
            return
        }
    }

    // Delegate method to handle captured QR code
    func metadataOutput(_ output: AVCaptureMetadataOutput, didOutput metadataObjects: [AVMetadataObject], from connection: AVCaptureConnection) {
        if let metadataObject = metadataObjects.first {
            // Process the scanned QR code data
            if let stringValue = (metadataObject as? AVMetadataMachineReadableCodeObject)?.stringValue {
                // Handle the scanned QR code data
                print("Scanned QR code: \(stringValue)")
            }
        }
    }
}

위 코드는 AVCaptureSession을 사용하여 카메라를 구동하고, AVCaptureMetadataOutput을 사용하여 QR코드를 인식하는 방법을 보여줍니다.

2. 연락처 추가

스캔된 QR코드에서 연락처 정보를 추출하고, 주소록에 추가하는 기능을 구현합니다. Core Data나 Contacts 프레임워크를 사용하여 연락처를 관리할 수 있습니다. 스캔된 데이터에서 이름, 전화번호 등을 추출하고, 연락처에 저장하는 방법은 다음과 같습니다.

import Contacts

func addContactToAddressBook(name: String, phone: String) {
    let contact = CNMutableContact()
    contact.givenName = name
    contact.phoneNumbers = [CNLabeledValue(label: CNLabelPhoneNumberMain, value: CNPhoneNumber(stringValue: phone))]
    
    let saveRequest = CNSaveRequest()
    saveRequest.add(contact, toContainerWithIdentifier: nil)
    
    do {
        try CNContactStore().execute(saveRequest)
        print("Contact added successfully")
    } catch {
        print(error)
    }
}

위 코드는 Contacts 프레임워크를 사용하여 연락처에 새 연락처를 추가하는 방법을 보여줍니다.

이제, QR코드를 스캔하고, 연락처 정보를 추출하여 주소록에 추가하는 완성된 앱을 만들 수 있습니다.

이상으로 QR코드 스캔 및 연락처 추가 기능 구현에 대한 기술 블로그를 마치겠습니다.

[참고 자료]

  1. Apple Developer Documentation: https://developer.apple.com/documentation/avfoundation/avcapturemetadataoutput
  2. Ray Wenderlich Tutorial on Contacts Framework: https://www.raywenderlich.com/7627570-contacts-framework-tutorial-for-ios