最新的 macOS 版本 10.15.4 声称代码签名对客户无效

Posted

技术标签:

【中文标题】最新的 macOS 版本 10.15.4 声称代码签名对客户无效【英文标题】:Latest macOS version 10.15.4 claims code signing is not valid at customer 【发布时间】:2020-03-28 19:42:55 【问题描述】:

好的,我正在为我的 macOS 桌面应用程序使用代码签名和(经过验证的)公证。

我还通过下载和执行在 macOS 10.15.3 上测试我自己的下载。 (例如,如果我忘记了代码签名,那么我将无法运行我的可执行文件)

但现在我有一个客户使用 macOS 10.15.4,他发送了一个屏幕截图显示以下错误:

异常类型:EXC_Crach(代码签名无效)

异常代码:0x0000000000000000, 0x0000000000000000

例外说明:EXC_CORPSE_NOTIFY

终止原因:命名空间 CODESIGNING,代码 0x1

以下是我如何签名的相关部分

  codesign --force --options runtime --timestamp --entitlements "/Volumes/DiskW/projects-cool/myapp/osx/shrents/casc-dlv.plist" --sign "Example" "/Volumes/DiskW/projects-cool/myapp/osx/finaldist/myapp.app"

  codesign --display --entitlements :- "/Volumes/DiskW/projects-cool/myapp/osx/finaldist/myapp.app"

  /usr/bin/xcrun altool --notarize-app --primary-bundle-id "com.example.myapp" -u "info@example.com" -p "xxx" -t osx -f "/Volumes/DiskW/projects-cool/myapp/osx/finaldist/myapp.zip"

  /usr/bin/xcrun altool --notarization-info yyyy -u "info@example.com" -p "xxx"

  /usr/bin/xcrun stapler staple -v "/Volumes/DiskW/projects-cool/myapp/osx/finaldist/myapp.app"

casc-dlv.plist的内容:

<!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.disable-library-validation</key>
    <true/>
</dict>
</plist>

Info.plist 的内容

<?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>CFBundleDevelopmentRegion</key>
    <string>English</string>
    <key>CFBundleExecutable</key>
    <string>MyApp</string>
    <key>CFBundleName</key>
    <string>MA</string>
    <key>LSApplicationCategoryType</key>
    <string></string>
    <key>CFBundleIdentifier</key>
    <string>com.example.MyApp</string>
    <key>CFBundleInfoDictionaryVersion</key>
    <string>6.0</string>
    <key>CFBundlePackageType</key>
    <string>APPL</string>
    <key>CFBundleSignature</key>
    <string>a1wse</string>
    <key>CFBundleShortVersionString</key>
    <string>10.1.4</string>
    <key>CFBundleVersion</key>
    <string>10.1.4</string>
    <key>CFBundleIconFile</key>
    <string>MyApp.icns</string>
    <key>CSResourcesFileMapped</key>
    <true/>
    <key>NSRequiresAquaSystemAppearance</key>
    <true/>             
    <key>NSAppTransportSecurity</key>
    <dict>
      <key>NSAllowsArbitraryLoads</key>
      <true/>       
    </dict>
    <key>CFBundleDocumentTypes</key>
    <array>
        <dict>
            <key>CFBundleTypeRole</key>
            <string>Viewer</string>
            <key>CFBundleTypeExtensions</key>
            <array>
                <string>*</string>
            </array>
            <key>CFBundleTypeOSTypes</key>
            <array>
                <string>fold</string>
                <string>disk</string>
                <string>****</string>
            </array>
        </dict>
    </array>
    <key>NSHighResolutionCapable</key>
    <true/>
    <key>LSMinimumSystemVersion</key>
    <string>10.8</string>       
</dict>
</plist>

在 macOS 中检查我的“钥匙串”:

“开发者 ID 应用程序:示例 (xyz)”

(没有其他相关性)

...

正在查看:https://developer.apple.com/account/resources/profiles/list

我只有多年前用于开发应用程序的已过期配置文件

【问题讨论】:

你没有使用 xcode 作为 ide,但你已经安装了它并且正在使用它的组件,对吧? 是的。我在几秒钟内发布了我的命令行 能否创建一个运行10.15.4的虚拟机并重现客户的错误?如果是这样,请尝试删除权利并装订。您不必拥有测试代码设计的权利(或真正功能强大的应用程序)。如果您和您的客户可以访问互联网,则无需装订。 This 可能是阅读的良好开端。但是,我认为我之前关于权利的建议可能是开始测试的好地方。创建具有不同(或无)权利的应用程序的不同版本,直到其中一个可以在(或)可重现的环境中打开。 此时,您需要关注 Apple 特定的社区,例如 this 和 this。祝你好运,伙计。 【参考方案1】:

删除权利/casc-dlv.plist 似乎可以解决问题。

这是一个答案,因为它解决了问题,但我不会将此答案标记为正确答案,因为在许多情况下,简单地转储权利并不总是可能的。

【讨论】:

以上是关于最新的 macOS 版本 10.15.4 声称代码签名对客户无效的主要内容,如果未能解决你的问题,请参考以下文章

最新版 macOS 系统切勿升级,出现严重系统崩溃情况

靠!安装了macOS Catalina(10.15.4)后,文件系统都乱套了

靠!安装了macOS Catalina(10.15.4)后,文件系统都乱套了

macOS系统10.15.4推送更新!修复新款Macbook Air和扩展坞等问题

拯救者Y7000黑苹果升级macOS 10.15.4分享

macOS 最新测试版代码显示:Mac 支持 AMD 处理器?