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的依赖库,按照上面的图片添加完整即可。
好了,终于大功告成~~~~~~ 好像超过五分钟了耶,不这么骗你们,怎么能完整看完呢~~~~~~罪过罪过