将静态库添加到podspec

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

静态库包含:

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

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

 source_files public_header_files private_header_files preserve_paths libraries xcconfig vendored_libraries 

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

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

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

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

由此产生的subspec将是:

 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我们正在发布上面的静态库。 这将保留文件,并相应地修改LIBRARY_SEARCH_PATHS

 openssl.libraries = 'ssl', 'crypto' 

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

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

告诉项目在哪里find标题。 我们不能使用public_header_files因为这是一个subspec

你可以尝试这样做,就像在这里完成https://github.com/krzak/OpenSSL ,或者只是使用这个Pod与你项目,如果你发现它convienence

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