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

代码签名后.app无法启动,启用Hardened Runtime引发公证矛盾

解决启用Hardened Runtime后应用无法启动且公证失败的问题

核心原因

启用--options runtime(即Hardened Runtime)后,苹果的安全机制会限制应用的若干行为(如动态库加载、代码注入、未授权的隐私访问等),若应用依赖这些被限制的行为,就会启动失败;而不启用该参数则无法通过公证,因为公证要求必须开启Hardened Runtime。

具体解决步骤

1. 排查启动失败的具体原因

  • 在终端直接运行应用二进制文件,获取精准报错:
    /path/to/your/app.app/Contents/MacOS/YourAppExecutableName
    
  • 打开「控制台.app」,筛选应用名称,查看崩溃日志或错误信息,定位具体被限制的行为(比如无法加载某动态库、缺少隐私权限等)。

2. 添加必要的权限配置(Entitlements)

根据排查出的问题,创建一个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>
    <!-- 允许加载未签名或第三方动态库(常见于依赖非Apple官方框架的应用) -->
    <key>com.apple.security.cs.disable-library-validation</key>
    <true/>
    <!-- 允许JIT编译或动态生成代码(如游戏引擎、脚本解释器类应用) -->
    <key>com.apple.security.cs.allow-jit</key>
    <true/>
    <!-- 隐私权限示例:访问相册 -->
    <key>NSPhotoLibraryUsageDescription</key>
    <string>需要访问相册以保存内容</string>
</dict>
</plist>

修改签名命令,加入权限配置参数:

codesign --deep --force --verify --verbose --strict --sign "$DEVELOPER_ID_APPLICATION" --options runtime --entitlements /path/to/your/entitlements.plist --timestamp "${installerFile}"

3. 验证嵌套组件的签名状态

使用--deep递归签名时,需确保应用内所有嵌套的框架、插件都符合Hardened Runtime要求,可单独检查:

codesign -vvv /path/to/app.app/Contents/Frameworks/YourFramework.framework

若嵌套组件未正确签名,需单独对其重新签名(同样带上--options runtime和对应权限)。

4. 检查依赖兼容性

用otool查看应用依赖的动态库,确认所有依赖库均兼容Hardened Runtime:

otool -L /path/to/app.app/Contents/MacOS/YourAppExecutableName

若存在旧版或未适配的依赖,需更新至兼容版本。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 20:25:19