我的podspec需要一个静态库(OpenSSL)。为方便起见,我将使用pod发送库。
静态库包含:
MyPod/openssl/bin/libcrypto.a
和MyPod/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
或者甚至更好,我可以在子规范中定义这个静态库吗?
答案 0 :(得分:30)
我设法将静态库添加为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
。
答案 1 :(得分:6)
您可以尝试这样做https://github.com/krzak/OpenSSL,或者只是在项目中使用此Pod,如果您发现它便于携带
pod 'OpenSSL', :podspec => 'https://raw.github.com/krzak/OpenSSL/master/OpenSSL.podspec'