苹果早在 iOS 13 开始就开放了第三方字体的安装功能,本来打算在 iCollect+ 中增加安装字体的小工具,发现不太行,今天就来说说安装自定义字体这件小事。

API

首先,苹果在 CoreText 中提供安装字体的 API,如下,

1
2
3
4
5
6
func CTFontManagerRegisterFontURLs(
_ fontURLs: CFArray,
_ scope: CTFontManagerScope,
_ enabled: Bool,
_ registrationHandler: ((CFArray, Bool) -> Bool)?
)

不过通过此 API 来安装字体有些限制,不是随便就可以安装的,字体文件必须包含在项目中或使用 On-Demand Receources,否则就会报下面的错误。所以参数中的 fontURLs,这里的 URL 不能是网络上的 URL,不能是 File URL。

1
2
The file is not in an allowed location. It must be either in the application’s bundle or an on-demand resource.

安装字体后,可以在 Settings -> General -> Fonts -> My Fonts 中查看。

Profile

另一种安装字体的方式是通过描述文件,这种方法不需要写代码,简单配置下就可以安装字体。

首先,在 Mac App Store 中下载苹果自家的 Apple Configurator 应用;然后打开,按 ⌘ + N 新建描述文件,在 General 中输入描述文件的名字,Identifier 会自动生成,其他选填或保持默认的就行。

mobileconfig - General

在 Fonts 选项中添加要安装的字体,然后保存,字体文件会包含在描述文件中,描述文件的拓展名为 mobileconfig,可以在描述文件上右键打开方式选 Apple Configurator,再次编辑。

mobileconfig - Fonts

接下来就是安装了,注意这里不能通过 AirDrop 隔空投送到手机上安装,也不能放在 iCloud Drive 里,在手机文件应用里点击安装,要通过网络下载的方式,比如通过文件分享工具,在 Safari 中下载次描述文件。

Profile Downloaded

下载后,在 Settings 中就能看到此描述文件了,安装即可,注意描述文件没有签名,不过自用的话,签不签名都无所谓了。

Settings - Downloaded Profile Install Profile

安装后,在描述文件的 More Details 里就能看到已安装的字体了,通过描述文件安装的字体,不会显示在 Settings -> General -> Fonts -> My Fonts 里面。

Fonts in Profile

最后,在支持自定义字体的应用中,就可以使用已安装的字体了。(下图中的 App 是 Spring for Twitter

Use Fonts in Other Apps. The app in the screenshot is Spring.