'sqlite3.h' 使用 WhirlyGlobe 和 GRDB 时找不到文件 pods
'sqlite3.h' file not found when using WhirlyGlobe and GRDB pods
我设置了一个 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
因此,两者 pods 都可以自己编译,但在 sqlite Header 方面似乎存在一些交互。
(其实我一开始没有注意到这个问题,因为我没有清理我的项目,在re-building,XCode上只需要编译GRDB,就可以了。这只会在清洁后发生。)
到目前为止我发现了什么:
WhirlyGlobe 和 GRDB.swift 都将 sqlite 作为库包含在内。
-
s.library = 'sqlite3'
-
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
with closed XCode
- 试图将带有
sqlite3.h
的目录从 GRDB 添加到 Header 搜索路径(我的项目和 WhirlyGlobe Pods 目标的搜索路径)
- 试图将 "Always Search User Paths" 设置为 "Yes"
- Header 搜索路径的各种其他内容,我现在还原了。
非常感谢任何提示。
这里是 GRDB 的作者。
对于上下文:Swift 3 的 GRDB 附带 sqlite3.h,以便应用程序在需要时使用 SQLite 的 low-level C api。 sqlite3.h 与 iOS SDK 附带的 header 相同,但它已被复制以解决 Clang 构建模块方式的限制。
现在有两种可能的解决方案可以解决您的问题:
- 把
#import "sqlite3.h"
换成#import <sqlite3.h>
,让编译器知道应该在系统headers. 中查找
- 切换到 Swift 4:Swift 4 的 GRDB 2.0 不再包括 sqlite3.h.
我设置了一个 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
因此,两者 pods 都可以自己编译,但在 sqlite Header 方面似乎存在一些交互。
(其实我一开始没有注意到这个问题,因为我没有清理我的项目,在re-building,XCode上只需要编译GRDB,就可以了。这只会在清洁后发生。)
到目前为止我发现了什么:
WhirlyGlobe 和 GRDB.swift 都将 sqlite 作为库包含在内。
-
s.library = 'sqlite3'
-
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
with closed XCode - 试图将带有
sqlite3.h
的目录从 GRDB 添加到 Header 搜索路径(我的项目和 WhirlyGlobe Pods 目标的搜索路径) - 试图将 "Always Search User Paths" 设置为 "Yes"
- Header 搜索路径的各种其他内容,我现在还原了。
非常感谢任何提示。
这里是 GRDB 的作者。
对于上下文:Swift 3 的 GRDB 附带 sqlite3.h,以便应用程序在需要时使用 SQLite 的 low-level C api。 sqlite3.h 与 iOS SDK 附带的 header 相同,但它已被复制以解决 Clang 构建模块方式的限制。
现在有两种可能的解决方案可以解决您的问题:
- 把
#import "sqlite3.h"
换成#import <sqlite3.h>
,让编译器知道应该在系统headers. 中查找
- 切换到 Swift 4:Swift 4 的 GRDB 2.0 不再包括 sqlite3.h.