✍️

ついにiOS18から設定アプリでAppleのシステムフォントが追加可能になりました【手書き風/教科書体】

2024/09/17に公開

OSの追加システムフォントは、Appleが(フォント制作会社からライセンスを買って?)用意しているものです。macOSには昔からあります。

iOSは、iOS17までOSレベルのUIでシステムフォントを追加する機能がありませんでした。しかし、ついにiOS18から追加システムフォントを導入する仕組みが出来ました。

システムフォント追加方法(ユーザー目線)

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)

遊教科書体を設定しました。
アプリ内にフォントを用意しないでもこれが可能になります。

このアプリです
https://apps.apple.com/jp/app/id6443520040

ちなみに

フォントをダウンロードして追加することはiOS18より前から出来たのですが、OSが用意する追加フォントを設定アプリを使ってユーザーの意思で追加、というのがiOS18からです。

1はAppleが用意した追加フォントを追加する機能が非Apple製アプリ内にある。
2はどこかが用意したフォントを追加する機能が非Apple製アプリ内にある。
3はAppleが用意した追加フォントを追加するのを設定アプリで行う。

このうち1と2は従来からあり、3がiOS18からとなります。

あと細かいですが、設定アプリでの管理は削除可能であることが(Apple目線およびユーザー目線で)保証されるのでよいです。

Discussion