"code object is not signed at all In subcomponent:" in Xcode 6, Mac OS X Yosemite or Mavericks 怎么修复?

How do you fix "code object is not signed at all In subcomponent:" in Xcode 6, Mac OS X Yosemite or Mavericks?

编译我的应用程序时出现以下错误:

CodeSign /Users/pupeno/Library/Developer/Xcode/DerivedData/ProjectX-cynmgyozflnwbpamwnpsnhgshuyq/Build/Products/Debug/Project\ X.app
    cd /Users/pupeno/Projects/ProjectX
    export CODESIGN_ALLOCATE=/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/codesign_allocate

Signing Identity:     "Mac Developer: José Fernández (G4PM7K38JH)"

    /usr/bin/codesign --force --sign A21FB31766DDCBB28FBB4E4DD86E3743024A45F3 --entitlements /Users/pupeno/Library/Developer/Xcode/DerivedData/ProjectX-cynmgyozflnwbpamwnpsnhgshuyq/Build/Intermediates/ProjectX.build/Debug/App.build/Project\ X.app.xcent --requirements =designated\ =>\ anchor\ apple\ generic\ \ and\ identifier\ \"$self.identifier\"\ and\ ((cert\ leaf[field.1.2.840.113635.100.6.1.9]\ exists)\ or\ (\ certificate\ 1[field.1.2.840.113635.100.6.2.6]\ exists\ and\ certificate\ leaf[field.1.2.840.113635.100.6.1.13]\ exists\ \ and\ certificate\ leaf[subject.OU]\ =\ \"XHT4M2DATL\"\ )) /Users/pupeno/Library/Developer/Xcode/DerivedData/ProjectX-cynmgyozflnwbpamwnpsnhgshuyq/Build/Products/Debug/Project\ X.app

/Users/pupeno/Library/Developer/Xcode/DerivedData/ProjectX-cynmgyozflnwbpamwnpsnhgshuyq/Build/Products/Debug/Project X.app: code object is not signed at all
In subcomponent: /Users/pupeno/Library/Developer/Xcode/DerivedData/ProjectX-cynmgyozflnwbpamwnpsnhgshuyq/Build/Products/Debug/Project X.app/Contents/Frameworks/Paddle.framework
Command /usr/bin/codesign failed with exit code 1

我正在使用两个框架,Paddle 和 Sparkle,它们被配置为登录副本:

在寻找这个问题的解决方案时,我发现很多建议做一个 --deep 标志,Apple 官方不鼓励这样做 (Using the codesign Tool's --deep Option Correctly)。

我还找到了文章 Code Signing and Mavericks,其中也解释了使用 --deep 是错误的,并提供了一种替代方法:使用脚本为每个框架生成签名。我认为这是在 Xcode 可以选择在副本上签名之前需要的东西,但我还是试了一下。这没有什么区别,我仍然得到同样的错误。查看日志,捆绑包正在使用 "Sign on copy" 选项进行签名,因此,添加该脚本会导致它们被签名两次。

我的代码签名身份为整个项目配置如下,每个目标只是继承它:

我知道这不是发布的合适签名,但现在,我们只是试图让它在本地构建和运行。

有什么问题吗?任何想法如何解决它? 我明白

我承认协同签名对我来说仍然是一门黑色艺术,但在 Xcode 6 中我发现删除 all 我的签名脚本(这在Xcode 5,以及 --deep 标志)和额外的签名标志,并且仅在构建的框架复制文件阶段使用 "codesign on copy" 选项对我来说完美无缺。

问题是框架 Paddle.framework 已损坏。符号链接被解析为它们所指向的文件,因此,编译工作正常,但签名没有。

重新下载框架并将其复制到项目中解决了问题。

对我来说,结果是我无意中向目标添加了一个 bash 构建脚本。确保我没有偷偷摸摸的脚本不小心复制到目标中解决了这个问题。

对我来说,解决方案是重新添加资源文件夹(选中创建组而不是创建文件夹引用)。

对于仍然面临此问题的所有用户,请确保构建设置中的 'Product Name' 与 info.plist 中设置的 'Executable file' 匹配。

通常,当我们复制现有代码时,我们只是更改产品名称或可执行文件,而这种不匹配会产生问题。

对我来说,我必须转到项目构建设置并将其他代码签名标志设置为 --deep。问题是我在项目中的框架没有签名。

对我来说,我包含的其中一个框架有另一个标记为 "embed and sign" 的框架......你不能这样做......只有应用程序应该这样做。 在子框架中将孙框架标记为 "do not embed",解决了这个问题。

添加 fastlane 自动将屏幕截图上传到 App Store Connect 后,我​​遇到了这个问题。我不得不从项目中删除 fastlaneclean build folder 以使其再次工作。

对我来说,这个问题是通过一个简单的“清理构建文件夹”操作解决的,键盘快捷键:shift+option+command+K。

在项目中使用 CocoaPods 它帮助我进入 Pods 项目,select 问题框架并在 Signing & Capabilities 页面或 Build settings 上设置正确的 developemtn 团队] 设置了 All 个级别。

添加另一项内容以检查您是否收到此错误:

在项目应用程序目标的 Build Phases 窗格中,确保 Embed Frameworks 阶段出现在 Link Binary With Libraries 阶段之前:

我是 运行 macOS 11.2.3 和 Xcode 12.4。

旁白:

代码签名仍然如此脆弱和破损,这真是荒谬。现在是 2021 年,仅此 post 就有 87 个不同的“修复程序”来解决同一个该死的错误消息。没有理由像这样浪费开发人员的时间。修复你的 IDE,苹果。

在我的例子中,我有一个子项目和该子项目的一个子项目(即子子项目),我向其中添加了相同的 Swift 包依赖项。将其保留在子项目中并将其从子项目中删除解决了问题。

  1. 产品 -> 清理构建文件夹
  2. Build/Compile 项目

正如这里的答案数量所示,错误的原因可能有很多。 根据我构建具有多级框架、来自 Swift 包和 Pods 静态库的复杂项目的经验,您应该遵循以下规则:

  • 一个框架不能嵌入和签署另一个框架:只有应用程序可以做到这一点。
  • 框架可以使用静态库(例如来自 Swift 包),但该库必须仅出现在框架中,而不是出现在主应用程序中。如果Framework和主App都嵌入了同一个库,在某些未知情况下,会出现这个错误。
  • 每次更改框架和库后务必清理构建文件夹structure/embed