ios - CocoaPods 项目依赖于本地静态 C 库

标签 ios swift cocoapods

我在本地构建了 C 库(.h.a 文件),我想将其包含在基于 Swift 的 CocoaPods pod 中。如何配置 podspec 以依赖于 .a 文件和 module.map?对于普通的非 CocoaPods Xcode 项目,我只需拖入包含 includelib 的目录,然后添加一个 module.map。使用 CocoaPods 我无法执行此操作,因为 pod install 将覆盖 Xcode 项目文件。 s.library 将不起作用,因为静态库未托管在任何地方。我尝试了 s.vendored_libraries 但 Xcode 仍然不知道 module.map,最终结果是 import foo 从我的 Swift 文件中出错.

编辑:我尝试使用 preserve_pathsvendored_librariesxcconfig 作为 answered here .问题仍然是如何从 Swift 导入模块。

编辑 2:我还尝试使用 module_map 将我的 module.map 文件指向 documented here ,但遗憾的是 CocoaPods 1.1.1 崩溃了([!] 哦不,发生错误。)。

最佳答案

我成功了。在我的例子中,我依赖于使用 https://github.com/ashtons/libtiff-ios 为 iOS(x86 和 arm)预构建的 libtiff C 库。 .

我使用了一个子规范作为 outline here .这是 podspec 子规范片段,假设静态库位于 pod 模块根目录之外的 libtiff

s.subspec 'libtiff' do |libtiff|
  libtiff.source_files = 'libtiff/include/*.h'
  libtiff.public_header_files = 'libtiff/include/*.h'
  libtiff.preserve_paths = 'libtiff/include/*.h'
  libtiff.vendored_libraries = 'libtiff/lib/libjpeg.a', 'libtiff/lib/libpng.a', 'libtiff/lib/libtiff.a', 'libtiff/lib/libtiffxx.a'
  libtiff.xcconfig = { 'HEADER_SEARCH_PATHS' => "${PODS_ROOT}/#{s.name}/libtiff/include/**" }
  # you can't specify "libz" here, must specify "z", see https://github.com/CocoaPods/CocoaPods/issues/3232
  libtiff.library = 'z'
end

关于ios - CocoaPods 项目依赖于本地静态 C 库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41515843/

相关文章:

ios - 在我的 CocoaPod 中使用未声明的标识符

ios - 检查是否正在播放然后更改按钮上的图标

swift - 无法让 "didBeginContact"工作

iOS GDataXMLElement 设置元素值

ios - Swift 4 - 在其 UIViewController 中更新 UIPageViewController 中的变量

swift - 如何在MTAudioProcessingTapInitCallback中将tapStorageOut传递给clientInfo

ruby - Cocoapods 安装错误 : While executing gem (TypeError)

ios - 在 Pod 中停止本地化

ios - 如何将图像用作 map ?

ios - 将多个 nib 文件与单个 View Controller 一起使用?