2013-10-20 16 views
12

Il mio podspec richiede una libreria statica (OpenSSL). Per comodità, sto spedendo la libreria con il pod.Aggiungi libreria statica a podspec

La libreria statica contiene:

  • Binari: MyPod/openssl/bin/libcrypto.a e MyPod/openssl/bin/libsll.a
  • intestazioni: MyPod/openssl/include/openssl/*.h
  • la propria licenza (oltre a patente di mio progetto): MyPod/openssl/include/LICENSE

Cos'è il modo corretto di esprimerlo nel mio podspec? Ho visto vari esempio che utilizzano combinazioni delle seguenti proprietà e sto attualmente cercando diverse combinazioni:

source_files 
public_header_files 
private_header_files 
preserve_paths 
libraries 
xcconfig 
vendored_libraries 

O meglio, posso definire questo libreria statica in un subspec?

risposta

24

sono riuscito ad aggiungere la libreria statica come subspec. Preferisco questo approccio perché utilizza la build fornita con il mio pod per impostazione predefinita e consente inoltre agli utenti di fornire la propria build, se lo desiderano.

Come accennato, la libreria statica è OpenSSL ma quanto segue si applica a qualsiasi libreria statica. Sto utilizzando la seguente struttura di directory:

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

Il subspec risultante sarebbe:

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 

Linea per linea:

openssl.preserve_paths = 'libraries/openssl-1.0.1e/include/openssl/*.h', 'libraries/openssl-1.0.1e/include/LICENSE' 

Preserve intestazioni e il file di licenza. Useremo le intestazioni di seguito.

openssl.vendored_libraries = 'libraries/openssl-1.0.1e/lib/libcrypto.a', 'libraries/openssl-1.0.1e/lib/libssl.a' 

Dire a CocoaPods che stiamo spedendo le librerie statiche sopra nel pod. Ciò manterrà i file, oltre a modificare LIBRARY_SEARCH_PATHS di conseguenza.

openssl.libraries = 'ssl', 'crypto' 

Include le librerie in "Altri linker flag".

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

Indica al progetto dove trovare le intestazioni. Non possiamo usare public_header_files perché questo è un subspec.

4

Si può provare farlo come si fa qui https://github.com/krzak/OpenSSL, o semplicemente utilizzare questo Pod con te progetto, se a trovarlo convienence

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

+1 Grazie Marcin. Questo è stato utile. Ho fatto qualcosa di leggermente diverso, che pubblicherò a breve. – hpique

Problemi correlati