티스토리 뷰

728x90
ZXing 라이브러리를 iPhone용으로 적용하기 전에 간단히 알아보고 넘어가겠습니다.

제가 공부하는 입장이다보니 이해한대로 작성을 하였을 수 있습니다. 틀린 부분은 꼭 지적을 해주셨으면 합니다.

UI 만들기
  http://thdev.net/98

라이브러리 다운로드 방법
Google 에서 Zxing 를 검색하거나 아래 주소를 통해 접속하시면 됩니다.
  http://bit.thdev.net/GMwhP7

zxing 라이브러리의 정확 명칭은 Zebra Crossing라고 되어 있군요. 오픈 소스이며 아파치 라이센스 2.0을 따르고 있습니다.
 ZXing 라이브러리에 포함된 Support formats들이 아래와 같이 있습니다.  그리고 안드로이드용 ZXing 라이브러리 사용 QR코드 앱을 바로 다운 받을 수 있도록 링크가 되어 있습니다.


 위의 화면에서 Downloads로 이동하여 다운로드 받으실 수 있습니다.
각종 apk파일들이 존재합니다. 안드로이드용으로는 apk파일도 배포되고 있는 모습입니다. 현재 가장 최신버전의 ZXing 라이브러리는 아래 보시는것과 같이 2.0 입니다. 2.0 라이브러리 약 70 MB를 다운로드 받으시면 됩니다.

 
iPhone용 Zxing 라이브러리 잠시 훌터보기
상세한 부분까지는 직접 열어보지 못하여 설명하지는 못하고 간단히 앞으로 라이브러리 사용을 하면서 알아야 할 부분을 간단히 설명하고 넘어가겠습니다.

다운로드가 완료되면 아래와 같이 압축을 해제합니다. 해제를 하면 많은 폴더들이 보일겁니다. 이중 아이폰 개발전에 간단히 테스트 해볼 수 있는 소스코드의 위치를 알려드리겠습니다.
zxing-2.0/iphone/의 폴더아래에 iPhone용 ZXing개발 테스트 파일들이 존재합니다. 실제 개발에 필요한 폴더도 여기에 있습니다.
core와 아이폰 UI와 실제 라이브러리를 동작하게하는 ZXingWidget폴더가 필요합니다.  ZXingWidget폴더는 아래에서 다시 설명하겠습니다.
core폴더는 zxing-2.0 아래의 core폴더와 cpp폴더가 존재합니다. 각각 접속하시면 src가 있지만, 둘의 차이는 core폴더는 Java개발용 파일들이 포함되어 있다는 점이고 cpp는 c코드가 들어가있습니다. 이미 아시겠지만 당연히 cpp아래의 src폴더를 활용해야 합니다.

 
ScanTest를 실행했을 경우 ZXingWidget을 활용 하는 방법 다음 리뷰에서 당연히 작성하겠지만 이번 리뷰는 간단히 사용방법이 어떤지만 알아보고 넘어가겠습니다. 맛보기로 ZXingWidget은 라이브러리 파일로 만들어저서 ScanTest에 불러와 지게 되어 있습니다. 이 부분을 설명할려고 합니다.
ScanTest.xcodeproj 를 더블 클릭하면 실행 됩니다.
일단 ScanTest가 동작하는 원리를 설명하겠습니다. ScanTest에서는 UI부분만을 가지고 있고, ZxingWidget을 호출하고 결과값을 받아오는 역할 만을 하게 됩니다. 그래서 앞선 글에서 UI 부분만을 만들어둔것입니다.(UI 부분 설명 : http://thdev.net/98)
 현재 아래 화면에서 보시면 Dependencies 아래에 또 다른 Proj가 포함되어 있고 현재 약 140개의 파일을 먼저 컴파일하는 모습을 보실 수 있으실 겁니다. 그리고 오른쪽 Build Settings을 볼 수 있습니다. 이제 여기서 중요한 것 몇가지 설명을 하고, 간단히 소스코드 UI관련 부분만 살펴보겠습니다. 상세한 동작에 관한글은 추후에 다시 추가하거나 작성하도록 하겠습니다.

 
아래에 보시면 Mach-O Type이 Static Library 인걸 확인 하실 수 있습니다. 이말은 현재 proj는 프로그램 동작을 직접하지 않고 정적 라이브러리를 만들어내겠다는 소리입니다. 라이브러리로 만들기 위해서 


 정적 라이브러리를 만들기위해서 Packaging의 Excutable Extension (확장자)가 a로 지정되어 있습니다. 빌드시 라이브러리 이름.a가 만들어진다는 의미입니다.


위에서 잠시 설명을 했었지만 core 라이브러리가 필요합니다. 현재 core라이브러리는 c로 짜여저 있습니다. Header Search Paths를 보면 상대 경로를 통해서 ../../cpp/core/src로 지정되어 있습니다. 이 경로는 추후 라이브러리 폴더를 옴기게 될 경우 꼭 변경해주셔야 합니다. 선택이 아닌 필수 입니다.


만들어진 라이브러리를 설치할 경로가 아래와 같이 정해져있습니다. Installaction Directory를 보시면 /usr/local/lib 폴더 안에  ZXing라이브러리 .a 를 설치하라고 만들어져 있습니다.


 간단하게 zxing라이브러리가 실제 .a로 만들어지기 위한 간단한 설정(?) 부분을 살펴보았습니다.
그리고 아래와 같이 libZxingWidget.a 가 빨간색으로 되어 있으신 분도 있으실 겁니다. 이건 추후에 글 작성할 때 다시 언급하겠지만. ZXingWidget proj가 제대로 컴파일 되지 않았기 때문입니다. 꼭 기억해두셨으면 합니다.


 이제는 이 코드 안에 포함되는 것들을 살펴보겠습니다. 아 그전에 이 라이브러리가 하는 일을 간단하게 이야기하자면 위에서 설명했듯이 A proj (내가 만든 Project) 이고, B proj(ZXing Widget) 를 호출하고 core부분과 ZXing widget에 포함된 라이브러리를 사용하여 QR코드 값을 해석하고, 값을 리턴해주는 라이브러리 형태의 proj 입니다.

간단히 아래와 같이 설명할 수 있어 보입니다.
 A proj
 Button을 통해 B proj 호출
 QR 코드 응답 대기
 QR 코드 인식 확인이 대면 분석 및 해석
 결과값을 A proj 로 return
 return 값을 UI view에 뿌려주기


위와 같은 단계를 거쳐서 결과값이 출력합니다. B proj의 라이브러리를 살펴보아야 한다는 결론이 나옵니다. 그리고 A proj에서도 core부분의 해석할 수있는 라이브러리와 B proj에 필요한 정보를 넘겨주어야 합니다.(이 부분은 추후 사용하기에서 작성하겠습니다.)
 
UI부분은  zxing widget/classes/아래에 포함되어 있습니다. 기본 ZXingWidgetController 파일이 ZXing core 부분과 OverlayView (UI 그리기) 부분을 호출하고, 카메라를 호출 하는 부분입니다. 여기에서 카메라를 통해 인식을 호출 받으면 해석 라이브러리로 값을 넘겨주어 해석을 시작합니다. 그리고 결과값은 ZXingWidgetController의 decode 함수에 의해서 호출됩니다.  decode 함수는 decode Delegate에 의해 옵션과 필수 부분을 만들어서 구성되어 있습니다.

UI부분 OverlayView에 의해서 카메라 위에 UI를 그립니다. 모두 소스코드로 구성되어진 UI구성을 가집니다. Cancel버튼 하나가 포함되어 있습니다. 그런데 이 부분이 또 delegate로 구성되어 있습니다. 닫기가 호출되면 delegate에 의해 ZXingWidgetController의 카메라를 Stop 시키고 이전 A proj로 이동하도록 되어 있습니다.

소스코드 설명을 할려고 하니 하나하나 설명하기에는 내용이 많아 보입니다. 쭉 정리해서 다시 올리겠습니다.
실제 프로젝트를 하실 때에는 이와 같은 방법을 활용해서 호출하는 방법과 실시간으로 대기상태를 만들어서 캡쳐링 하는 방법을 사용하실것이라고 생각합니다. 전자의 경우에는 위와 같은 설명은 불필요해 보이지만 후자의 경우에는 꼭 필요하다고 생각됩니다. 실제로 제가 이 라이브러리를 사용해서 후자의 경우로 프로젝트를 진행했었습니다. 그래서 상세하진 않지만 적당히 사용법과 연결고리를 찾았었습니다. 실력이 부족하여 설명이 어렵게 보이네요. 다시 정리해서 올리도록 하겠습니다. 





댓글