我所见过的解决此问题的每一个解决方案要么看起来都很笨拙(将标头复制到应用程序的项目中),要么过于简化,以至于它们仅适用于琐碎的情况。
简短的答案
将以下路径添加到用户标题搜索路径
“ $(BUILD_ROOT)/../ IntermediateBuildFilesPath / UninstalledProducts”
为什么这样做?
首先,我们需要了解问题。在正常情况下,也就是说,当您运行,测试,分析或分析时,Xcode会构建您的项目,并将输出放在Build / Products / Configuration / Products目录中,该目录可通过$ BUILT_PRODUCTS_DIR宏获得。
有关静态库的大多数指南建议将“ 公共头文件夹”路径设置为$ TARGET_NAME,这意味着您的lib文件将变成$ BUILT_PRODUCTS_DIR /libTargetName.a,并且您的头会放入$ BUILT_PRODUCTS_DIR / TargetName中。只要您的应用程序的搜索路径中包含$ BUILT_PRODUCTS_DIR,导入就可以在上述4种情况下进行。但是,当您尝试存档时,这将不起作用。
存档的工作方式略有不同
存档项目时,Xcode使用另一个名为ArchiveIntermediates的文件夹。在该文件夹中,您将找到/ YourAppName / BuildProductsPath / Release-iphoneos /。这是您进行归档时$ BUILT_PRODUCTS_DIR指向的文件夹。如果您在其中查看,您会看到一个指向已构建的静态库文件的符号链接,但是缺少带有标题的文件夹。
要找到标题(和lib文件),您需要转到IntermediateBuildFilesPath / UninstalledProducts /。还记得有人告诉您将静态库的“ 跳过安装 ” 设置为“是”吗?好的,这就是设置存档时产生的效果。
旁注:如果您未将其设置为跳过安装,则标题将放置在另一个位置,并且lib文件将被复制到存档中,从而阻止您导出可提交到App Store的.ipa文件。 。
经过大量搜索后,我找不到与UninstalledProducts文件夹完全对应的任何宏,因此需要使用“ $(BUILD_ROOT)/../ IntermediateBuildFilesPath / UninstalledProducts”构造路径
摘要
对于您的静态库,请确保跳过安装过程,并将公共标头放置在$ TARGET_NAME中。
对于您的应用程序,将用户标头搜索路径设置为“ $(BUILT_PRODUCTS_DIR)”(适用于常规版本)和“ $(BUILD_ROOT)/../ IntermediateBuildFilesPath / UninstalledProducts”(适用于归档版本)。