我有一个 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 安装/清理/构建所有内容,新的依赖项编译得很好(GRDB),但在编译旧依赖项 (WhirlyGlobe) 的过程中,我得到:
'sqlite3.h' file not found
因此,两个 pod 都可以自行编译,但在 sqlite 标头方面似乎存在一些交互。
(事实上,我一开始并没有注意到这个问题,因为我没有清理我的项目,在重新构建时,XCode 只需要编译 GRDB,这很好。这仅在清洁后发生。
到目前为止,我发现了什么:
WhirlyGlobe和GRDB.swift都将sqlite作为一个库。
在 GRDB podspec 中:
s.library = 'sqlite3'
在 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
的,并且是 WhirlyGlobeLib 的一部分,正如 podspec 所建议的那样
到目前为止我做了什么:
pod deintegrate
,pod install
与封闭的XCode- 尝试将带有 GRDB
sqlite3.h
的目录添加到标头搜索路径(我的项目和 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: - GRDB 2.0 for Swift 4 不再包含 sqlite3.h。