M3 Mac(macOS 15)下SQLite扩展dylib代码签名加载失败求助
解决macOS 15(M3 Mac)上SQLite扩展加载被系统策略限制的问题
你的问题核心是macOS 15的安全策略对自签名代码的信任要求更严格,同时签名流程可能存在疏漏,以下是具体修复步骤:
1. 修正自签名证书的信任配置
- 打开「钥匙串访问」,找到你创建的
SGH_sqlite_extensions证书:- 确认证书类型为代码签名(创建时需在「证书助理」中选择「代码签名」模板)。
- 将证书从「登录」钥匙串移至「系统」钥匙串(仅系统级信任的证书才会被spctl认可)。
- 右键证书→「显示简介」→「信任」,把「代码签名」选项设为「始终信任」。
2. 重新规范签名SQLite扩展
使用符合macOS 15安全要求的签名命令,启用Hardened Runtime:
codesign -s "SGH_sqlite_extensions" --force --options runtime /usr/local/lib/sqlite/math.dylib
--force:覆盖原有无效签名--options runtime:启用系统要求的Hardened Runtime安全机制
3. 验证签名有效性
用指定上下文的spctl命令重新检查,确保系统认可签名:
spctl -a -vv --context context:primary-signature /usr/local/lib/sqlite/math.dylib
若输出显示accepted,则签名已通过系统策略校验。
4. 确保Python的SQLite启用扩展加载
在Python脚本中必须先开启扩展加载权限:
import sqlite3 conn = sqlite3.connect('your_database.db') conn.enable_load_extension(True) # 关键步骤:开启扩展加载功能 conn.load_extension('/usr/local/lib/sqlite/math.dylib') # 执行后续数据库操作 conn.close()
额外排查点
- 若spctl仍拒绝,检查证书是否过期,或创建时是否正确勾选「代码签名」用途。
- 确认
/usr/local/lib/sqlite目录权限正常,当前用户拥有读写权限。 - macOS 15的SIP机制不影响/usr/local目录,无需关闭SIP。
内容的提问来源于stack exchange,提问作者Steve Gooberman-Hill
相关产品推荐
相关产品推荐

