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