不再支持代码签名版本

Cam*_*mer 72 xcode code-signing ios

使用旧版 macOS 上提供的协同设计版本签名的应用程序(例如 Catalina (10.15))将无法在 iOS 15 上运行,因为您可以安装的最新版本是 Xcode 12.4。

Xcode 12.5 似乎改变了协同设计的行为。安装时出现错误消息:

不再支持代码签名版本

有解决方法吗?

Cam*_*mer 126

注意

这个答案主要适用于使用旧版本 Xcode 的人。我的构建农场一度停留在 Xcode 12.4,因为某些 Mac mini 无法升级到 Catalina 之后。如果您使用的是最新的 Xcode 13+,这不是您的问题。您的项目中可能存在某种缺陷。

如果您仍在使用 Xcode 12 版本,那么是时候放弃了。使用 12.4 的唯一原因是因为您被困在 Catalina 上,并且新问题不断出现,而这些问题不会那么容易解决。

协同设计--生成权利-der

Apple 已更改了协同设计签名,除了 plist 编码的权利之外还包括 DER 编码的权利。这个额外的 DER 编码权利部分在 iOS 15 中是必需的,并成为最新 Xcode 中协同设计的默认行为。要在具有旧版本 Xcode 的旧计算机上使用 codesign,请将该--generate-entitlement-der标志添加到对 codesign 的调用中。

如果通过 Xcode 签名,您可以将此标志添加到OTHER_CODE_SIGN_FLAGS“构建设置”选项卡中的设置中。

在此输入图像描述

如果在命令行进行协同设计:

CODESIGN_ALLOCATE=$( xcrun --find codesign_allocate ); export CODESIGN_ALLOCATE
xcrun codesign --generate-entitlement-der ...
Run Code Online (Sandbox Code Playgroud)

此信息的来源是Apple 论坛帖子以及 Apple DTS 中 Matt Eaton 的回答。

Xcode 12.5 发行说明中还提到了新的签名格式。不过,该信息似乎并不完全正确。

一般建议

如果您有像 CocoaPods 这样的重要设置,您可能应该取消集成并重新集成,当然还应该清理项目。这些“我也是”的答案实际上只会增加信号的噪音,任何进行此类开发的人都应该已经尝试过这一点。

  • 只是添加一些细节以使其更容易查找:选择您的应用程序(不是项目)目标、构建设置、全部(不是基本)、签名、其他代码签名标志。将指定的标志添加到“调试”和“发布”。Xcode 12.4 解决了我的问题!请注意,我已经将 iOS 15.1 设备支持文件夹(可在此处 https://github.com/filsv/iPhoneOSDeviceSupport 获取)添加到我的旧 Xcode 安装中。MacOS 卡塔琳娜 10.15.5 (8认同)
  • 以这种方式签名的应用程序可以继续在 iOS 15 以下的设备上运行吗? (2认同)

Lan*_*ria 53

以下是@CameronLowellPalmer 答案的一些视觉指示。

我从 @WayneHenderson 在接受的答案下面的评论中得到了步骤。

按照红色箭头步骤 1 - 11(没有 8,我犯了一个错误,从 7 直接转到 9)。

重要的是第4步,一定要选择All,否则找不到选项Other Code Signing Flags

对于第5步,只需输入Other Code Signing Flags搜索容器即可。

步骤 9 - 11 是您输入的位置--generate-entitlement-der

在此输入图像描述

在此输入图像描述

在此输入图像描述


小智 33

  • Xcode > 目标 > 常规
  • “嵌入式框架、库和嵌入式内容”部分
  • 将字段中的所有框架设置Embedded为“不嵌入”

  • 将包与 Swift 包管理器一起使用导致了我的这个问题(特别是对于 Firebase)。当我切换到 CocoaPods 并将框架设置为“不嵌入”时,它解决了问题。 (2认同)
  • 那么这将导致二进制文件损坏。如果该框架不是标准 iPhone SDK 的一部分,除非将其嵌入,否则您将拥有一个无法正常运行的应用程序。 (2认同)

小智 24

您需要将其添加--generate-entitlement-derOTHER_CODE_SIGN_FLAGS“构建设置”下。

在此输入图像描述

  • 这是我的回答中提到的。 (4认同)

Sam*_*Sam 11

对于像我一样使用 Xcode13 的人来说,问题可能不是因为我们应用程序的代码签名(要检查应用程序的代码签名,请参阅https://developer.apple.com/documentation/xcode/using-the-latest -code-signature-format),但由于依赖项之一的代码签名,删除依赖项可以解决问题。

就我而言,我将依赖项一一删除,最终发现罪魁祸首是FirebaseAnalyticsOnDeviceConversion. 删除依赖项

  • 此修复有效。,不必扰乱代码签名。我不再使用 Cocoapods,所有基于 SPM 的软件包。似乎“FirebaseAnalyticsOnDeviceConversion”存在签名问题 (5认同)

小智 6

我花了两天时间找到这个问题,最后我从 Lance Samaria 那里得到了解决方案。我想分享一下。

Target-> Build Settings -> Other Code Signing Flags 将此代码 --generate-entitlement-der 添加到调试和发布中

之后转到目标->常规->框架、库和嵌入内容->更改为“不嵌入”

我还更新了配置文件和 IOS 分发证书。

现在清理构建文件夹并运行您的项目。

非常感谢兰斯·萨玛利亚

  • 请不要添加“谢谢”作为答案。它们实际上并没有提供问题的答案,并且可能被未来的访问者视为噪音。一旦您[赚取](//meta.stackoverflow.com/q/146472)足够的[声誉](/help/whats-reputation),您将获得[投票答案](/help/privileges/vote-up)的特权你喜欢。这样,该问题的未来访问者将看到该答案的投票数更高,并且回答者也将获得声誉积分奖励。请参阅[为什么投票很重要](/help/why-vote)。 (2认同)

Mah*_*asi 5

测试了所有解决方案后,只有一个对我有用。因为XCode在添加Framework时会自动添加sign签名,所以任何需要的Framework都Embed & Sign应该删除并重新添加。Xcode 将自动添加新的签名。

  1. 转至 YourTarget> 框架、库和嵌入内容。
  2. 删除除 CocoaPods 之外的所有框架Embed & Sign
  3. 再次添加删除的框架并设置为Embed & Sign.
  4. 检查pods框架是否已设置Do Not Embed

现在在您的设备上清理并运行您的应用程序。