我见过的解决这个问题的每个解决方案要么看起来不优雅(将标头复制到应用程序的项目中),要么过于简化以至于它们只能在微不足道的情况下工作。
简短的回答
将以下路径添加到您的用户标头搜索路径
“$(BUILD_ROOT)/../IntermediateBuildFilesPath/UninstalledProducts”
为什么这有效?
首先,我们需要了解问题所在。在正常情况下,也就是说,当您运行、测试、分析或分析时,Xcode 会构建您的项目并将输出放在 Build/Products/ 中配置/Products 目录,可通过$BUILT_PRODUCTS_DIR macro.
大多数有关静态库的指南建议设置公共标头文件夹路径 to $TARGET_NAME,这意味着你的 lib 文件变成$BUILT_PRODUCTS_DIR/libTargetName.a 并将您的标头放入$BUILT_PRODUCTS_DIR/目标名称。只要您的应用程序包含$BUILT_PRODUCTS_DIR在其搜索路径中,则导入将在上面给出的 4 种情况下起作用。但是,当您尝试存档时,这将不起作用。
归档工作方式略有不同
当您归档项目时,Xcode 使用另一个名为 ArchiveIntermediates 的文件夹。在该文件夹中,您将找到 /YourAppName/BuildProductsPath/Release-iphoneos/。这是文件夹$BUILT_PRODUCTS_DIR指向您何时进行存档。如果您查看那里,您会发现有一个指向您构建的静态库文件的符号链接,但带有标头的文件夹丢失了。
要查找标头(和 lib 文件),您需要转到 IntermediateBuildFilesPath/UninstalledProducts/。记住当你被告知设置时跳过安装对于静态库来说是 YES 吗?这就是您制作存档时设置的效果。
旁注:如果您不将其设置为跳过安装,您的标头将被放入另一个位置,并且 lib 文件将被复制到您的存档中,从而阻止您导出可以提交到 App Store 的 .ipa 文件。
经过大量搜索,我找不到任何与 UninstalledProducts 文件夹完全对应的宏,因此需要使用“$(BUILD_ROOT)/../IntermediateBuildFilesPath/UninstalledProducts”构建路径
Summary
对于静态库,请确保跳过安装并将公共标头放入 $TARGET_NAME 中。
对于您的应用程序,将用户标头搜索路径设置为“$(BUILT_PRODUCTS_DIR)”(适用于常规构建)和“$(BUILD_ROOT)/../IntermediateBuildFilesPath/UninstalledProducts”(适用于存档构建)。