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

时间:2017-01-06 23:10:57

标签: 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但是module.map仍然未知Xcode,最终结果是我的Swift文件中的import foo是错误的。

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

编辑2:我也尝试使用module_mapmodule.map文件指向documented here,但遗憾的是CocoaPods 1.1.1崩溃([!] Oh no, an error occurred.)。

1 个答案:

答案 0 :(得分:0)

我得到了它的工作。在我的情况下,我依赖于使用https://github.com/ashtons/libtiff-ios为iOS(x86和arm)预建的libtiff C库。

我使用了一个子规格为outline here。这是podspec subspec片段,假设静态库位于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