项目构建和运行,但不存档

时间:2017-11-28 10:07:21

标签: xcode build

我有一个在模拟器和设备上构建并运行良好的项目,但在归档时失败。

该项目非常陈旧,但我创建了一个单独的组件,我已在工作区中添加了该组件。

主要项目是用Objective-C编写的,新项目是用Swift 4编写的。该项目还使用CocoaPods,还包括用Swift 3.2编写的另一个子项目

有各种各样的错误归结为同一件事,子项目在编译时没有产生任何输出。或者它只是没有编译。我发现代码本身没有错误,只是在尝试引用时:

//1
error: /Users/<user>/Library/Developer/Xcode/DerivedData/<id>/Build/Intermediates.noindex/ArchiveIntermediates/<app name>/BuildProductsPath/Release-iphoneos/Framework.framework: No such file or directory`

//2
Signing Identity:     "iPhone Developer: <redacted>“

/Users/<user>/Library/Developer/Xcode/DerivedData/<id>/Build/Intermediates.noindex/ ArchiveIntermediates/<app name>/InstallationBuildProductsLocation/Applications/<app name>/Frameworks/<framework>.framework: No such file or directory
Command /usr/bin/codesign failed with exit code 1

//3
@import ModuleName;

Module ‘ModuleName’ not found

这是我尝试过的:

  • 清除衍生数据
  • 重新启动Mac
  • $(SRCROOT)添加到主目标&gt;构建设置&gt;框架搜索路径&gt;释放
  • 嵌入式二进制文件中存在已确认的项目
  • 已确认的项目存在于链接框架和库中
  • 删除项目并将其重新添加到嵌入式二进制文件和框架和库
  • 删除导入声明
  • 我打开工作区而不是项目
  • Skip install在子项目构建设置
  • 中设置为YES
  • 将工作子项目中的构建设置与失败的项目进行比较(它们是相同的)
  • 正在运行pod update
  • 改变Always Embed Standard Swift Libraries无论如何都没有区别

其他说明:

  • /Users/<user>/Library/Developer/Xcode/DerivedData/<id>/Build/ Intermediates.noindex/ArchiveIntermediates/<app name>/ InstallationBuildProductsLocation/Applications/<app name>.app/Frameworks/中,有一个.framework文件用于其他子项目和所有pod,但不适用于此
  • podfile中,use_frameworks!存在

更新

今天运行存档后,我只看到错误:

Module 'ModuleName' not found

其他错误消失了

4 个答案:

答案 0 :(得分:6)

无法确定究竟是什么导致归档失败。但我很确定我可以给你正确的方向=]

在模拟器甚至真实设备上运行 - 编译项目&#34; 调试&#34;

存档困难,编译为&#34; 发布&#34;

我敢打赌,如果你设置在模拟器上运行将在发布模式下编译,它将失败!

Screenshot of xCode Run configuration

检查!!

如果我更正了,您只需要为发布设置一些Build Settings以匹配调试

我的第一个猜测是:所有搜索路径(框架搜索路径运行路径搜索路径

我看到了类似的行为here

  

毕竟我把它存档了。

     

看起来SDK-Project缺少构建配置   特设。哪个项目用于存档特定构建​​的项目   方案。我认为编译器正在寻找模块   $(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)路径

答案 1 :(得分:6)

问题与iOS Deployment Target设置有关:

  • 主要项目:iOS 10
  • 子项目:iOS 11

Debug中,它仅针对当前架构构建,在Release中为所有架构构建。一旦你知道就明显了。

将子项目设置为针对iOS 10进行构建解决了这个问题。

最令人沮丧的部分:我仔细检查了构建日志,并没有在任何地方提到版本问题:(

答案 2 :(得分:0)

我遇到了这个错误,虽然我的部署目标不匹配,但实际上这并不是我的解决办法。我添加了一个新的构建配置,该配置试图用于存档,但是在添加pod install后却忘记了运行它。运行pod install之后,即使某些Pod的部署目标是iOS 10,而主要应用程序目标是iOS 11,我也可以很好地存档我的应​​用程序。

答案 3 :(得分:0)

可能与您无关,但对其他人有帮助: 如果您使用的是基于多模块SwiftPM的体系结构,那么您应该仔细阅读错误并找出某些软件包目标是否在源中导入了其他软件包目标而不将其集成到Package.swift文件中。在这种情况下,即使发行版本也可以以某种方式解决依赖关系,并且如果其他软件包包含您的依赖关系,则成功,但是存档将失败。

包装图示例:

––––––––

App
├– PackageA [target1(import PackageC.target1)]
└– PackageB [target1(import PackageC.target1)]
   └– PackageC [target1]

?成功构建,错误存档(在PackageA.target1中找不到模块PackageC.target1)

––––––––

App
├– PackageA [target1(import PackageC.target1)]
|  └– PackageC [target1]
└– PackageB [target1(import PackageC.target1)]
   └– PackageC [target1]

?成功构建和归档