关于集成WCDB遇到的坑

今天公司项目需要用到数据库功能,之前一直用FMDB,后来看过关于WCDB的介绍,就想用WCDB试试手,然鹅集成并不顺利,下面说下遇到的坑。

官方提供了3种集成方式:(直接复制github,用斜体表示,参考链接:https://github.com/Tencent/wcdb/wiki)

1.通过Carthage安装

先安装Carthage

在Cartfile中添加 github "Tencent/WCDB",并执行carthage update;

将Carthage/Build/目录下iOS或Mac的WCDB.framework添加到你的项目工程配置的Build Phases->Linked Binary and Libraries中。

点击你的项目工程配置的Build Phases中的+选项,在弹出菜单中选择New Run Script Phase。在创建的脚本中添加 carthage copy-frameworks ,并在Input Files中添加对应平台的路径$(SRCROOT)/Carthage/Build/iOS/WCDB.framework 或 $(SRCROOT)/Carthage/Build/Mac/WCDB.framework。

在你的代码文件头引入头文件#import 。

由于WCDB是基于Objective-C++,因此需要将引用WCDB的源文件后缀.m改为.mm

2.通过cocoapods安装

先安装Cocoapods

通过 pod repo update 更新WCDB的cocoapods版本。

在Podfile对应的target中,添加pod 'WCDB',并执行pod install --verbose。

在项目中使用CocoaPods生成的.xcworkspace运行工程。

在你的代码文件头引入头文件#import 。

由于WCDB是基于Objective-C++,因此需要将引用WCDB的源文件后缀.m改为.mm

通过动态库安装: 动态库与iOS 7不兼容,因此需支持iOS 7的需要通过静态库安装。

获取WCDB源码,并更新sqlcipher的submodule。

git clone https://github.com/Tencent/wcdb.git

cd wcdb

git submodule update --init sqlcipher

将WCDB.xcodeproj添加到你的工程中.

在你的项目工程配置的General->Enbedded Binaries中添加WCDB.framework。注意这里有两个WCDB.framework,要选择动态库那个。选完后可在Build Phases->Target Dependencies中确认,若为WCDB则正确,而WCDB iOS Static则是静态库使用的。

在你的代码文件头引入头文件#import 。

由于WCDB是基于Objective-C++,因此需要将引用WCDB的源文件后缀.m改为.mm

3.通过静态库安装:

获取WCDB源码,并更新sqlcipher的submodule。

git clone https://github.com/Tencent/wcdb.git

cd wcdb

git submodule update --init sqlcipher

将WCDB.xcodeproj添加到你的工程中.

在你的项目工程配置的Build Phases->Target Dependencies中添加WCDB iOS Static.framework。

在你的项目工程配置的Build Phases->Linked Binary and Libraries中添加WCDB.framework和libz.tbd。注意,这里有两个WCDB.framework,需要添加WCDB iOS Static的target下的WCDB.framework

在你的项目工程配置的Build Settings->Other Linker Flags中添加-all_load和-ObjC。

在你的代码文件头引入头文件#import 。

由于WCDB是基于Objective-C++,因此需要将引用WCDB的源文件后缀.m改为.mm


我选择的是第二种方式cocoapods安装

pod install完成,直接运行Xcode报错,错误原因为  “use of '@import' when modules are disabled,....“  位置在引用的ProjectName-Bridging-Header.h里面的“@import Charts;” 行代码(项目里面用到了oc与swift混编“Charts 为swift代码”

解决思路:网上查找后获取到一条信息,下面是原话

大概意思是如果在cpp或.文件里引用了桥接文件modules将会自动禁用;

第一反应我的桥接文件没有放在 cpp文件也没有放在.mm文件,怎么一样报错;

后来一想,应该是桥接文件放在了.pch里面,马上将桥接文件移出只在用到的地方调用;

运行,还是报错,这次报的是"'type_traits' file not found",如图:

报错的文件在WCDB里面,这时想到是不是编译器的问题,于是将Build Settings下的 C++ Standard Library的值从libstdc++(GNU C++ standerd library) 切换到libc++(LLVM C++ standerd library with C++11 support),运行,Build Success!!!

暂时记录一下,以免后面再用的时候忘记

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 1、通过CocoaPods安装项目名称项目信息 AFNetworking网络请求组件 FMDB本地数据库组件 SD...
    阳明AI阅读 16,140评论 3 119
  • Part.1 我在天堂,遥遥相望。 - 你好,我是林子矜。我不是一名人类,也不是一个动物,只是一个灵魂,一个死人的...
    玖酒九九阅读 503评论 0 1
  • 今天我们要分享的书是《超效率手册》,作者斯科特·扬是加拿大著名的学霸,他仅用1年时间就学完4年制MIT计算机科学课...
    贝拉Belle阅读 386评论 0 0
  • 鑫恒志远参加Ulord主节点竞选宣言 尊敬的Ulord基金会: 我们是北京鑫恒志远管理咨询中心(有限合伙),我们郑...
    鑫恒志远阅读 194评论 0 0
  • 今天生日,不过说实话,当年龄走向30+这条不归路后,我就完全没有过生日的心思了,因为这天除了意味着又老一岁意外,没...
    爱君如初阅读 1,643评论 1 8

友情链接更多精彩内容