使用Swift将自定义字体添加到macOS应用

ixa*_*any 5 macos fonts info.plist nsfont swift

我遵循了一堆教程,但没有用:我只是想向macOS应用添加自定义字体。

我基本上尝试的是:

  1. 添加的.ttf字体文件到我的项目:目标组成情况,我也确保文件是使用拷贝制作Copy FilesBundle Phases。编译后,我可以看到所有文件都在捆绑包中。这样看来效果很好。

在此处输入图片说明

  1. Info.plist:我为要添加的每个字体文件(值)添加Fonts provided by application并创建了一个项目myFont.tff

  2. 我确保使用正确的字体名称。我在系统上安装了字体,并使用Interface Builder配置了Label,以便它使用所需的字体。我印了它的价值print(myLabel.font.fontName)

  3. 令人困惑:如果将我要添加到应用程序的完全相同的字体文件安装在系统Fontbook中并激活,则一切正常。当我停用它时,它不起作用。对我来说,这表明我使用的是正确的字体名称。

  4. 我找到ATSApplicationFontsPath并尝试将其添加到中Info.plist,但没有使用路径(由文档推荐)或类似.(似乎对某些人有用的)值确定。

在此处输入图片说明

感谢任何帮助!

Pæt*_*sen 12

根据以前的答案,我很难让它发挥作用,所以我决定自己写一个答案。这是基于@ixany 和@rob-keniger 之前的回答。

  1. 创建一个名为 Fonts 的文件夹

在此处输入图片说明

  1. 将字体添加到Fonts文件夹中。取消选中Add to targets并选中Copy items if needed

在此处输入图片说明

  1. 添加Application fonts resource path到 Info.plist 并输入Fonts

在此处输入图片说明

  1. 转到Build Phases并创建一个New Copy Files Phase.

在此处输入图片说明

  1. DestinationsResourcesSubpathFonts。然后将您的字体文件添加到列表中。

在此处输入图片说明


ixa*_*any 5

我偶然解决了我的问题。

我注意到在Bundle文件中,我的字体被包含了两次:它们被复制到“资源”目录以及在“复制文件”构建阶段中声明的子路径。我从项目中删除了字体,再次添加了它们(无需检查“目标成员身份”),并在构建阶段中添加了它们,以便将它们仅复制到子路径中。之后,它起作用了。

附加条款:

原来,这Fonts provided by application是仅iOS的属性,因此macOS实施不需要它。

另外,ATSApplicationFontsPath不需要任何斜杠。例如:Fonts应该工作正常。

我很难找到.ttf字体文件的正确名称,有时会发现一些奇怪的现象:NSFont从字体家族中随机选择了字体(常规,中号,粗体...),而没有任何代码更改。通过使用.otf文件,我也可以解决该问题。