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.

  1. Select ZXingWidget framework.
  2. Select ZXingWidget target in ZXingWidget framework.
  3. Press Build setting tab and type "other wa" in search.
  4. 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。常见错误可以网上查,配置一定要细心,不然后面给自己的就是一个坑,也许坑一天,也许坑一年。

原文地址:https://www.cnblogs.com/vokie/p/3635253.html