swift:QRCodeReaderアプリを作ってみました

概要

yannickl/QRCodeReader.swiftライブラリを使ってQRCodeReaderアプリを作ってみました。

今回使ったライブラリは、QRコードを読み取った後ハングしているようでした。何か処理を追加する必要があるかもしれません。今後使うかどうかは、もう少し使ってから判断したいと思います。

インストール

Carthageというライブラリ管理ツールを使いました。 Swift - Carthageを使ってビルド時間を短縮しよう - Qiitaを参考に行いました。

プラグインモジュール作成

Carthageファイルを作成します。

$ cat Carthage
github "yannickl/QRCodeReader.swift" >= 5.2.0

carthage updateを実行して、Githubからソースをダウンロードしてモジュールのビルドを行います。

$ carthage update
*** Cloning QRCodeReader.swift
*** Checking out QRCodeReader.swift at "5.2.1"
*** xcodebuild output can be found in /var/folders/bm/gfw2hl4d3zv5f29zchj4p_z40000gn/T/carthage-xcodebuild.8s8ORm.log
*** Building scheme "QRCodeReader" in QRCodeReader.swift.xcodeproj
2015-12-25 06:15:18.916 xcodebuild[884:18782] [MT] PluginLoading: Required plug-in compatibility UUID F41BD31E-2683-44B8-AE7F-5F09E919790E for plug-in at path '~/Library/Application Support/Developer/Shared/Xcode/Plug-ins/VVDocumenter-Xcode.xcplugin' not present in DVTPlugInCompatibilityUUIDs
...

プラグインモジュールをプロジェクトに追加

Generalタブから、carthage updateコマンドでビルドしたモジュールをEmbedします。

f:id:unokun3:20151226074508p:plain

Build Phasesタブでから、Runscriptを追加します。carthageはHomebrewでインストールしました。違う方法でインストールした場合には、carthageのパスを調べて入力してください。

f:id:unokun3:20151226074519p:plain

アプリ作成

QRCodeReaderライブラリを使ってアプリを作ります。QRCodeReaderライブラリを起動するボタンを追加するだけです。

ボタンを追加します

StoryBoardを使ってUIButtonを追加します。ラベル名をscanにします。

ボタンをタップしたときのアクションを追加します。

ViewControllerに以下の処理を追加します。

import UIKit
import AVFoundation
import QRCodeReader

class ViewController: UIViewController {

	// QRコード読取ライブラリのView Controllerのインスタンスを作成します
	// lazyキーワード:必要になった時にインスタンスが作成されます。
    lazy var reader = QRCodeReaderViewController(metadataObjectTypes: [AVMetadataObjectTypeQRCode])
    
    @IBAction func scanAction(sender: UIButton) {
//        reader.delegate = self
        // closure pattern
        reader.completionBlock = { (result: String?) in
            print(result)
        }
        
        // Presents the reader as modal form sheet
        reader.modalPresentationStyle = .FormSheet
        presentViewController(reader, animated: true, completion: nil)
    }

アプリ実行

QRコードをキャプチャするとConsoleにその内容が出力されます。確かにデータは取得出来ているようです。

Optional("apply-est@est.seamall.jp")

関連資料