1. 程式人生 > >iOS:教你五分鐘整合ZXing

iOS:教你五分鐘整合ZXing

iOS整合ZXing的過程真是麻煩,我總共集成了兩次,由於第一次整合沒有做記錄,在第二次整合時,還是花了不少時間。所以在第二次整合的時候特意做了記錄,按照筆記,現在五分鐘即可整合ZXing,0錯誤,0警告。

為了快速整合,自然不是從0開始,我們要站在前人的肩膀上。廢話少說,步驟開始:

準備工作:

1、下載一個現成的二維碼掃描原始碼ZXingDemo ,我們需要這裡的程式碼

步驟:

1、新建工程MyZXingDemo;

2、將ZXingDemo中已經裁剪好的zxing整個檔案copy到工程的根目錄,將ZXingDemo中的QRCodeEncoder第三方庫copy到工程的根目錄external下,工程目錄如圖


新增ZXing和QRCodeEncoder到工程中,注意新增方式是將ZXingWidget.xcodeprojQRCodeEncoderObjectiveCAtGithub.xcodeproj直接拉到工程中,如圖,而非在工程中 Add Files


3、新增依賴庫、標頭檔案搜尋路徑


./zxing/iphone/ZXingWidget/Classes   (注意此路徑的右側選項是recursive,迴圈檢索)

./zxing/cpp/core/src

./external/QRCodeEncoder/QRCodeEncoderObjectiveCAtGithub


4、將ZXingDemo的程式碼全部copy到工程目錄下(嘿嘿,你是不是發現什麼了,被我坑了,其實本文重點並不在於寫掃描的程式碼,而在於避免整合過程出現的N多問題。根據本人整合過程的一點小經驗,整合ZXing過程中浪費的最多時間在於排除各種bug,而非寫掃描程式碼。既然都被坑到這兒了,就看完嘛~~~~~~),如圖所示:


將 CustomViewController.m 名字改成 CustomViewController.mm

在工程中新增的時候只要 【右鍵 - Add Files】新增CustomViewController和ViewController兩個類即可,此時工程目錄如圖:


5、大功告成,恭喜你終於集成了ZXing,勇敢的編譯吧

此時,你痛苦的發現又被騙了。。。。。。。。。怎麼還有錯誤啊

Undefinedsymbols for architecture armv7:

 "std::_Rb_tree_increment(std::_Rb_tree_node_base*)",referenced from:

std::basic_ostream<char, std::char_traits<char>>& std::operator<<<std::char_traits<char>>(std::basic_ostream<char, std::char_traits<char> >&,char)", referenced from:

……

……

這種錯誤幾十個,木事,參考連結:http://thierry-xing.iteye.com/blog/1815295 ,將C++ Standard Library選項改成Compiler Default

此時點選編譯,不怕,勇敢點選吧,這次真的可以了,ZXing就這樣被集成了 大笑大笑

整合後的日子雖然歡愉,但整合的過程總是痛苦的,且集且珍惜~~~

下面再羅列些整合過程碰到的其他問題:

1、iostream file not found

將CustomViewController.m 字尾改成 .mm即可,mm字尾代表C++編譯原始檔。

2、QREncoder.h file not found

沒有新增QREncoder標頭檔案搜尋路徑,按照上面教程,將external那個路徑新增進去即可。

類似這樣 .h file not not found 的錯誤,首先檢查header search path的路徑是否寫錯。

3、_OBJC_CLASS_$_QREncoder_ reference from: 

這個問題真是坑,找了半天沒找到原因,最後發現是Build Phrase — Target Dependencies和Build Phrase — Link Binary With Libraries兩個地方沒有新增QREncoder的依賴庫,按照上面的圖片新增完整即可。

好了,終於大功告成~~~~~~ 好像超過五分鐘了耶,不這麼騙你們,怎麼能完整看完呢~~~~~~罪過罪過大笑大笑