我正在将一个大型的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
答案 0 :(得分:0)
在应用程序的
中定义了SQLITE_HAS_CODEC
后,我的问题解决了
MyApp -> Build Settings -> Other C Flags
在应用程序中添加SQLITE_HAS_CODEC=1
后,另一个解决方案也可以使用
MyApp -> Build Settings -> Preprocessor Macros