web-dev-qa-db-ja.com

静的ライブラリをpodspecに追加します

私のpodspecには静的ライブラリ(OpenSSL)が必要です。便宜上、ライブラリをポッドと一緒に発送します。

静的ライブラリには次のものが含まれます。

  • バイナリ: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

またはさらに良いことに、この静的ライブラリをサブスペックで定義できますか?

18
hpique

静的ライブラリをsubspecとして追加することができました。このアプローチは、デフォルトでポッドに付属しているビルドを使用し、ユーザーが必要に応じて独自のビルドを提供できるため、このアプローチを好みます。

前述のように、静的ライブラリは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

1行ずつ:

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/**" }

ヘッダーの場所をプロジェクトに指示します。これはsubspecであるため、public_header_filesは使用できません。

32
hpique

ここで行われているように試してみることができます https://github.com/krzak/OpenSSL または、都合がよければ、このポッドをプロジェクトで使用してください

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