Xcode将脚本生成文件加入测试目标编译列表时提示文件找不到怎么办
问题根因
- Xcode执行编译流程时,会在所有Run Script阶段运行前,先预校验Compile Sources列表中所有文件的存在性。你手动删除了本地的
Mock.generated.swift文件,Xcode预校验时找不到对应路径的文件,即便后续Run Script成功生成了该文件,也会因为预校验不通过抛出Build input file cannot be found报错。 - 你将文件拖拽进项目后删除本地文件的操作,仅在Xcode项目配置中保留了文件引用,没有对应的本地实体文件,自然会在项目导航栏显示红色缺失标识。
修复方案
方案1:调整构建阶段配置(推荐,无额外依赖)
该方案不需要手动把生成文件加入Compile Sources,也不需要动态修改项目配置,是生成代码类场景的通用解法:
- 选中项目导航栏中红色的
Mock.generated.swift文件,右键删除,选择「Remove Reference」选项,不要选择「Move to Trash」。 - 打开你新增的Run Script配置页,找到「Output Files」配置项,添加
Mock.generated.swift的完整绝对生成路径,推荐用Xcode环境变量拼接,比如示例路径:$(SRCROOT)/你的测试目标名称/Mocks/Mock.generated.swift,替换为你实际的生成路径即可。 - 可选优化:在「Input Files」配置项中添加你的SwiftyMocky配置文件路径,比如
$(SRCROOT)/你的测试目标名称/Mockfile.yml,避免无配置变更时重复执行生成脚本,提升构建速度。 - 原理:Xcode识别到Run Script的Output Files列表中的文件后,会自动跳过预校验阶段的存在性检查,等Run Script执行完成生成文件后,自动将该文件加入编译序列,无需手动添加到Compile Sources。
方案2:动态修改Compile Sources(不推荐)
可以实现该操作,但维护成本极高,不建议使用:
- 你需要在Run Script中调用
xcodeproj这类Ruby工具(CocoaPods默认依赖该库),在swiftymocky generate执行完成后,读取本地.xcodeproj配置文件,将生成的Mock.generated.swift文件引用添加到测试目标的Compile Sources阶段,再保存项目配置。 - 不推荐原因:每次构建都会修改项目配置文件,容易引发Git冲突,多开发者协作时风险极高,且Xcode有时不会实时加载修改后的项目配置,反而会引发更多未知编译问题。
内容的提问来源于stack exchange,提问作者Bill David
相关产品推荐
相关产品推荐

