在静态库中包含第三方库(例如:AFNetworking)

是否有可能在静态库中包含第三方库? 示例:AFNetworking是否可以包含在静态库中

对于你的问题的直接回答是YES,如果他们暴露一个公共的API(一组标题供你参考),你肯定可以包含任何第三方库。 对于AFNetworking,他们已经通过提供一个Cocoapods脚本来简化它,以便您的项目可以引用它。

但是请注意,当你释放包含AFNetwork的静态库时,如果你的静态lib用户决定在他自己的代码中使用AFNetwork,Obj-C编译器会抱怨重复的符号,他将无法构build他的项目与您的静态库。

我的build议

我的build议:只是指上面的@Amar共享的链接。 如果您希望与其他开发人员或社区共享,则不要在静态库中包含任何第三方库。 始终考虑使用其他第三方静态库的引用,而不是包括它们,例如使用Cocoapods。

只是为了完整性,因为我认为以前的答案/评论提供了很好的build议,这是一个自定义脚本,将第三方lib包含到构build的输出库

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}