You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Mac OS快速查看扩展中如何使用自定义字体?

在QuickLook扩展中使用自定义字体的解决方案

可行,按以下步骤排查并修正即可:

  • 确认字体文件的正确配置
    除了勾选主应用和扩展的目标成员资格,还要检查扩展目标的「Copy Files」构建阶段:

    • 确保目标位置是Resources
    • 勾选「Copy only when installing」选项
      另外注意:字体文件名和其内部的PostScript名称可能不一致——打开Font Book,选中字体后查看PostScript名称,这才是NSFont(name:)需要传入的参数(比如文件名是MyCustomFont.ttf,实际名称可能是MyCustomFont-Regular)
  • 单独配置扩展的Info.plist
    主应用的ATSApplicationFontsPath配置不会作用于扩展,必须在扩展自身的Info.plist中添加该键:

    • 键名:ATSApplicationFontsPath
    • 值:如果字体直接放在扩展的Resources目录下,填.;如果放在子文件夹(比如Fonts),填Fonts/(注意末尾的斜杠)
  • 手动注册字体(兜底方案)
    如果上述步骤仍不生效,可在扩展初始化时手动加载并注册字体:

    private func registerCustomFont() {
        guard let fontURL = Bundle(for: type(of: self)).url(forResource: "MyCustomFont", withExtension: "ttf") else {
            print("自定义字体文件不存在")
            return
        }
        
        do {
            let fontData = try Data(contentsOf: fontURL)
            guard let provider = CGDataProvider(data: fontData as CFData),
                  let cgFont = CGFont(provider) else {
                print("加载字体数据失败")
                return
            }
            
            var error: Unmanaged<CFError>?
            let success = CTFontManagerRegisterGraphicsFont(cgFont, &error)
            if !success, let error = error?.takeRetainedValue() {
                print("字体注册失败: \(error.localizedDescription)")
            }
        } catch {
            print("读取字体文件失败: \(error)")
        }
    }
    

    在扩展主视图控制器的viewDidLoad方法中调用这个函数,之后再尝试通过NSFont(name:size:)获取字体。

  • 验证加载结果
    注册完成后,可通过打印NSFontManager.shared.availableFonts或CTFontManagerCopyAvailableFontFamilyNames(),确认目标字体的名称已出现在列表中。

内容的提问来源于stack exchange,提问作者D. Mika

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 22:00:06