ZBar

ZBar barcode readerを使ってみる

カメラを使ったバーコードスキャン機能を提供するライブラリです。まずは、以下のサイトから必要なファイルをダウンロードします。今回は、iPhoneSDK/beta/ZBarSDK-1.3.1.dmgを利用しました。古いバージョンだとiOS6(iPhone5)に対応していないため、なるべく新しい方が良いでしょう(ベータ版だとまた別の心配はありますが…)。

dmgファイルを開くと、後は親切に案内があるのでその通りに進みます。まずは新しいXcodeプロジェクトにZBarSDKフォルダをドロップして追加します。必要な他のフレームワーク(下記)をプロジェクトに追加します。

READMEより抜粋
 * AVFoundation.framework (weak)
 * CoreMedia.framework (weak)
 * CoreVideo.framework (weak)
 * QuartzCore.framework
 * libiconv.dylib

ここでハマったのが、上記の追加フレームワークが大変重要だということです。weakって書いてあるから、必要になったら足せばいいや…、と考えてわざと足さずにおいたのですが、実はすぐ(ZBarReaderViewControllerをロードするだけで)必要になって、例えば、CoreVideoが足りない場合には以下のようなビルドエラーが出ます。これを「libzbar.aがarmv7s(iPhone5)に対応してない」と誤解してしまったために、ZBarの独自ビルドからやり直したりして丸一日無駄にしてしまいました…。「CV」というのがCoreVideoの接頭辞で、その関数が無いという意味だとすぐに理解していれば…。

Undefined symbols for architecture armv7s
"_CVPixelBufferGetWidth", referenced from:
      -[ZBarCVImage convertCVtoRGB] in libzbar.a(ZBarCVImage.o)

もう一つハマったのは、同梱されているサンプルのコードのどこにもZBarの「#import」が記述されていないことです。何故かそのままだとビルドできちゃいますが、一度でもコードをエディタで開くと、エラーになって(そりゃそうだ)ビルドできなくなります。以下の文を必要な箇所に足してあげると動くようになります。なんで…。

#import "ZBarSDK.h"

参考URL