我已将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 deintegrate
,pod 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/