将静态库添加到podspec

hpi*_*que 17 openssl static-libraries ios cocoapods

我的podspec需要一个静态库(OpenSSL).为方便起见,我正在运送带有吊舱的图书馆.

静态库包含:

  • 二进制文件: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
Run Code Online (Sandbox Code Playgroud)

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

hpi*_*que 32

我设法将静态库添加为subspec.我更喜欢这种方法,因为它默认使用我的pod随附的版本,并且还允许用户提供他们自己的版本,如果他们愿意的话.

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

libraries/openssl-1.0.1e/include/openssl/*.h
libraries/openssl-1.0.1e/LICENSE
libraries/openssl-1.0.1e/lib/*.a
Run Code Online (Sandbox Code Playgroud)

由此产生的子规格将是:

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

逐行:

openssl.preserve_paths = 'libraries/openssl-1.0.1e/include/openssl/*.h', 'libraries/openssl-1.0.1e/include/LICENSE'
Run Code Online (Sandbox Code Playgroud)

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

openssl.vendored_libraries = 'libraries/openssl-1.0.1e/lib/libcrypto.a', 'libraries/openssl-1.0.1e/lib/libssl.a'
Run Code Online (Sandbox Code Playgroud)

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

openssl.libraries = 'ssl', 'crypto'
Run Code Online (Sandbox Code Playgroud)

包括"Other Linker Flags"中的库.

openssl.xcconfig = { 'HEADER_SEARCH_PATHS' => "${PODS_ROOT}/#{s.name}/libraries/openssl-1.0.1e/include/**" }
Run Code Online (Sandbox Code Playgroud)

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


Mar*_*cin 6

您可以尝试这样做,就像在这里完成https://github.com/krzak/OpenSSL一样,或者如果您发现它的话,只需将此Pod用于您的项目

pod 'OpenSSL', :podspec => 'https://raw.github.com/krzak/OpenSSL/master/OpenSSL.podspec'
Run Code Online (Sandbox Code Playgroud)