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

已签名公证的Mac应用启动时遭Gatekeeper拦截jna*.tmp文件求助

JNA临时文件触发Gatekeeper验证失败的解决方案

这个问题的核心是JNA在运行时会动态生成未签名的临时本地库文件(即你看到的jna7223640233751603426.tmp),这类文件不在你应用的签名公证范围内,因此被Gatekeeper拦截。以下是可行的解决办法:

1. 禁用JNA临时文件生成(推荐)

通过设置JNA的系统属性,强制它使用你已签名公证的本地库文件,不再生成临时文件:

  • 在应用启动时添加JVM参数:-Djna.nosys=true
  • 或者在代码中提前设置:System.setProperty("jna.nosys", "true");
  • 同时将JNA的本地库(比如libjnidispatch.dylib)打包到应用的Contents/Frameworks目录下,确保这个库已经和主应用一起完成了签名和公证。

2. 重新完整签名并公证应用包

如果你的应用包存在嵌套文件未签名的情况,也可能导致Gatekeeper对运行时生成的文件更敏感。可以重新执行完整的签名和公证流程:

  • 签名整个应用包(包括所有嵌套框架和库):
    codesign --deep --force --sign "Developer ID Application: 你的开发者ID (XXXXXX)" YourApp.app
    
  • 将应用打包成zip后重新提交公证:
    ditto -c -k --sequesterRsrc --keepParent YourApp.app YourApp.zip
    xcrun notarytool submit YourApp.zip --keychain-profile "你的公证配置文件" --wait
    
  • 公证完成后,给应用加盖时间戳:
    xcrun stapler staple YourApp.app
    

3. 备选方案:替换JNA动态生成逻辑

如果修改JNA配置有困难,可以考虑直接调用已签名的本地库,替代JNA的动态生成机制,但这个方案开发成本较高,仅作为最后备选。

内容的提问来源于stack exchange,提问作者Long Trịnh Hoàng Phạm

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 12:25:42