将静态库添加到 podspec

Posted

技术标签:

【中文标题】将静态库添加到 podspec【英文标题】:Add static library to podspec 【发布时间】:2013-10-29 03:42:25 【问题描述】:

我的 podspec 需要一个静态库 (OpenSSL)。为方便起见,我将库与 pod 一起运送。

静态库包含:

二进制文件:MyPod/openssl/bin/libcrypto.aMyPod/openssl/bin/libsll.a 标题:MyPod/openssl/include/openssl/*.h 自己的许可证(除了我项目的许可证):MyPod/openssl/include/LICENSE

在我的 podspec 中表达这一点的正确方法是什么?我见过各种使用以下属性组合的示例,我目前正在尝试不同的组合:

source_files
public_header_files
private_header_files
preserve_paths
libraries
xcconfig
vendored_libraries

或者更好的是,我可以在子规范中定义这个静态库吗?

【问题讨论】:

【参考方案1】:

我设法将静态库添加为subspec。我更喜欢这种方法,因为它默认使用我的 pod 附带的构建,并且还允许用户根据需要提供自己的构建。

如前所述,静态库是 OpenSSL,但以下适用于任何静态库。我正在使用以下目录结构:

libraries/openssl-1.0.1e/include/openssl/*.h
libraries/openssl-1.0.1e/LICENSE
libraries/openssl-1.0.1e/lib/*.a

生成的子规范将是:

s.subspec 'OpenSSL' do |openssl|
    openssl.preserve_paths = 'libraries/openssl-1.0.1e/include/openssl/*.h', 'libraries/openssl-1.0.1e/include/LICENSE'
    openssl.vendored_libraries = 'libraries/openssl-1.0.1e/lib/libcrypto.a', 'libraries/openssl-1.0.1e/lib/libssl.a'
    openssl.libraries = 'ssl', 'crypto'
    openssl.xcconfig =  'HEADER_SEARCH_PATHS' => "$PODS_ROOT/#s.name/libraries/openssl-1.0.1e/include/**" 
end

一行一行:

openssl.preserve_paths = 'libraries/openssl-1.0.1e/include/openssl/*.h', 'libraries/openssl-1.0.1e/include/LICENSE'

保留标头和许可文件。我们将使用下面的标题。

openssl.vendored_libraries = 'libraries/openssl-1.0.1e/lib/libcrypto.a', 'libraries/openssl-1.0.1e/lib/libssl.a'

告诉 CocoaPods,我们正在 pod 中提供上述静态库。这将保留文件,并相应地修改LIBRARY_SEARCH_PATHS

openssl.libraries = 'ssl', 'crypto'

在“其他链接器标志”中包含库。

openssl.xcconfig =  'HEADER_SEARCH_PATHS' => "$PODS_ROOT/#s.name/libraries/openssl-1.0.1e/include/**" 

告诉项目在哪里可以找到标题。我们不能使用public_header_files,因为这是subspec

【讨论】:

我按照上述步骤操作,但它不适合我。 (#include <openssl/dh.h> 未找到)。文件夹结构libraries/openssl-1.0.1e在项目根目录下?【参考方案2】:

你可以尝试像这里https://github.com/krzak/OpenSSL 那样做,或者如果你觉得方便的话,就在你的项目中使用这个 Pod

pod 'OpenSSL', :podspec => 'https://raw.github.com/krzak/OpenSSL/master/OpenSSL.podspec'

【讨论】:

+1 谢谢马尔辛。这很有帮助。我做了一些稍微不同的事情,我很快就会发布。

以上是关于将静态库添加到 podspec的主要内容,如果未能解决你的问题,请参考以下文章

如何将 fork 存储库添加到 CocoaPod 的 .podspec 文件中的“s.dependency”属性?

将静态库添加到 C 或 C++ 项目的常用方法是啥?

将静态库与静态库链接

自动将“附加包含目录”添加到静态库的用户

如何将qt静态库代码还原动态库

将项目中的标头包含到静态库中