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

Ios 在静态库中包括第三方库(例如:AFNetworking),ios,xcode,static-libraries,Ios,Xcode,Static Libraries,是否可以在静态库中包含第三方库? 示例:AFNetworking是否可以包含在静态库中?您的问题的直接答案是肯定的,如果任何第三方库公开了公共API(供您参考的一组标题),您肯定可以包含它们。对于AFNetworking,他们通过提供Cocoapods脚本使它变得如此简单,以便您的项目可以引用它 但是请注意,当您发布包含AFNetwork在内的静态库时,有一天如果您的静态库用户决定在自己的代码中使用AFNetwork,Obj-C编译器将抱怨重复符号,他将无法使用您的静态库构建他的项目 我的建议

是否可以在静态库中包含第三方库?
示例:AFNetworking是否可以包含在静态库中?您的问题的直接答案是肯定的,如果任何第三方库公开了公共API(供您参考的一组标题),您肯定可以包含它们。对于AFNetworking,他们通过提供Cocoapods脚本使它变得如此简单,以便您的项目可以引用它

但是请注意,当您发布包含AFNetwork在内的静态库时,有一天如果您的静态库用户决定在自己的代码中使用AFNetwork,Obj-C编译器将抱怨重复符号,他将无法使用您的静态库构建他的项目

我的建议


我的建议:只需参考上面@Amar共享的链接。如果您希望与其他开发人员或社区共享静态库,那么在静态库中不要包含任何第三方库是非常重要的。总是考虑使用其他第三方静态库的引用,而不是包含它们,例如使用CopaPod。 为了完整起见,因为我认为前面的答案/注释提供了很好的建议,这是一个自定义脚本,将第三方库包含到构建的输出库中

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}

. 可能不是你问题的确切答案,但绝对是个好建议。谢谢……我已经试着计算静态LIB一周了,这是我的最后一个障碍。它们基本上是无用的,而且实现起来复杂得可笑。苹果在想什么?!