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
- 用以下命令检查签名一致性:
确保1.0.0和1.0.1版本的codesign -dv --verbose=4 Myapp.appAuthority字段完全相同。
额外处理:若仍出现权限弹窗
如果1.0.1版本仍重复请求权限,可先重置旧权限再重新授权:
- 打开「系统设置」→「隐私与安全性」→「无障碍」
- 移除列表中的
Myapp条目 - 重启应用并完成一次授权,后续升级版本就不会再触发弹窗
内容的提问来源于stack exchange,提问作者Liming
相关产品推荐
相关产品推荐

