更新Xcode 16与macOS 15.0.1后自定义字体无法正常显示
自定义字体在富文本中失效的问题解决
同类问题反馈
是的,已经有不少开发者在升级Xcode 16和macOS 15.0.1后遇到了这个问题——之前正常的自定义字体,在富文本里突然不显示了,大概率是新版本对字体加载的逻辑做了更严格的校验。
排查修复步骤
1. 确认字体文件的Target关联
选中项目里的自定义字体文件,查看右侧文件检查器的Target Membership,一定要勾选当前的主App Target(如果有扩展Target也得按需勾上)。Xcode 16对资源的Target绑定要求比之前严格很多,有时候升级后之前自动绑定的会失效。
2. 重新核对Info.plist的配置
打开Info.plist,检查UIAppFonts(iOS项目)或者ATSApplicationFontsPath(macOS项目):
- 字体文件名要完全对应,包括后缀(
.otf/.ttf)和大小写——Xcode 16现在对大小写匹配卡得特别死,之前能混过去的现在不行了。 - 如果用的是
ATSApplicationFontsPath,要确认路径指向的文件夹确实在项目里,而且文件夹也勾选了Target。
3. 区分字体文件名和字体名称
很多时候问题出在字体名称上,不是文件名。怎么找正确的字体名称?
- 打开Font Book,选中你的字体,右键选「显示字体信息」,查看里面的「全名」——比如文件叫
MyFont-Bold.ttf,实际字体全名可能是MyFont Bold。 - 或者直接在代码里打印所有可用字体,定位你的目标字体:
富文本里设置的字体名称必须和打印出来的完全一致,Xcode 16不再支持模糊匹配。UIFont.familyNames.forEach { family in print("字体家族:\(family)") UIFont.fontNames(forFamilyName: family).forEach { fontName in print(" 字体名称:\(fontName)") } }
4. 清除缓存并重启环境
- 删除Xcode的Derived Data:打开Xcode设置(
Xcode > Settings),选择Locations,点击Derived Data旁边的箭头,删掉对应项目的缓存文件夹。 - 重启Xcode、模拟器/真机,甚至重启Mac——新版本的系统和IDE缓存冲突很容易导致字体加载异常。
5. 手动注册字体
要是上面的步骤都没用,那就绕过系统自动加载逻辑,手动注册字体:
func registerCustomFont() { guard let fontURL = Bundle.main.url(forResource: "MyFont-Regular", withExtension: "ttf"), let dataProvider = CGDataProvider(url: fontURL as CFURL), let cgFont = CGFont(dataProvider) else { print("找不到字体文件") return } var error: Unmanaged<CFError>? if CTFontManagerRegisterGraphicsFont(cgFont, &error) { print("字体注册成功") } else { print("注册失败:\(error?.takeRetainedValue() ?? "未知错误")") } }
在App启动时调用这个方法,之后再设置富文本的字体。
6. 检查系统字体权限
前往系统设置 > 隐私与安全性 > 字体,确认你的App被允许访问字体。macOS 15.0.1加强了字体权限管理,可能默认阻止了App加载自定义字体。
内容的提问来源于stack exchange,提问作者Vishal Vaghasiya
相关产品推荐
相关产品推荐

