'sqlite3.h' 使用 WhirlyGlobe 和 GRDB 时找不到文件 pods

'sqlite3.h' file not found when using WhirlyGlobe and GRDB pods

我设置了一个 Podfile 以使用 WhirlyGlobeMaply:

platform :ios, '10.2'

project 'MyProject.xcodeproj'

target 'MyProject' do
  use frameworks!

  pod 'WhirlyGlobe', '2.4'
  pod 'WhirlyGlobeResources'

  [some other pods]
end

构建良好。但是当我添加 GRDB.swift

pod GRDB.swift

然后 pod install/clean/build 一切,新依赖编译得很好 (GRDB),但是在编译旧依赖 (WhirlyGlobe) 的过程中,我得到:

'sqlite3.h' file not found

因此,两者 pods 都可以自己编译,但在 sqlite Header 方面似乎存在一些交互。

(其实我一开始没有注意到这个问题,因为我没有清理我的项目,在re-building,XCode上只需要编译GRDB,就可以了。这只会在清洁后发生。)

到目前为止我发现了什么:

WhirlyGlobe 和 GRDB.swift 都将 sqlite 作为库包含在内。

GRDB 实际上在其位于

的 Pod 安装中包含一个 sqlite3.h 文件

Pods/GRDB.swift/Support/sqlite3.h.

WhirlyGlobes 安装中似乎没有这样的文件(使用 find Pods/ -name "sqlite3.h" 检查。

引发错误的文件 #import "sqlite3.h"VectorDatabase.h 并且是 WhirlyGlobeLib 的一部分,正如 podspec 所建议的那样

到目前为止我做了什么:

非常感谢任何提示。

这里是 GRDB 的作者。

对于上下文:Swift 3 的 GRDB 附带 sqlite3.h,以便应用程序在需要时使用 SQLite 的 low-level C api。 sqlite3.h 与 iOS SDK 附带的 header 相同,但它已被复制以解决 Clang 构建模块方式的限制。

现在有两种可能的解决方案可以解决您的问题:

  1. #import "sqlite3.h"换成#import <sqlite3.h>,让编译器知道应该在系统headers.
  2. 中查找
  3. 切换到 Swift 4:Swift 4 的 GRDB 2.0 不再包括 sqlite3.h.