ios - 静态库公共(public) header 未复制到 Build/Products 文件夹

标签 ios xcode xcode5 static-libraries archiving

我有 2 个项目,每个项目构建一个静态库,还有另一个项目使用两个静态库。

两个静态库之一构建良好。另一个没有,原因是在自定义 shell 脚本运行之前,它的公共(public) header 没有复制到构建文件夹

下面是一个演示:

SampleA(有效的那个)

Compile MyClass1.cpp ...
Compile MyClass2.cpp ...
Libtool /Users/user/Library/Developer/XCode/DerivedData/.....
Libtool /Users/user/Library/Developer/XCode/DerivedData/.....
Libtool /Users/user/Library/Developer/XCode/DerivedData/.....
Create universal binary libSampleA.a ...
Copy SampleA.h ...in /Users/user/....
Copy MyClass1.h ...in /Users/user/....
Copy MyClass2.h ...in /Users/user/....
Run custom shell script 'Prepare Framework'
Stripping libSampleA.a 
--- Build complete

SampleB(不起作用的那个)

Compile OtherClass1.cpp ...
Compile OtherClass2.cpp ...
Libtool /Users/user/Library/Developer/XCode/DerivedData/.....
Libtool /Users/user/Library/Developer/XCode/DerivedData/.....
Libtool /Users/user/Library/Developer/XCode/DerivedData/.....
Create universal binary libSampleB.a ...
// >>>>> NO HEADER FILES ARE COPIED <<<<<<
Run custom shell script 'Prepare Framework'
--- Build fails (header folder does not exist) 

我当前的设置是一个包含所有 3 个项目的工作区,但我曾经有 1 个项目,每个静态库也有一个嵌套项目。我遇到的问题在两种设置中都相同。

更多信息

  • 我几乎尝试了网上找到的所有说明、提示和建议来完成这项工作。
  • 据我所知,这两个项目的设置是相同的。比较这两个项目文件不是很有效。我也没有一一比较两个项目的所有设置以确保它们相同(还)。
  • 问题在调试和存档构建中是相同的(我知道存档行为不同)
  • 我添加了 "$(BUILD_ROOT)/../IntermediateBuildFilesPath/UninstalledProducts/include" 和/或 "$(PROJECT_TEMP_DIR)/../UninstalledProducts/include"
  • 我已将 header 添加到“构建阶段 > 复制 header > 公共(public)” 部分 - 没有用
  • 我已经按照 Apple 的建议完全删除了“Build Phases > Copy Headers” 阶段,并将标题添加到Copy Files 阶段 - 没有用<
  • 我在静态库项目中添加了一个新组并添加了它的所有 header ,未将目标设置为“添加到目标” - 没有用
  • 我已经退出 XCode 并再次尝试,甚至重新启动 mac - 都没有用
两个库之间的

一个区别是 SampleB(未构建的库)包含来自 SampleA 的各种 header 。没有编译器或链接器错误,只有我描述的构建结束时的错误。

来源

我用于创建库以及尝试解决问题的一些资源:

那么,您知道在构建过程中是什么触发了要复制或不复制 header 吗?

我怀疑即使在Copy Headers 阶段或Copy Files 阶段添加了一个头文件,至少也应该复制这个文件。但事实证明,情况并非如此,至少在我的情况下是这样。

最佳答案

按照 Apple 的说明,从模板创建一个 CocoaTouch 静态库项目:

确保您已将自定义“运行脚本”阶段放置在“复制文件”阶段之后:

enter image description here

然后,在构建时,成绩单将如下所示:

enter image description here

关于ios - 静态库公共(public) header 未复制到 Build/Products 文件夹,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21728084/

相关文章:

crash - 输入任何代码时 Xcode 5 dp 崩溃

ios - 包含基于 xcode 方案的 header

android - 是否可以使用 iOS 和 Android 设备创建蓝牙网状网络

ios - Flutter - iOS 调试崩溃

python - 使用 Xcode 在 Mac OSX 上使用 pip 安装 lxml 时出现 GCC 错误

iphone - 有谁知道应用审核流程结束的时间?

cocoapods - Xcode5 xcodebuild在预编译头包含Pods-environment.h时失败,在xcodebuild之前执行pod install

ios - 当点击 Node Express Endpoint 时,URLSession.shared.dataTask 数据始终为空

ios - 执行 "faSTLane provision"命令时出错

ios - UIBezierPath 笔触在 touchesMoved 中多次重绘