You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

macOS下JS生成的可执行文件codesign与notarize后无法运行如何解决?

问题核心原因

你当前的操作缺失两个关键环节,导致校验不通过:

  • 你使用的altool已经被苹果官方弃用,公证返回结果存在误报、记录同步延迟的问题;同时你没有对公证成功的产物执行*票据钉录(staple)*操作,单独分发的二进制无法自动关联云端公证记录,用户下载后系统无法完成离线身份校验
  • 直接提交单二进制压缩包进行公证时,公证系统对单文件的识别逻辑和.app/.dmg等包格式不同,容易出现公证记录未正确关联到对应二进制的问题

可行解决方案

两种方案二选一即可,均可以实现单CLI工具的正常分发:

方案一:使用dmg容器承载二进制(稳定性最高)

该方案不需要用户首次运行时联网,是官方推荐的单二进制分发方案:

  1. 创建空白dmg镜像,将testBinaryFile放入镜像根目录
  2. 对dmg执行签名:
codesign -s CERTIFICATE_UUID --timestamp -o runtime -v your_binary.dmg --force
  1. 使用官方推荐的notarytool提交公证(altool已在2023年停止支持公证服务):
xcrun notarytool submit your_binary.dmg \
  --apple-id <YOUR_APPLE_ID> \
  --password <APP_SPECIFIC_PASSWORD> \
  --team-id <YOUR_DEVELOPER_TEAM_ID> \
  --wait
  1. 收到公证成功通知后,给dmg钉录公证票据:
xcrun stapler staple your_binary.dmg
  1. 校验dmg有效性,返回accepted即为正常:
spctl -a -t open --context context:primary-signature -v your_binary.dmg
  1. 分发该dmg即可,用户下载后取出的二进制可直接运行,不会触发身份校验错误

方案二:直接分发单二进制

该方案要求用户首次运行时必须处于联网状态,系统会自动拉取云端公证记录:

  1. 完成二进制签名后,用notarytool提交压缩包公证,操作步骤同上,替换路径为你的zip包即可
  2. 公证成功后联网环境下执行校验,返回accepted即为正常:
spctl -a -v testBinaryFile

额外校验方法

你可以手动给测试文件添加隔离属性,模拟用户从浏览器/托管平台下载的场景:

xattr -w com.apple.quarantine "" testBinaryFile

执行后运行文件没有报错,说明配置已生效。

补充说明

你之前把二进制放在已公证dmg的.app资源目录下可正常运行,是因为整个dmg已完成公证和票据钉录,系统会信任该dmg内所有经过正确签名的可执行文件,不需要单独对资源目录下的二进制做公证。

内容的提问来源于stack exchange,提问作者Webmaestro1

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 14:09:02