在iOS中集成ZXing实现二维码扫描
来源:互联网 发布:kido手表软件 编辑:程序博客网 时间:2024/04/28 19:11
图片找不到了。代码也找不到了。强制必须支持arm64位之后原来的zxing也不好用了。
现在苹果原生AVCaptureSession在iOS 7以上已经提供了二维码扫描功能,不用再依赖于Zxing了。
下面的文章不看也罢……
ZXing是一个实现二维码扫描的库,花费我半天时间终于成功把它集成到我们的项目中,赶紧记下来,以免下次忘了。下面是集成步骤:
1.下载ZXing源代码
GitHub镜像地址:
https://github.com/zxing/zxing
不过好像只能下载到Android的,本人Git用的少,求大神指点。
最后我在CSDN和code4app上找到了源码,不知道是哪个版本的ZXing,反正可以用。
2.挑出iOS需要的源码
按照前辈们的说法,从Git上下载的源码是一个很大的包,但是iOS方面只要一点点。
简单来说,我们只需要保留cpp和iphone这2个文件夹,其余的全部删掉。如下图所示:
接着我们继续裁剪,对于cpp这个目录,只保留cpp/core/src/zxing下面的内容,其余内容也可以删掉了。但是整个目录结构必须保持原样。裁剪完后,整个目录结构如下所示:
我因为是直接下载的Demo,所以已经是别人清理好的,我直接导入就好。
3.导入ZXing
把裁剪后的zxing文件目录整个移动到我们的iOS项目目录下
然后把上图中可以看到的ZXingWidget.xcodeproj文件Add到我们的iOS工程中。
4.设置与ZXing的依赖关系,并添加依赖的framework
Build PhasesàTargetDependencies,添加ZXingWedget。
Build PhasesàLinkBinary With Libraries,添加libZXingWedget.a,及以下frameworks:
a. AddressBook
b. AddressBookUI
c. AudioToolbox
d. AVFoundation
e. CoreMedia
f. CoreVideo
g. libiconv
完成之后如下图所示:
5.设置索引路径
Build SettingsàHeaderSearch Paths
添加如下路径
./zxing/iphone/ZXingWidget/Classes
./zxing/cpp/core/src
注意,第一个path要设置成循环查找子目录,而第二个不循环查找,如下图所示:
6.注入代码
在需要使用到二维码扫描的地方注入以下代码,ZXing有提供一个扫描二维码的ViewController,即ZXingWidgetController。
ZXingWidgetController *widController = [[ZXingWidgetControlleralloc]initWithDelegate:selfshowCancel:YESOneDMode:NO];
NSMutableSet *readers= [[NSMutableSetalloc]init];
QRCodeReader*qrcodeReader = [[QRCodeReader alloc] init];
[readersaddObject:qrcodeReader];
widController.readers = readers;
[self presentViewController:widControlleranimated:YEScompletion:^{}];
注意加入相应的头文件
#import <ZXingWidgetController.h>
#import <QRCodeReader.h>
6.C++兼容
此时若直接编译,会报错”iostream.h” file not found。这是因为ZXing底层是C++写的,只需要把用到ZXing的源文件扩展名由.m改成.mm即可。如图
7.std库兼容问题
接着还是编译不过,会出现20多个这样的问题:
网上有人说是因为ZXing 2.1和OpenCV 2.4.3的iOS库有一些兼容问题,他们对C++标准库的版本和编译器版本都有一些需求,造成满足一方了,另一方就编译不通过了。
——水太深,我看不明白。不过StackOverflow上有牛人给出了解决办法。
Build SettingsàC++Language DialectàCompiler Default
Build SettingsàC++Standard LibraryàCompiler Default
把iOS工程和ZXing工程的这两个地方都设置成Compiler Default。
有人说解决了,也有人说要把C++ Standard Library设置成libstdc++。可能跟Xcode版本不同还有关系的样子,我是Xcode5.1.1,设置成libstdc++解决的。
8. 其他错误
另外,我还出现过一个错误是
这是因为Xcode5.1.1自动选上了arm64架构,而网上down下来的ZXing是没有的。
建议解决办法是:
Build SettingsàValidArchitectures中却掉arm64,让其值与ZXing的相同。
然后把iOS工程和ZXing工程的BuildActive Architecture Only改为NO。- 在iOS中集成ZXing实现二维码扫描
- 在Android中使用 Google ZXing 实现二维码、条形码扫描
- 在Android中使用 Google ZXing 实现二维码、条形码扫描
- 在AndroidStudio中引入ZXing扫描二维码的简单实现
- Android中集成Zxing库实现扫描二维码(对Zxing库精简)
- zxing实现二维码扫描
- zxing实现二维码扫描
- android中Zxing实现二维码功能的快速集成以及扫描界面的定制
- ios ZXing 二维码、条形码扫描
- 使用ZXing实现二维码扫描
- 扫描二维码简单实现Zxing
- 实现zXing二维码连续扫描
- 使用ZXing实现二维码扫描
- 使用ZXing实现二维码扫描
- 使用ZXing实现二维码扫描
- 使用ZXing实现二维码扫描
- Zxing 在Fragment中实现二维码扫描(不推荐使用)
- Android中Zxing扫描二维码
- java的继承和组合何如选择
- UVA 12712 Pattern Locker(简单排列组合数学题)
- linux 安装java
- 谈谈菜鸟的自我修养
- C++动态数组分配与释放
- 在iOS中集成ZXing实现二维码扫描
- Oracle RAC cache fusion原理测试
- 带温度补偿超声波测距(AT89S51)
- 【甘道夫】一键启动集群,包括HDFS HA + YARN相关所有程序
- MySQL各版本的区别
- 简单之排序
- 解决SecureCRT中文显示乱码
- ubuntu下安卓源码编译环境的搭建
- kong+nginx