swift3,sqlite报错Could not build Objective-C module 'sqlite3' ?

迁移到swift3后,sqlite报错 Could not build Objective-C module 'sqlite3'

我什么内容都没改.是一个教程里的示例代码,直接打开的话不报错, 但是如果在打开的时候选择迁移到swift3.0,就报错提示:Could not build Objective-C module 'sqlite3'

图片描述

阅读 9.8k
2 个回答

问题描述信息太少了,不太清楚题主具体的工程环境是怎样的,以下供参考,应该能解决问题

在纯的 Swift 环境中,如果要引用其他的 CObjectice-C 的代码目前已知的有两种方式:

  1. 桥接头文件。仅适用于 Xcode 环境

  2. modulemap 文件。适用于 XcodeSwift Package Manager 等各种环境。(主要是 clang/llvm 在起作用)

桥接头文件

桥接头文件(Bridging Header)。是 Xcode 提供的比较简单的方案,来解决在同一个工程当中 Swift 引用 Objective-CC 的问题。

题主要的应该不是这种方式,就不做说明了!需要也可以参考这个博客 【iOS开发】Swift、OC 混编用到的 Bridging-Header.h

modulemap

这个才是重点! modulemap 简单来说是 Swift 使用的一个模块描述文件,与 Bridging Header 相比它并不能应用于同一个工程里面的混编应用,而是使用模块(Module/Framework)的方式来导入进 Swift 工程。
更详细可以参考:Module System of Swift (简析 Swift 的模块系统)

解决参考

知识点终于搬运完成了。截图里面的意思应用是使用的第二种方式来导入 sqlite3 这个库。
如果是出现了这个问题可以检查下:

  1. Building Setting -> Import Paths 对于 modulemap 的路径是否正确

  2. 检查 modulemap 里面内容是否正确

  3. modulemap 里面引用的 sqlite3 的库是否有效

随便附上 Vapor/CSQLitemodulemap

module CSQLiteLinux [system] {
    header "/usr/include/sqlite3.h"
    link "sqlite3"
    export *
}

module CSQLiteMac [system] {
    header "/usr/local/opt/sqlite/include/sqlite3.h"
    link "sqlite3"
    export *
}

其它参考:
Swift and Objective-C in the Same Project
Getting Started Using C Libraries from Swift

先要 build 引进来的 SQLite.swift 项目,还要记得把动态库添加进来。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进