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

Ste*_*Kuo 5 ios cocoapods swift

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

编辑:我尝试使用preserve_paths,vendored_librariesxcconfig如此处回答。问题仍然是如何从 Swift 导入模块。

编辑 2:我还尝试使用module_map指向我的module.map文件(如此处记录),但遗憾的是 CocoaPods 1.1.1 崩溃了 ( [!] Oh no, an error occurred.)。

Ste*_*Kuo 2

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

在这里使用了一个子规格作为大纲。这是 podspec subspec 片段,假设静态库位于libtiffpod 模块的根目录下。

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
Run Code Online (Sandbox Code Playgroud)