JAN Reader for iOSをリリースしました

JAN Readerをリリースしました。
OSレベルでバーコードが読めるようになったので、
検索して見つかったコードを精査して形にしました。

参考にしたページ

【iOS】バーコードリーダーをSwiftで作ってみた
https://qiita.com/ryokosuge/items/c903e04da555294299ae

Swift4でカメラアプリを作成する(1)
https://qiita.com/t_okkan/items/f2ba9b7009b49fc2e30a

iOSのバーコードリーダーで読み取り範囲を設定する
https://qiita.com/tomosooon/items/9cb7bf161a9f76f3199b

ここから本文

元々、バーコードリーダーのサンプルコードの存在を知っていたので、
そのうち試してみようと思ってたのですが、
カメラアプリのサンプルがとても分かりやすかったので、
それをベースにバーコードを読み取れるようにしてみました。
(なんか上から目線な書き方ですみません。。。)

形にしたところで、手元の本のバーコードで検証していたのですが、
本の裏って、たいていバーコードが2つ存在していて、
両方カメラに映った場合はどちらかだけ検出されるようで、
そこで978から始まるISBNだけ検出するようにしてみたのですが、
もう片方のみ検出され続ける場合もあってちょっと悩みました。
そういうこともあって、読み取り範囲を設定すると同時に、
その範囲をカメラプレビューに表示することにしました。

UIデザインですが、使用中はプレビュー画面しか見ないと思ったので、
すべての情報をプレビュー画面に集めて、
コピー時はボタンを見ないで済むように心がけました。
ついでに、連打防止とか、履歴削除にはワンクッションを入れたりと、
今まで作ってきたアプリからもろもろコピペしました。
あと、コピー時のToast(*1)とかもそうですね。

読み取り範囲の表示は、
AVCaptureVideoPreviewLayer#fromCaptureDevicePoint
を使って、そこにレイヤーを重ねました。
当初は、どこを検出したか表示しようと試しに実装してみたのですが、
次の瞬間にカメラが動くと不一致が起きるのでやめました。
その代わり検出範囲を点滅して、iPhoneを振動(*2)させることにしました。

アプリのアイコンを作る段階で、バーコードの仕様を眺めて、
Perlで任意の番号からバーコードのSVG出力したのですが、
それを読み取った時に、その番号が表示された時は嬉しかったですね。
アプリのスクリーンショットはいわゆる合成なのですが、
映っているバーコードと検出した番号は対応しています。

最初はISBN なんたらっていうアプリ名だったので、
978から始まるバーコードのSVGを利用してアイコンを作成したのですが、
Appleに申請する段階で商標登録されていて使えないということで、
土壇場でJAN Readerに変更(*3)したという経緯があります。

類似アプリも多々あるので、JAN Readerである必要はないのですが、
シンプルにバーコードを読み取りたい場合はオススメです。

おしまい。

(*1) Androidに存在する機能で、一定時間表示されるメッセージダイアログ的なもの
(*2) Haptic Feedbackと呼ばれるもの
(*3) プロジェクトを作成し直す羽目に・・・

Leave a Comment