ios - 将静态库添加到 podspec

标签 ios openssl static-libraries cocoapods

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

静态库包含:

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

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

source_files
public_header_files
private_header_files
preserve_paths
libraries
xcconfig
vendored_libraries

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

最佳答案

我设法将静态库添加为 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'

保留 header 和许可证文件。我们将使用下面的 header 。

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

关于ios - 将静态库添加到 podspec,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19481125/

相关文章:

ios - 像 React Native 中的水平 UIStackView 一样堆叠两个按钮

ios - Xcode 10.2更新问题构建系统错误-1 : Unable to load contents of file list: input/output xcfilelist

ios - 使用带有静态库的插件构建Flutter iOS项目时出错

c - 如何使用 openssl 在 C 代码中进行相互 tls 身份验证?

ios - Xcode 子项目框架依赖构建失败

c++ - Visual Studio 2015 社区 ZeroMQ 静态库链接错误

ios - UIApplication实例失败

ios - 需要有关打印 [NSDate 日期] 的信息

android - 为 Android 编译最新的 OpenSSL

openssl - 获取 OpenSSL 的 OpenSC PKCS11 引擎日志