ついにiOS18から設定でAppleのシステムフォントが追加可能になりました【手書き風/教科書体】
OSの追加システムフォントは、Appleが(フォント制作会社からライセンスを買って?)用意しているものです。macOSには昔からあります。
iOSは、iOS17までOSレベルのUIでシステムフォントを追加する機能がありませんでした。しかし、ついにiOS18からOSレベルのUIでシステムフォントを追加する仕組みが出来ました。
システムフォント追加方法(ユーザー目線)
iOSデバイスにシステムフォントを追加する方法を書きます。
iOSの設定アプリを立ち上げて
一般 -> フォント
と進むと
- システムフォント
- マイフォント
の画面が出てきます。
システムフォントの方に進むと、欲しいシステムフォントをダウンロードできます。
アプリで使うためにはアプリが対応する必要があります。
アプリで使うための方法(開発者目線)
ここからは開発者向けの情報になります。
ターゲットの設定
ターゲットの設定の Signing & Capability を選択します。
"+ Capability" というボタンがあるのでそれを押します。
一覧の中から Fontsを選びます。
画面上にFontsという項目が現れます。Use Installed Fontsにチェックを入れてください。
メインのコード
フォントピッカーの機能を使うと使用可能なものを全部、馴染みのUIでユーザーに見せることが出来ます。
let fontConfig = UIFontPickerViewController.Configuration()
fontConfig.includeFaces = true
fontConfig.displayUsingSystemFont = false
if Setting.fontOnlyJP {
if #available(iOS 18.0, *) {
fontConfig.languageFilter = #Predicate<[String]> { langs in
langs.contains("ja")
}
} else {
fontConfig.filteredLanguagesPredicate =
UIFontPickerViewController.Configuration.filterPredicate(forFilteredLanguages: ["ja"])
}
}
let fontPicker = UIFontPickerViewController(configuration: fontConfig)
fontPicker.selectedFontDescriptor = UIFontDescriptor(name: Setting.fontName, size: 17)
fontPicker.delegate = self
self.present(fontPicker, animated: true, completion: nil)
ユーザーがフォントを選んだら次のデリゲートメソッドで受けます。
extension ViewController: UIFontPickerViewControllerDelegate {
func fontPickerViewControllerDidPickFont(_ fontPicker: UIFontPickerViewController) {
if let name = fontPicker.selectedFontDescriptor?.postscriptName {
//あなたのアプリでやりたい処理
}
}
}
そのフォントがあなたのアプリで使えます。
通知系のコード
NotificationCenter.default.addObserver(
self,
selector: #selector(fontChangedNotification(_:)),
name: kCTFontManagerRegisteredFontsChangedNotification as Notification.Name,
object: nil)
例
遊教科書体を設定しました。
アプリ内にフォントを用意しないでもこれが可能になります。
このアプリです
ちなみに
フォントをダウンロードして追加することはiOS18より前から出来たのですが、OSが用意する追加フォントを設定アプリを使ってユーザーの意思で追加、というのがiOS18からです。
1はAppleが用意した追加フォントを追加する機能が非Apple製アプリ内にある。
2はどこかが用意したフォントを追加する機能が非Apple製アプリ内にある。
3はAppleが用意した追加フォントを追加するのを設定アプリで行う。
このうち1と2は従来からあり、3がiOS18からとなります。
あと細かいですが、設定アプリでの管理は削除可能であることが(Apple目線およびユーザー目線で)保証されるのでよいです。
Discussion