在 Swift 项目中包含 SQLCipher pod 时如何避免构建错误?

Posted

技术标签:

【中文标题】在 Swift 项目中包含 SQLCipher pod 时如何避免构建错误?【英文标题】:How do I avoid build errors when I include SQLCipher pod in Swift project? 【发布时间】:2020-11-12 11:36:23 【问题描述】:

我正在使用sqlite.swift

当我将它包含在我的 pod 文件中时:

  pod 'SQLite.swift/SQLCipher', '~> 0.12.2'

SQLCipher 是否仍与 SQLite.swift 兼容? 我需要额外的 pod 语句来导入 SQLCipher 和 SQLite 还是只需要这一行?

XCode 在我构建时报告错误,如下所示:

/Pods/SQLCipher/sqlite3.h:6907:10:重新定义“sqlite3_index_orderby” /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator14.0.sdk/usr/include/sqlite3.h:6758:10:之前的定义在这里 Pods/SQLite.swift/Sources/SQLiteObjc/include/SQLiteObjc.h:26:9:在构建从 /Library/Developer/Xcode/DerivedData/SpeechCollector-btdxklvmapneuigwvexrhccrhodq/Build/Products/Debug-iphonesimulator/SQLite 导入的模块“SQLite3”时.swift/SQLite.framework/Headers/SQLiteObjc.h:26: /:2:9: 在从 :2 包含的文件中: /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator14.0.sdk/usr/include/sqlite3ext.h:20:10:在/Applications/Xcode.app/包含的文件中目录/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator14.0.sdk/usr/include/sqlite3ext.h:20:

【问题讨论】:

【参考方案1】:

我们的项目遇到了同样的问题,在解决之前我们无法更新到下一个 Xcode。

repo SQLite.swift 看起来已被废弃,但在拉取请求中,this one 为我们的项目解决了问题。

我们所做的是下载 repo 并将其添加为本地依赖项(我们使用的是 Cocoapods),然后我们添加了该 PR 中出现的更改。 在文件SQLiteObjc.h 中,我们从

@import Foundation;
#if defined(SQLITE_SWIFT_STANDALONE)
@import sqlite3;
#else
@import SQLite3;
#endif

@import Foundation;
#if defined(SQLITE_SWIFT_STANDALONE)
@import sqlite3;

#elif defined(SQLITE_SWIFT_SQLCIPHER)
@import SQLCipher;

#else
@import SQLite3;
#endif

希望这对你也有帮助。

【讨论】:

以上是关于在 Swift 项目中包含 SQLCipher pod 时如何避免构建错误?的主要内容,如果未能解决你的问题,请参考以下文章

如何在我的 Swift 项目中包含一个库?

Parse Server Swift Logic 用于抓取数组中包含的所有项目

在android studio的apk中包含.so库[重复]

我想在swift或objective-c中包含BluetoothManager框架,有问题

不能在带有 Xcode 11 包管理器的 Swift 包中包含 C 文件

如何在 CSOM 请求中包含项目的 FieldValues