Xcode构建错误-“函数'sqlite3_key'的隐式声明在C99中无效”

时间:2019-12-30 04:02:46

标签: ios sqlite compiler-errors cocoapods sqlcipher

我正在将一个大型的iOS应用模块化,比如说MyAppWithDatabase分成两个模块(即项目)。因此,在同一个工作空间MyApp下,我将有一个主项目MyDataPlatform作为主机,并有一个链接的MyApp.xcworkspace作为框架。将SQLCipher pod集成到目标MyAppWithDatabase时,它可以正常工作,但是由于所有与数据库相关的代码都在重构中移入MyDataPlatform框架中,因此我想集成{ {1}}仅用于该框架,以保持内部加密机制从主机应用程序抽象出来。现在,当我为框架集成时,它开始产生以下构建错误。

  

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

请注意,此问题是由SQLCipher源代码的一条语句作为警告而产生的,但是Xcode构建将其视为错误,

MyApp

我上面的那行仍然保留在sqlite3_key(_db, [password UTF8String], (int)password.length); 中,因为将与数据库相关的代码逐渐移入MyApp尚需时日,并且我认为SQLCipher标头仍应该在主机应用程序中作为相关标头使用链接的框架。

我在互联网上浏览了许多建议的solutions,但没有一个适合我的情况。我怀疑大多数解决方案都只针对主机应用程序集成MyDataPlatform。当我遇到框架错误时该怎么办?

下面是我的pod文件的结构(重构后)

SQLCipher

以前# Uncomment this line to define a global platform for your project platform :ios, '9.0' workspace 'MyApp.xcworkspace' target 'MyApp' do # Uncomment this line if you're using Swift or would like to use dynamic frameworks use_frameworks! pod 'Google/Analytics' pod 'GoogleMaps' # ... target 'MyAppTests' do inherit! :search_paths end end target 'MyDataPlatform' do project 'MyDataPlatform/MyDataPlatform.xcodeproj' pod 'SQLCipher', '~>3.4.2' #https://discuss.zetetic.net/t/ios-11-xcode-issue-implicit-declaration-of-function-sqlite3-key-is-invalid-in-c99/2198/53 post_install do | installer | print "SQLCipher: link Pods/Headers/sqlite3.h" system "mkdir -p Pods/Headers/Private && ln -s ../../SQLCipher/sqlite3.h Pods/Headers/Private" end end 集成在SQLCipher下,即

MyAppWithDatabase

1 个答案:

答案 0 :(得分:0)

在应用程序的

中定义了SQLITE_HAS_CODEC后,我的问题解决了
MyApp -> Build Settings -> Other C Flags

在应用程序中添加SQLITE_HAS_CODEC=1后,另一个解决方案也可以使用

MyApp -> Build Settings -> Preprocessor Macros