为什么应用程序在签名后崩溃?

问题描述 投票:0回答:1

问题是我的应用程序包在签名之前就可以工作,如果我使用

codesign
,我的应用程序包就会崩溃,而且我完全不知道如何找出原因。有人可以把我推向正确的方向吗?

我正在收到这份报告。我假设软件正确启动(是?),加载库没有问题(是?),但随后进行了一些检查并失败。我可以检查什么来找出崩溃的原因?

-------------------------------------
Translated Report (Full Report Below)
-------------------------------------

Process:               bla [1386]
Path:                  /Users/USER/Desktop/*/bla.app/Contents/MacOS/bla
Identifier:            firma.bla
Version:               1.2.572 (1.2.572)
Code Type:             X86-64 (Native)
Parent Process:        launchd [1]
User ID:               504

Date/Time:             2023-11-13 14:51:17.7531 +0100
OS Version:            macOS 12.5 (21G72)
Report Version:        12
Anonymous UUID:        1B6A...

Sleep/Wake UUID:       1588...

Time Awake Since Boot: 4500 seconds

System Integrity Protection: enabled

Crashed Thread:        0  Dispatch queue: com.apple.main-thread

Exception Type:        EXC_CRASH (SIGKILL (Code Signature Invalid))
Exception Codes:       0x0000000000000001, 0x0000000000000000
Exception Note:        EXC_CORPSE_NOTIFY

Termination Reason:    Namespace CODESIGNING, Code 2 

Thread 0 Crashed::  Dispatch queue: com.apple.main-thread
...

我已经阅读了有关签名过程的信息并尝试了一些事情,即我可以重新签署同一捆绑包的先前版本,就像我对新版本所做的那样,并且没有任何问题。我比较了权利,它们是相同的。新的应用程序包使用新的框架,并对源代码进行了大量更改,但它们都在未签名的情况下工作,而较新的应用程序包在签名后停止工作。为什么?


我复制应用程序包并运行它 - 有效。

然后我像这样签署文件和应用程序:

% codesign --no-strict --force --timestamp --options=runtime --entitlements "bla.entitlements" --sign "Developer ID Application: ..." "bla.app/Contents/MacOS/bla"
% codesign ... "bla.app"

然后我验证签名

% codesign --verify --verbose bla.app
bla.app: valid on disk
bla.app: satisfies its Designated Requirement

然后我直接通过双击或从终端启动它,它崩溃了

% ./bla.app/Contents/MacOS/bla
zsh: killed     ./bla.app/Contents/MacOS/bla

我该怎么办?

macos code-signing
1个回答
1
投票

这个神秘的错误并没有说明崩溃的“具体原因”,在我的例子中,它缺少权利。当然,它与代码签名相关,但是....../叹息 如果有人可以发布答案,如何找出代码签名崩溃的具体原因,那将非常有帮助。我发布我的答案是为了告诉一些事情并解决我的具体问题。

我发现了什么:

    此错误意味着您有代码签名问题。
  1. 你的软件没问题,仅检查
  2. 代码签名,不要在其他地方浪费时间。

    除非下载了签名软件(涉及到网守,不能透露太多),否则此错误与公证无关,除非签名软件与未签名软件的工作原理类似,否则不要继续追究。
  3. 我希望报告能够提示缺少的权利是什么。我之前的应用程序包使用 .Net 5,新的应用程序包使用 .Net 7。我必须编辑权利文件,将下面的键更改为
  4. true
:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    ...
    <key>com.apple.security.cs.allow-unsigned-executable-memory</key>
    <true/>
    ...
</dict>
</plist>

此后,我的应用程序包在签名后继续工作。
    

© www.soinside.com 2019 - 2024. All rights reserved.