在ios7中使用zxing


ZXing(Github鏡像地址)是一個開源的條碼生成和掃描庫(開源協議為Apache2.0)。它不但支持眾多的條碼格式,而且有各種語言的實現版本,它支持的語言包括:Java, C++, C#, Objective-C, ActionScriptRuby

ZBar一般都是直接使用現成的靜態庫就好了,除非自己要自定義一些功能。zxing也可以但是要包含好多 頭文件,還是直接引用工程方便。
下面是具體步驟:
 1.在github 下載zxing開源的代碼https://github.com/zxing/zxing。
2. 我們保留我們需要的 cpp iphone 2 個文件夾,其余的全部刪掉。如下圖所示
3. 對於 cpp 這個目錄,只保留 cpp/core/src/zxing 下面的內容,其余內容也可以刪掉了。但是整個目錄結構必須保持原樣。裁剪完后,整個目錄結構如下所示:

4. 接下來,我們把裁剪后的 zxing 目錄整個移動到你自己的 項目的根目錄下,並且把上圖中可以看到的 ZXingWidget.xcodeproj 文件拖動到你的 iOS 工程中。

二:

5.我們需要設置ZXing項目和我們原本的iOS項目之間的依賴關系。在我們的iOS項目的設置中,點擊build phases tab,然后增加 Target Dependencies  Link binary,並且增加這些framework依賴:

完成之后如下圖:

二:

最后一步,在設置中增加如下2header search path:

 

./zxing/iphone/ZXingWidget/Classes

./zxing/cpp/core/src

需要注意的是,第一個path要設置成循環查找子目錄,而第二個不循環查找,如下圖所示:

 

 

 

 


 

注意:我在使用中遇到了一些問題,主要是編譯的問題。

 

1.一個是找不到 頭文件。解決方法:把用到ZXing的源文件擴展名由.m改成.mm

2.報錯:Undefined symbols for architecture armv7s,解決方法:把ZXingWidget的一個build target參數:”Build Active Architecture Only” 修改成 “NO”.

3.報錯:No such file or directory,出現該錯誤可能是你的Header Search Path寫錯了,或者就是你的zxing庫的目錄結構不是我上面強調的,好好檢查一下吧。

4.如果遇到下面問題:

std::allocator<char> const&)", referenced from:  
  
(null): "std::string::append(std::string const&)", referenced from:  
  
(null): "std::__throw_out_of_range(char const*)", referenced from:  
  
(null): "std::ios_base::Init::Init()", referenced from:  
  
(null): "std::basic_string<char, std::char_traits<char>, std::allocator<char> >::basic_string(std::string const&)", referenced from:  
  
(null): "std::basic_ostringstream<char, std::char_traits<char>, std::allocator<char> >::~basic_ostringstream()", referenced from:  
  
(null): "std::string::append(unsigned long, char)", referenced from:  
  
(null): "std::string::_M_leak_hard()", referenced from:  
  
(null): "std::basic_stringbuf<char, std::char_traits<char>, std::allocator<char> >::str() const", referenced from:  
  
(null): "std::string::erase(unsigned long, unsigned long)", referenced from:
(null): Linker command failed with exit code 1 (use -v to see invocation)  

 

就是C++編譯器的設置問題

在Build Settings里我們設置一下:

這樣就ok了。

如果再提示

Undefined symbols for architecture arm64:
  "_OBJC_CLASS_$_QRCodeReader", referenced from:
      objc-class-ref in ViewController.o
  "_OBJC_CLASS_$_ZXingWidgetController", referenced from:
      objc-class-ref in ViewController.o
ld: symbol(s) not found for architecture arm64
clang: error: linker command failed with exit code 1 (use -v to see invocation)

那是zxing不支持最新的arm64架構,改兩個地方

1.選armv7和armv7s

 

2.刪除arm64

 

如果要加入生成二維碼的功能,從下面的鏈接下載Zxing Demo

http://code4app.com/ios/ZXing-Demo/515561f76803fa5e77000002

 

1.首先把ThirdParty這個文件夾拖到自己的工程里面來,注意是跟main.n在同一級目錄,如下圖

注意QRCodeEncoderObjectiveCAtGithub.xcodeproj的targets

在項目的targets里面加入這兩個

下面這個要注意,ZXingDemo是示例工程名,這里要改成自己項目的名稱。

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM