是否可以在静态库中包含第三方库? 示例:AFNetworking可以包含在静态库
中答案 0 :(得分:3)
您的问题的直接答案是肯定的,如果他们公开了一个公共API(一组标题供您参考),您肯定可以包含任何第三方库。对于AFNetworking,他们通过提供Cocoapods脚本使其变得如此简单,以便您的项目可以引用它。
但请注意,当您释放包含AFNetwork的静态库时,如果您的静态lib用户决定在他自己的代码中使用AFNetwork,Obj-C编译器会抱怨重复的符号,他将无法用你的静态库构建他的项目。
我的建议
我的建议:请参阅上面@Amar分享的链接。如果您希望与其他开发人员或社区共享,则不要在静态库中包含任何第三方库。始终考虑使用其他第三方静态库的引用而不是包含它们,例如使用Cocoapods。
答案 1 :(得分: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}