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



请注意,此问题是由MyApp的源代码声明引起的,作为警告,但Xcode构建将其视为错误,

sqlite3_key(_db, [password UTF8String], (int)password.length);

我上面的那一行仍然保留在MyApp中,因为将与数据库相关的代码逐渐移到MyDataPlatform中需要花费时间,并且我认为SQLCipher header 仍然应该作为链接中的相关框架在主机应用中可用。

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

下面是我的pod文件的结构(重构后),
# 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下,即
# Uncomment this line to define a global platform for your project
platform :ios, '9.0'

target 'MyAppWithDatabase' do
  # Uncomment this line if you're using Swift or would like to use dynamic frameworks
  use_frameworks!

  pod 'Google/Analytics'
  pod 'GoogleMaps'
  pod 'SQLCipher', '~>3.4.2'
  # ...

  target 'MyAppWithDatabaseTests' do
    inherit! :search_paths
  end

end

最佳答案

在应用程序中定义SQLITE_HAS_CODEC后,我的问题解决了,

MyApp -> Build Settings -> Other C Flags

在应用程序中添加SQLITE_HAS_CODEC=1后,另一种解决方案也可以使用,
MyApp -> Build Settings -> Preprocessor Macros

关于ios - Xcode构建错误- “Implicit declaration of function ‘sqlite3_key’在C99中无效”,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/59525583/

10-10 21:09