iOS:教你五分鐘整合ZXing
iOS整合ZXing的過程真是麻煩,我總共集成了兩次,由於第一次整合沒有做記錄,在第二次整合時,還是花了不少時間。所以在第二次整合的時候特意做了記錄,按照筆記,現在五分鐘即可整合ZXing,0錯誤,0警告。
為了快速整合,自然不是從0開始,我們要站在前人的肩膀上。廢話少說,步驟開始:
準備工作:
1、下載一個現成的二維碼掃描原始碼ZXingDemo ,我們需要這裡的程式碼
步驟:
1、新建工程MyZXingDemo;
2、將ZXingDemo中已經裁剪好的zxing整個檔案copy到工程的根目錄,將ZXingDemo中的QRCodeEncoder第三方庫copy到工程的根目錄external下,工程目錄如圖
新增ZXing和QRCodeEncoder到工程中,注意新增方式是將ZXingWidget.xcodeproj和QRCodeEncoderObjectiveCAtGithub.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的依賴庫,按照上面的圖片新增完整即可。
好了,終於大功告成~~~~~~ 好像超過五分鐘了耶,不這麼騙你們,怎麼能完整看完呢~~~~~~罪過罪過