Pages

2011年9月4日日曜日

Titaniumでバーコードライブラリを使う

検討中のiPhoneアプリの現在の課題はバーコード。(少しづつ、少しづつ進んでます)
Tituniumで利用できるiPhone用のバーコードライブラリは、TiBarが一番手のようだ。
TiBar -- ZBar integration module for Titanium Mobile.
と言うことで、ZBarライブラリをTitaniumで利用出来るようにしたものらしい。 http://code.google.com/p/tibar/

ZBarライブラリについては、ここ http://zbar.sourceforge.net/
ZBar is an open source software suite for reading bar codes from various sources, such as video streams, image files and raw intensity sensors. It supports many popular symbologies (types of bar codes) including EAN-13/UPC-A, UPC-E, EAN-8, Code 128, Code 39, Interleaved 2 of 5 and QR Code.

インストール

1. 最新版をダウンロード (2011.9.4 現在 0.4.2)
2. 解凍したモジュールを以下にコピー。
$ cp -r modules/iphone/tibar /Library/Application\ Support/Titanium/modules/iphone/
3. (プロジェクトに未登録のフレームワークを) Xcodeのプロジェクトファイルに追加する
  • AVFoundation.framework 
  • CoreMedia.framework
  • CoreVideo.framework
  • QuartzCore.framework
  • libiconv.dylib 
さらっと、書いたけど、これは一寸面倒。 
  1. /Library/Application Support/Titanium/mobilesdk/osx/1.7.2/iphone/iphone/Titanium.xcodeproj ファイルを起動し(Xcodeでファイルが開く)
  2. [Bundle Phases]タブを選び
  3. 右下にある [Link Binary with Libraries]ボタンにてライブラリリストを展開
  4. 上記のフレームワークを追加(Link)していくのだ。(選んで、追加ボタンを実施)

参考にさせてもらったのは、このサイト。 http://zaru.tofu-kun.org/2011/08/11/iphoneでバーコードをスキャンしたい!titanium-mobileでzbarを使う/

どうやら、このファイルをコピーして、初期プロジェクトファイルを作成していくらしい。
今回のコードは、既存のプロジェクトに追加したため、最初はmodule tibarの読み込みに失敗した。
再度、きれいにBuildする必要があった。
http://code.google.com/p/tibar/issues/detail?id=10

Tibarライブラリを使う

tiapp.xml プロジェクト定義ファイルに、モジュール追加記述
<modules>
 <module version="0.4.2">tibar</module>
</modules>
そして、requireする。 var TiBar = require('tibar');
var TiBar = require('tibar');  // TiBarモジュールの読み込み

// Window, Label, Button を用意
var win = Ti.UI.currentWindow;
var label = Ti.UI.createLabel({
	color:'#999',
	text:'this is scan windows.',
	font:{fontSize:20,fontFamily:'Helvetica Neue'},
	textAlign:'center',
	top:10,
	height:30
});
win.add(label);
var scanButton = Ti.UI.createButton({
	title:'Scan It',
	top:80,
	left:10,
	width:300,
	height:100
});
win.add(scanButton);

// clickイベントの中にスキャン動作を定義
scanButton.addEventListener('click', function(){
	TiBar.scan({
		// 設定パラメータ (JSON形式)
		configure: {
			// ZBarReaderViewController(VC), ZBarReaderController ( C )  の2種
			classType: "ZBarReaderViewController",
			// Library ( C ), Album ( C ), Camera ( VC ) の 3種
			sourceType: "Camera",
			// Default , Sampling , Sequence
			cameraMode: "Default",
			config:{
				"showsCameraControls":true,
				"showsZBarControls":true,
				"tracksSymbols":true, // スキャンする時に四角の枠を表示する
				//"showsSymbols":true,
				"enableCache":true,
				"showsHelpOnFail":true,
				"takesPicture":false
			},
			// この他、Symbol 設定で利用可能なバーコードを決められる
		},
		
		// 成功した場合の処理定義
		success:function(data){
			Ti.API.info('TiBar success callback!');
			if(data && data.barcode){
				Ti.UI.createAlertDialog({
					title: "Scan Result",
					message: "Barcode: " + data.barcode + 'Symbology:' + data.symbology
				}).show();
			};
		},
		// 中止した時の処理定義
		cancel:function(){
			Ti.API.info("TiBar cancel callback!");
		},
		// エラーを起こした場合の定義
		error:function(){
			Ti.API.info("TiBar error callback!");
		}
	});
});
処理の分岐を、JSON形式で書いていくのは、なんか関数型言語のような感じで面白い。
実行したら、カメラシミュレータの画面が出た。iPhoneシミュレータなので、これでおしまいのようだ。
TiBarのサイトには、シミュレータでバーコード処理を再現するための方法も書いてあったが、なんかハマりそうだったので、今回はこれで満足。

0 件のコメント:

コメントを投稿