2013-10-18 134 views

回答

3

直接回答您的問題是,你絕對可以包括任何第三方庫,如果他們公開公共API(一組標題,供你參考的)。對於AFNetworking,他們通過提供一個Cocoapods腳本使其非常簡單,以便您的項目可以引用它。

但是請注意,當你釋放你的靜態庫包含AFNetwork時,如果你的靜態lib用戶決定在他自己的代碼中使用AFNetwork,Obj-C編譯器會抱怨重複的符號,他將無法用你的靜態庫構建他的項目。

我的建議

我的建議是:只是指由@Amar上面共享的鏈接。如果您希望將其與其他開發人員或社區共享,則不要在您的靜態庫中包含任何第三方庫。總是考慮使用其他第三方靜態庫的引用,而不是包含它們,例如使用Cocoapods。

+0

謝謝......我一直在努力弄清楚一個星期的靜態庫,這是我最後的障礙。它們在很大程度上沒有用處,而且實施起來也很荒謬。什麼是蘋果的思想? – GoldenJoe

0

只是爲了完整性,因爲我覺得以前的答案/意見提供了很好的意見,這是一個自定義腳本,包括第三方的lib到構建

set -e 
set +u 

TGT_FULLPATH="${BUILT_PRODUCTS_DIR}/${EXECUTABLE_NAME}" 
TMP_FULLPATH="${BUILT_PRODUCTS_DIR}/original_${EXECUTABLE_NAME}" 
THIRPARTY_FULLPATH=... 
ARCHSPECIFIC_THIRDPARTY="${BUILT_PRODUCTS_DIR}/thinThirdparty" 

# What's the architecture for the lib we just built? 
LIPO_ARCH=$(lipo -info ${TGT_FULLPATH} | awk 'END{ print $NF }') 

# Create a thirdparty lib only for the current architecture 
lipo -thin ${LIPO_ARCH} ${THIRPARTY_FULLPATH} -output ${ARCHSPECIFIC_THIRDPARTY} 

# Join the two libaries 
mv ${TGT_FULLPATH} ${TMP_FULLPATH} 
libtool -static -o ${TGT_FULLPATH} ${TMP_FULLPATH} ${ARCHSPECIFIC_THIRDPARTY} 2>&1 >/dev/null 

# Remove the temp artifacts 
rm ${TMP_FULLPATH} 
rm ${ARCHSPECIFIC_THIRDPARTY} 
相關問題