归档和分析的 SQLCipher "sqlite_3key" 警告,调试没有警告

Posted

技术标签:

【中文标题】归档和分析的 SQLCipher "sqlite_3key" 警告,调试没有警告【英文标题】:SQLCipher "sqlite_3key" warning for Archiving and Profiling, No Warning for Debug 【发布时间】:2013-06-05 03:09:41 【问题描述】:

我已按照 ios 的 SQLCipher 官方网站中的文档进行操作。我导入了 sqlite3.h。我添加了 openssl 和 sqlcipher xode.proj。他们其实都很好。

它正在加密数据库,我可以查询它们。构建是好的,除了这个关于 sqlite3_key 的小警告。

我可以看到自定义脚本的逐步构建过程,一切都很好。

我可以在头文件中看到该函数的 SQLITE_HAS_CODEC 条件在本机 sqlite3 中不存在,因为我们使用的是 sqlite 的 sqlcipher 版本。

我已将-DSQLITE_HAS_CODEC 添加到 C 标志和 C++ 标志中,这适用于项目和目标构建设置。

除此警告外,整体 SQLCipher 工作正常:

函数“sqlite3_key”的隐式声明在 C99 中无效

在 Xcode 中分析和归档二进制文件期间不断弹出。

通过 Debug 构建它不会引发此警告。

我还有什么需要做的吗?

【问题讨论】:

【参考方案1】:

我(仍然)假设您在调试和发布配置之间有一些不同的构建设置(例如“标题搜索路径”)。如果您在构建设置中找不到问题,我建议您检查源文件的预处理输出:

选择发出警告的 .m 文件。 从 Xcode 菜单中选择产品 -> 生成输出 -> 预处理文件。 在预处理输出窗口的底部,切换 “正在运行”(默认使用调试配置)和 “Profiling”(使用 Release 配置)。

在预处理输出中,搜索两个版本中的 sqlite3_key() 声明。您还可以检查是否包含正确版本的“sqlite3.h”。没有标题搜索路径,就会有一行

# 1 "/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS6.1.sdk/usr/include/sqlite3.h" 1 3 4

为 SQLCipher 正确设置标头搜索路径后,“sqlite3.h”的路径应该不同,因此您可以检查并再次比较“运行/调试”和“分析/发布”输出。

【讨论】:

嗨 Martin R,这是我得到的: sqlite3_key Running - line 37284 Profiling - line 37265 Header Path Running: # 4396 "sqlcipher/sqlite3.h" int sqlite3_key( sqlite3 *db, const void * pKey, int nKey);分析: - 什么都没有。所以我尝试从 Release 中删除: -DNS_BLOCK_ASSERTIONS=1 ,现在在 Profiling 中可以了。这个可以吗?这个标志重要吗? 哦,问题来了:如果我将它留在任何架构|任何用于 -DNS_BLOCK_ASSERTIONS=1 的 SDK,它都会标记该警告。但是,如果我至少选择 Any iOS SDK,它现在可以与 -DNS_BLOCK_ASSERTIONS=1 一起使用。感谢马丁的所有帮助,现在一切都好!

以上是关于归档和分析的 SQLCipher "sqlite_3key" 警告,调试没有警告的主要内容,如果未能解决你的问题,请参考以下文章

electron 集成 SQLCipher

matlab里sq啥意思

安卓4.4.2系统使用sqlcipher时,出现dlopen failed: cannot locate symbol referenced by...

SQLCipher、Xcode 4 和创建 IPA

FMDB/SQLCipher 和 FMDBMigrationManager 迁移失败

定时清理归档脚本