SMJobBlessUtil.py脚本在M1系列Mac上运行报错如何解决?
报错触发原因
该错误是苹果官方提供的SMJobBlessUtil.py脚本的架构兼容性缺陷导致的:
- 脚本编写时仅适配了x86_64架构的二进制解析逻辑,内部调用
otool读取特权辅助工具__TEXT段__info_plist内容的正则匹配规则,完全基于x86_64架构下的otool输出格式编写 - M1系列Mac搭载arm64架构,若辅助工具编译为arm64切片或包含arm64+x86_64的通用二进制,
otool默认输出的内容会新增arm64架构标识头,或是同时输出两个架构的段信息,原有正则无法匹配到有效的16进制内容,就会抛出格式错误提示。
兼容解决方法
有两种无需改动业务逻辑的兼容方案可选:
方案1:临时指定x86_64架构执行脚本(无需修改脚本代码)
运行脚本时增加arch -x86_64前缀,通过Rosetta 2转译执行即可适配原有解析逻辑,示例命令如下:
arch -x86_64 ./SMJobBlessUtil.py check MyApp.app
注意:使用该方案需要确保你的特权辅助工具二进制包含x86_64架构切片
方案2:修改脚本适配arm64架构(适配性更强)
修改SMJobBlessUtil.py中调用otool的逻辑,指定解析架构并调整匹配规则即可:
- 找到脚本中调用
otool的代码行,原调用格式为otool -s __TEXT __info_plist [工具路径],修改为指定单架构的调用:# 适配arm64架构设备,可根据实际需求替换为x86_64解析对应架构切片 otool_cmd = ["otool", "-arch", "arm64", "-s", "__TEXT", "__info_plist", tool_path] - 调整后续的正则匹配逻辑,忽略
otool输出中的架构头部信息,只抓取16进制字节行即可。
内容的提问来源于stack exchange,提问作者Alexander
相关产品推荐
相关产品推荐

