iOS ZXing 二维码模块的加入
网上关于zxing ios 的组装博客很多,按照博客的步骤走了一遍。然后各种报错。结果卡在了星期五。周末纠结了会,上网搜了一会,也没有解决办法,最后跑出去打了几盘dota。周一早晨来解决问题,还好,一大早的就给搞定了。成功扫描了微信的手机下载二维码。由于以前都是做android开发,现在突然接触ios开发,才不过4天,就要做二维码扫描的模块,所以接触起来比较陌生,也是第一次接触xcode。所以一路都是坎坷。
____________________________最新添加!!!(时间:2014年10月20日15:46:14)__________________________
ZXing CHECKSUM_EXCEPTION_ 出错
#ifndef __CHECKSUM_EXCEPTION_H__ //this line causes the error. #define __NOT_FOUND_EXCEPTION_H__ ..... ..... #endif // __CHECKSUM_EXCEPTION_H__
http://stackoverflow.com/questions/22411565/build-error-on-ios-7-1-zxing
Looks like there are some underground compiler settings changes in XCode 5.1.
So to fix this issue you need add -w flag to ZXingWidget Other Warning Flags. This flag completely disable all compiler warnings.
- Select ZXingWidget framework.
- Select ZXingWidget target in ZXingWidget framework.
- Press Build setting tab and type "other wa" in search.
- Add -w parameter flag to Other Warning Flags
____________________________最新添加!!!(时间:2014-04-22 15:07:31)__________________________
最近一次又配置了iphone的zxing、不过我这里并不是单纯的放置到ios上面,需要整合到quickcocos2dx里面去、
这次整合在上一次整合成功的基础上面,我还是遇到了不少的问题。
首先是:
1、剔除糟粕,把zxing包做出来。别急着往项目里面添加,先在你的xcode上面运行iphone文件夹中的xcodeproj项目,
在xcode中调试运行,致没有错误时,说明你的zxing包做好了(这一步,你可能会遇到很多问题,我的解决办法:
ZXing项目-》build settings-》搜索warn-》把warning linker flags的参数全部remove掉。还有otherwarningflags的参数也要移除。)
2、添加zxing项目到你的quick项目中、如果Undefined symbols for architecture i386这种错误,一定要注意一点、把项目用到的所有xcodeproj的三个编译环境(c language dialect /c++ language dialect/c++ standard library)设定一致.(上面三个参数我的参数依次对应是:compile default、compile default、libc++(LLVM C++ Standard library with c++ 11 support))
____________________________________________________________________________
首先需要知道的概念:
————————————————————————摘自网络————————————————————
一个XCode project包含了两种设置:Project Settings 和 Target Settings。
它们之间的主要区别在于:Project settings应用于project里面的所有target;而Target settings只对target本身有效,不影响project中的其他target。
- 如果一个选项在project settings中和target settings中都被设定了(会以粗体字表示),那么target settings会覆盖project settings。
- 如果一个选项在target settings中没有被设定(不会以粗体表示),那么它会继承project settings中的设置。如果它在project settings中也没有被设定(不会以粗体表示),就会继承XCode的默认设置。
建议一般情况下,配置target settings。在包含多个target的project中,如果需要在target之间使用相同的设定,配置project settings。
————————————————————————————————————————————————
配置错误的真实原因我还是没有太搞清楚,我最后的错误是Undefined xxx i386.
最后的解决办法是修改了一次build setting,然后重新跑,就可以运行了。
来总结一下:
首先是让我疑惑的libZXingWidget.a包的导入,我导入的时候是红色的字体,感觉是没有导入。不过我现在项目的libZXingWidget.a是正常颜色的。
然后就是关于编译器那一块的选择,不说了。上我项目成功在手机上面奔跑的build settings截图:
需要注意一个地方:
刚刚改了一下配置,爆了3个错误:
Undefined symbols for architecture x86_64:
"_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 x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
解决办法是:
target下的buildSettings:
改成NO的话,就会爆上面的错误。
继续截配置图:
终于找到我错误的配置的地方了:
错误就是下面这个:
Undefined symbols for architecture i386:
"std::string::c_str() const", referenced from:
zxing::qrcode::Detector::computeDimension(zxing::Ref<zxing::ResultPoint>, zxing::Ref<zxing::ResultPoint>, zxing::Ref<zxing::ResultPoint>, float) in libZXingWidget.a(Detector-B8B28E953F840D47.o)
zxing::GridSampler::checkAndNudgePoints(zxing::Ref<zxing::BitMatrix>, std::vector<float, std::allocator<float> >&) in libZXingWidget.a(GridSampler.o)
zxing::qrcode::DecodedBitStreamParser::append(std::string&, std::string const&, char const*) in libZXingWidget.a(DecodedBitStreamParser-64E27B33E79CBC52.o)
zxing::qrcode::DecodedBitStreamParser::decodeByteSegment(zxing::Ref<zxing::BitSource>, std::string&, int, zxing::common::CharacterSetECI*, zxing::ArrayRef<zxing::ArrayRef<unsigned char> >&, std::map<unsigned int, std::string, std::less<unsigned int>, std::allocator<std::pair<unsigned int const, std::string> > > const&) in libZXingWidget.a(DecodedBitStreamParser-64E27B33E79CBC52.o)
zxing::qrcode::DecodedBitStreamParser::decodeNumericSegment(zxing::Ref<zxing::BitSource>, std::string&, int) in libZXingWidget.a(DecodedBitStreamParser-64E27B33E79CBC52.o)
zxing::BitMatrix::description() in libZXingWidget.a(BitMatrix.o)
zxing::Exception::what() const in libZXingWidget.a(Exception.o)
...
解决办法是:
如果你选择的是ios7.0 or 7.1,你就会爆上面的错误了。。。害我一个下午的google百度这个错误,都没有解决。就是这个地方!!!!
继续截关键的图:
next pic:
再上一张项目的结构图:
over。常见错误可以网上查,配置一定要细心,不然后面给自己的就是一个坑,也许坑一天,也许坑一年。