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

MacOS下PyInstaller打包的Myapp 1.0.1无法继承旧版本无障碍权限问题

解决MacOS应用升级后继承无障碍权限的问题

MacOS的辅助功能(无障碍)权限是基于应用Bundle Identifier和代码签名身份识别的,要让1.0.1版本继承1.0.0的权限,需确保以下关键配置完全一致:

1. 保持Bundle Identifier不变

在Myapp.spec的BUNDLE块中,确保bundle_identifier与1.0.0版本完全相同,绝对不能修改:

app = BUNDLE(
    coll,
    name='Myapp.app',
    icon='Myapp.icns',
    bundle_identifier='com.mycompany.myapp',  # 必须和1.0.0版本一致
    # ... 其他配置
)

2. 仅更新版本号相关字段

只修改版本标识,不要改动其他核心识别字段:

  • 修改BUNDLE块的version参数:version='1.0.1'
  • 在info_plist中更新版本字符串:
    info_plist={
        # ... 其他原有配置
        'CFBundleLongVersionString': '1.0.1',
        'CFBundleShortVersionString': '1.0.1',
        # ... 其他原有配置
    }
    

3. 使用一致的代码签名身份(核心解决步骤)

未签名的应用,系统会根据可执行文件的哈希值识别,每次打包哈希可能不同,导致被判定为不同应用。需用同一个签名身份对两个版本的应用签名:

  • 在EXE块中设置codesign_identity为你的签名身份(开发或发布ID均可):
    exe = EXE(
        # ... 其他原有配置
        codesign_identity='Apple Development: Your Name (XXXXXX)',  # 替换为你的实际签名ID
        # ... 其他原有配置
    )
    
    本地测试也可使用临时签名,打包后执行命令:
    codesign --force --deep --sign - Myapp.app
    

4. 验证配置正确性

打包完成后,右键点击Myapp.app→「显示包内容」→打开Contents/Info.plist,确认:

  • CFBundleIdentifier与1.0.0版本完全一致
  • 版本号已正确更新为1.0.1
  • 用以下命令检查签名一致性:
    codesign -dv --verbose=4 Myapp.app
    
    确保1.0.0和1.0.1版本的Authority字段完全相同。

额外处理:若仍出现权限弹窗

如果1.0.1版本仍重复请求权限,可先重置旧权限再重新授权:

  1. 打开「系统设置」→「隐私与安全性」→「无障碍」
  2. 移除列表中的Myapp条目
  3. 重启应用并完成一次授权,后续升级版本就不会再触发弹窗

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 15:00:58