' sqlite3.h'使用WhirlyGlobe和GRDB pod

时间:2017-09-26 16:50:33

标签: ios xcode cocoapods grdb

我设置了一个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 all, new dependency编译得很好(GRDB),但是在编译旧的(WhirlyGlobe)时,我得到:

'sqlite3.h' file not found

所以,两个pod都在自己编译,但似乎有一些关于sqlite Header的交互。

(事实上我一开始并没有注意到这个问题,因为我没有清理我的项目和重建,XCode只需要编译GRDB,这很好。这只发生在干净。)

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

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

GRDB实际上在

中安装了sqlite3.h个文件

Pods/GRDB.swift/Support/sqlite3.h

WhirlyGlobes安装中似乎没有包含此类文件(使用find Pods/ -name "sqlite3.h"进行检查。

引发错误的文件#import "sqlite3.h"VectorDatabase.h,而podspec建议的部分WhirlyGlobeLib

到目前为止我做了什么:

  • 使用已关闭的XCode
  • 运行pod deintegratepod install
  • 尝试将带有sqlite3.h的目录从GRDB添加到标题搜索路径(我的项目和WhirlyGlobe Pods目标)
  • 尝试设置"始终搜索用户路径"到"是"
  • Header Search路径的各种其他内容,我现在还原了。

任何提示(非常感谢)。

1 个答案:

答案 0 :(得分:1)

GRDB的作者。

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

现在,这里有两个可能的解决方案:

  1. #import "sqlite3.h"替换为#import <sqlite3.h>,以便编译器知道应该在系统标头中搜索它。
  2. 切换到Swift 4:Swift 4的GRDB 2.0不再包含sqlite3.h。