使用 WhirlyGlobe 和 GRDB pod 时找不到 '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 安装/清理/构建所有内容,新的依赖项编译得很好(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 deintegratepod install与封闭的XCode
  • 尝试将带有 GRDBsqlite3.h的目录添加到标头搜索路径(我的项目和 WhirlyGlobe Pods 目标的目录)
  • 尝试将"始终搜索用户路径"设置为"是">
  • 标题搜索路径的其他各种东西,我现在恢复了。

任何提示都(非常)非常感谢。

GRDB的作者在这里。

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

现在,以下是针对您的问题的两种可能的解决方案:

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

最新更新