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

Mac M1/M2代码签名与公证相关问题咨询

Mac ARM架构命令行工具分发问题解答

1. 命令行可执行文件的行为是否符合预期?

完全符合预期。

  • Finder双击触发的是macOS Gatekeeper针对GUI程序的完整校验逻辑,而命令行工具并非为GUI交互设计,即便已签名公证,Finder仍会弹出“无法确认开发者身份”提示。
  • 终端运行时,Gatekeeper对已公证的命令行工具采用宽松校验规则,只要文件签名有效且通过公证,就能正常执行——这和你观察到的JDK .tar.gz 包中java命令的表现完全一致。

2. 如何让加载动态库的程序像Intel Mac未签名包那样正常工作?

报错“加固程序不允许使用相对路径”源于签名后的程序默认启用了Hardened Runtime(加固运行时),该特性会限制动态库加载路径以提升安全性。要实现类似未签名包的加载行为,有两种标准方案:

方案一:使用@rpath调整动态库路径(推荐)

这是符合Apple安全规范的做法,步骤如下:

  1. 修改动态库的安装名称:
    install_name_tool -id "@rpath/libxxx.dylib" libxxx.dylib
    
  2. 给可执行文件添加rpath(假设动态库放在可执行文件同级的lib目录):
    install_name_tool -add_rpath "@executable_path/lib" your_tool
    
  3. 重新签名可执行文件和动态库,确保签名包含Hardened Runtime选项。

方案二:添加权限绕开路径限制(仅特殊场景使用)

如果必须保留相对路径加载,可通过签名时添加授权文件关闭库验证:

  1. 创建entitlements.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>com.apple.security.cs.disable-library-validation</key>
        <true/>
    </dict>
    </plist>
    
  2. 签名时指定该授权文件:
    codesign --force --sign "Developer ID Application: Your Company" --options runtime --entitlements entitlements.plist your_tool
    

注意:该权限可能影响公证通过率,仅在无法调整路径时使用。

3. 是否可以对.tar.gz格式的包进行公证并分发?

可以,Apple公证服务支持包括.tar.gz在内的任意压缩包格式,只需满足以下条件:

  • 包内所有可执行文件、动态库均已用有效的Developer ID签名,且开启Hardened Runtime;
  • 提交公证时使用notarytool或altool工具上传.tar.gz包,公证通过后,用户下载运行时Gatekeeper会自动校验公证记录;
  • 注意:.tar.gz包无法使用stapler嵌入公证信息(仅.app、.pkg等格式支持),但不影响分发,Gatekeeper会通过网络校验公证状态。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 23:15:35