向 podspec 添加静态库

22

我的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

甚至更好的是,我能否在子规格中定义这个静态库?

2个回答

37

我成功将静态库作为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


我按照上述步骤操作,但是对我不起作用(未找到#include <openssl/dh.h>)。文件夹结构libraries/openssl-1.0.1e是否在项目根目录中? - Sandeep Kumar

6
您可以像这里https://github.com/krzak/OpenSSL这样尝试,或者如果您发现它方便,只需将此Pod与您的项目一起使用。
pod 'OpenSSL', :podspec => 'https://raw.github.com/krzak/OpenSSL/master/OpenSSL.podspec'

+1 感谢Marcin。这很有帮助。我做了一些稍微不同的事情,很快就会发布。 - hpique

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接