日期: 2012 年 5 月 15 日

解决iOS开发中zxing在release下不能正常工作的问题

zxing是一个开源类库,用于解析条码二维码(1D/2D),实现语言为Java,但其中也提供了Objective-C的一个包,Objective-C的实现只能读取QRCode。

我们最近的一个iOS工程需要在手机上识别我们的二维码,所以我采用了zxing,按照zxing的文档将ZXingWidget工程导入自己的工程,过程比较顺利,在我的iPhone上调试也没什么问题,但当我打成AdHoc版交付测试时,测试发现程序不能识别二维码,我挺奇怪,就在网上搜索,在zxing的FAQ上确实有这个现象的解释

Why does my application decode okay in debug mode on iOS but not in release mode?

You’re compiling with an old version of llvm-gcc or clang. If you use Xcode 4.2, either supported compiler should be fine with optimizations turned on. Older compilers, shipped with Xcode 4.1 and earlier, had an optimization bug in llvm that miscompiled ZXing. If you are using Xcode 4.1 or older, you should use gcc to compile ZXing, not llvm-gcc or clang.

意思应该是说可能使用了老版本的编译器,Xcode4.2之前都存在问题,但我的Xcode已经是4.3了,应该不存在问题,继续搜索其他资料,基本都是英文,但说的也不是很明白,应该是编译器的Optimization问题,后来我将项目引用的ZXingWidget工程的Optimization Level设为None,即-O0,再打AdHoc就没问题了。

具体为选择ZXingWidget工程的Targets中选择Build Setting,将Optimization Level设为None,即下面的Debug和Release都设为None。