2013-06-05 151 views
0

我已经按照iOS官方SQLCipher站点中的文档。我导入了sqlite3.h。我添加了openssl和sqlcipher xode.proj。他们其实都很好。SQLCipher“sqlite_3key”警告存档和分析,没有警告的调试

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

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

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

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

总体SQLCipher工作正常,除了这样的警告:

功能“sqlite3_key”的隐式声明是在C99

是不断剖析期间弹出和存档在Xcode二进制无效。

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

我还有什么要做的吗?

回答

1

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

  • 选择发出警告的.m文件。
  • 从Xcode菜单中选择产品 - >生成输出 - >预处理文件。
  • 在预处理输出窗口的
    • 之间的底部,开关“运行”(使用默认调试配置)和
    • “剖析”(它使用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”应该是不同的,所以你可以检查,并再次比较“运行/调试“和”分析/释放“输出。

+0

嗨马丁R,这是我得到: sqlite3_key 运行 - 线37284 剖析 - 线37265 头路径 运行: #4396 “sqlcipher/sqlite3.h” INT sqlite3_key( sqlite3 * db, const void * pKey,int nKey ); 分析: - 没有什么。 所以我试着从版本中删除:-DNS_BLOCK_ASSERTIONS = 1,现在在分析中可以。 这样好吗?这个旗子很重要吗? – RegisteredUser

+0

噢,所以问题来了:如果我将它留在任何架构|任何SDK中--DNS_BLOCK_ASSERTIONS = 1,它会标记该警告。但是,如果我至少选择任何iOS SDK,则它现在可与-DNS_BLOCK_ASSERTIONS = 1一起使用。感谢所有的帮助,马丁,现在都很好! – RegisteredUser

+0

@TRF欢迎您! –