SwiftUI项目迁移后自定义字体无法加载的排查求助
遇到这种迁移项目后字体失效的情况确实挺头疼的,我帮你梳理几个容易被忽略的细节,说不定问题就出在这儿:
确认字体的PostScript名称与配置一致
这是最常见的坑!很多人误以为Info.plist里填的是字体文件名,但实际上系统识别的是字体内部的PostScript名称,而非文件名。比如你的字体文件叫MyFont-Regular.ttf,但内部的PostScript名称可能是MyFontRegular。
你可以用两种方式验证:- 用Mac的「字体册」打开字体,右键点击字体→「显示字体信息」,查看PostScript名称;
- 在App的
init方法里添加这段代码,打印所有可用字体:
运行项目后查看控制台,找到你的字体对应的名称,确保override init() { super.init() for family in UIFont.familyNames.sorted() { let fontNames = UIFont.fontNames(forFamilyName: family) print("字体家族:\(family) → 可用字体名:\(fontNames)") } }Info.plist里的文件名和代码中Font.custom(_:size:)用的名称都匹配。
检查单个字体文件的Target Membership
你提到勾选了文件夹的Target Membership,但文件夹里的单个字体文件可能没有自动继承这个设置。进入每个字体文件的「检查器」(右侧面板),确认主项目的Target是勾选状态——有时候复制文件夹时,内部文件的Target会默认不勾选。清理Xcode缓存并重建项目
迁移项目后Xcode的缓存很容易出问题,试试这些操作:- 清理项目:按下
Command + Shift + K; - 删除Derived Data:打开Xcode→「Settings」→「Locations」,点击Derived Data旁的箭头,删除当前项目的缓存文件夹;
- 重启Xcode和模拟器/真机,然后重新Build项目。
- 清理项目:按下
验证字体文件的完整性
复制文件过程中可能出现文件损坏的情况,把原项目中能正常工作的字体文件重新复制到新项目中,替换现有文件,确保文件本身没有问题。确认Info.plist的键和配置正确
确保你使用的是系统识别的键名Fonts provided by application(注意是英文键,不要用本地化后的名称),数组中的每一项都是字体的完整文件名(包括后缀,比如.ttf或.otf),不要遗漏后缀。
先从检查PostScript名称开始排查,这解决了大部分迁移后字体失效的问题。如果还不行,再一步步验证上面的其他要点,应该能找到问题所在。
内容的提问来源于stack exchange,提问作者Jacob F

