iOS 中如何使用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 个文件夹,其余的全部删掉。如下图所示:
iOS 中如何使用zxing库_第1张图片
3. 对于 cpp 这个目录,只保留 cpp/core/src/zxing 下面的内容,其余内容也可以删掉了。但是整个目录结构必须保持原样。裁剪完后,整个目录结构如下所示:
iOS 中如何使用zxing库_第2张图片
4. 接下来,我们把裁剪后的 zxing 目录整个移动到你自己的 项目的根目录下,并且把上图中可以看到的 ZXingWidget.xcodeproj 文件拖动到你的 iOS 工程中。

iOS 中如何使用zxing库_第3张图片

二:

iOS 中如何使用zxing库_第4张图片

5.我们需要设置ZXing项目和我们原本的iOS项目之间的依赖关系。在我们的iOS项目的设置中,点击build phases tab,然后增加 Target Dependencies Link binary,并且增加这些framework依赖:

完成之后如下图:

iOS 中如何使用zxing库_第5张图片

二:

iOS 中如何使用zxing库_第6张图片

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


./zxing/iphone/ZXingWidget/Classes

./zxing/cpp/core/src

需要注意的是,第一个path要设置成循环查找子目录,而第二个不循环查找,如下图所示:

iOS 中如何使用zxing库_第7张图片



 

注意:我在使用中遇到了一些问题,主要是编译的问题。


1.一个是找不到 头文件。解决方法:把用到ZXing的源文件扩展名由.m改成.mm

2.报错:Undefined symbols for architecture armv7s,解决方法:把ZXingWidget的一个build target参数:”Build Active Architecture Only” 修改成 “NO”.

iOS 中如何使用zxing库_第8张图片

3.报错:No such file or directory,出现该错误可能是你的Header Search Path写错了,或者就是你的zxing库的目录结构不是我上面强调的,好好检查一下吧。

4.如果遇到下面问题:

[html]  view plain copy
  1. std::allocator<char> const&)", referenced from:  
  2.   
  3. (null): "std::string::append(std::string const&)", referenced from:  
  4.   
  5. (null): "std::__throw_out_of_range(char const*)", referenced from:  
  6.   
  7. (null): "std::ios_base::Init::Init()", referenced from:  
  8.   
  9. (null): "std::basic_string<char, std::char_traits<char>, std::allocator<char> >::basic_string(std::string const&)", referenced from:  
  10.   
  11. (null): "std::basic_ostringstream<char, std::char_traits<char>, std::allocator<char> >::~basic_ostringstream()", referenced from:  
  12.   
  13. (null): "std::string::append(unsigned long, char)", referenced from:  
  14.   
  15. (null): "std::string::_M_leak_hard()", referenced from:  
  16.   
  17. (null): "std::basic_stringbuf<char, std::char_traits<char>, std::allocator<char> >::str() const", referenced from:  
  18.   
  19. (null): "std::string::erase(unsigned long, unsigned long)", referenced from:  
  20.   
  21. (null): Linker command failed with exit code 1 (use -v to see invocation)  

哪就是C++编译器的设置问题

我们设置一下:


这样就ok了。

在工程中的用法是:

[html]  view plain copy
  1.  (void)pressButton1:(UIButton *)button  
  2. {  
  3.     ZXingWidgetController *widController = [[ZXingWidgetController alloc] initWithDelegate:self showCancel:YES OneDMode:YES];  
  4.     NSMutableSet *readers = [[NSMutableSet alloc] init];  
  5.       
  6.     QRCodeReader *qrcodeReader = [[QRCodeReader alloc] init];  
  7.      
  8.       
  9.     MultiFormatOneDReader *OneReaders=[[MultiFormatOneDReader alloc]init];  
  10.    
  11.     [readers addObject:qrcodeReader];  
  12.     [readers addObject:OneReaders];  
  13.    
  14.     widController.readers = readers;  
  15.     [self presentViewController:widController animated:YES completion:^{}];  
  16. }  

原文链接:http://blog.csdn.net/justinjing0612/article/details/10053101

你可能感兴趣的:(ios,zxing)