macOS Monterey系统无法调用SF Pro Text字体问题咨询
问题原因
- macOS 12 Monterey 对内置的 San Francisco 系列字体做了访问权限收紧,SF Pro Text、SF Pro Display、SF Mono 等均属于系统私有字体,不再对第三方应用开放直接通过家族名称检索、调用的权限,macOS 11 Big Sur 尚未完全落地该限制,所以你在旧系统环境可以正常调用。
- 受权限限制影响,Monterey 下的
NSFontManager字体枚举、Interface Builder 的字体选择器都不会返回这些私有字体的相关条目,硬编码家族名调用自然会返回 nil。
解决方案
- 优先使用官方系统字体 API 调用:不要硬编码 SF Pro Text 家族名,改用苹果提供的系统字体构造方法,底层会自动匹配对应字重、尺寸的 SF 字体,和你直接调用 SF Pro Text 的效果完全一致,示例代码如下:
// 直接获取对应尺寸的系统加粗字体 NSFont *boldFont = [NSFont boldSystemFontOfSize:16.0]; // 若需要更精细的字重控制,可使用下方方法 NSFont *customBoldFont = [NSFont systemFontOfSize:16.0 weight:NSFontWeightBold];
- 若业务确实需要固定通过
fontWithFamily:接口调用 SF Pro Text,你可以手动安装官方 SF Pro 字体包到 Monterey 系统的用户字体目录,或是将 SF Pro 字体文件嵌入到你的应用包中并在项目配置里注册字体资源,即可正常通过家族名检索到对应字体。
补充说明
我原本以为它属于系统字体,会随系统预装
该字体确实是系统预装字体,但仅对系统进程、苹果官方应用开放直接调用权限,第三方应用默认无法直接通过公开字体接口访问。
内容的提问来源于stack exchange,提问作者Z S
相关产品推荐
相关产品推荐

