0

我有一个 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

因此,两个 pod 都可以自己编译,但似乎与 sqlite Header 有一些交互。

(其实一开始我并没有注意到这个问题,因为我没有清理我的项目并且在重新构建时,XCode 只需要编译 GRDB,就可以了。这只有在清理之后才会发生。)

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

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

GRDB 实际上sqlite3.h在其 Pod 安装中包含一个文件,位于

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

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

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

到目前为止我做了什么:

  • 运行pod deintegratepod install关闭 XCode
  • 尝试将带有sqlite3.hfrom GRDB 的目录添加到标题搜索路径(我的项目和 WhirlyGlobe Pods 目标的目录)
  • 尝试将“始终搜索用户路径”设置为“是”
  • 标题搜索路径的各种其他内容,我现在恢复了。

任何提示(非常)赞赏。

4

1 回答 1

2

GRDB 的作者在这里。

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

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

  1. 替换#import "sqlite3.h"#import <sqlite3.h>, 以便编译器知道应该在系统头文件中搜索它。
  2. 切换到 Swift 4:用于 Swift 4 的 GRDB 2.0 不再包含 sqlite3.h。
于 2017-09-26T20:02:30.653 回答