2013-06-05 105 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歡迎您! –