Добавить статическую библиотеку в 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

Или, что еще лучше, могу ли я определить эту статическую библиотеку в подспецификации?


person hpique    schedule 20.10.2013    source источник


Ответы (2)


Мне удалось добавить статическую библиотеку как файл 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

Построчно:

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

Сообщает проекту, где найти заголовки. Мы не можем использовать public_header_files, потому что это subspec.

person hpique    schedule 26.10.2013
comment
Я выполнил вышеуказанные шаги, но это не работает для меня. (#include <openssl/dh.h> не найдено). Структура папок libraries/openssl-1.0.1e находится в корневом каталоге проекта? - person Sandeep Kumar; 07.09.2018

Вы можете попробовать сделать это, как здесь https://github.com/krzak/OpenSSL, или просто используйте этот Pod с вашим проектом, если вы найдете его удобным

pod 'OpenSSL', :podspec => 'https://raw.github.com/krzak/OpenSSL/master/OpenSSL.podspec'
person Marcin    schedule 21.10.2013
comment
+1 Спасибо, Марчин. Это было полезно. Я сделал что-то немного другое, что я опубликую в ближайшее время. - person hpique; 26.10.2013