我已将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作为库包含在内。


In the GRDB podspec

s.library = 'sqlite3'

In the WhirlyGlobe podspec

s.subspec 'Lib' do |l|
  ...
  l.libraries = 'c++', 'sqlite3'
  ...
end



GRDB实际上在Pod安装中包含一个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目标的目录)
尝试将“始终搜索用户路径”设置为“是”
我现在已经还原了标题搜索路径的其他各种功能。


任何提示(非常)赞赏。

最佳答案

GRDB的作者在这里。

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

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


#import "sqlite3.h"替换为#import <sqlite3.h>,以便编译器知道应在系统头文件中对其进行搜索。
切换到Swift 4:用于Swift 4的GRDB 2.0不再包含sqlite3.h。

关于ios - 使用WhirlyGlobe和GRDB Pod时找不到“sqlite3.h”文件,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46431920/

10-10 21:02