7
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

カスタムフォントはメインターゲットに入れないと反映されない

Last updated at Posted at 2021-07-28

結論

EmbeddedFrameworkによってターゲットを分けているプロジェクトで
カスタムフォントを使用する場合には
メインターゲットにフォントファイルを入れなければいけません。

メイン以外のターゲット配下にファイルを入れて、
そのターゲットのinfo.plistにファイルを紐付けても、
使用することはできません。

言いたいことは以上なのですが、FontBookを使ったカスタムフォントの導入方法も備忘のために記述します。

カスタムフォントの導入方法

今回はHiraKakuStdN-W8を追加します。

FontBookから必要なフォントファイルを取得する

Xcodeでカスタムフォントを使用するには.ttf.otf形式のファイルをXcodeに組み込む必要があります。
デフォルトでMacに入っているFontBookを開き、お目当てのHiraKakuStdN-W8はヒラギノ角ゴのW8にあたるので、
それを検索して右クリックするとFinderからフォントファイルの在り処を調べることができます。

スクリーンショット 2021-07-27 23.28.50.png

FontBook経由でなくてもデフォルトでMacで使えるフォント(例えばBigSurの場合はこちら)は
/System/Library/Fonts/配下にあるはずなのでこちらにアクセスしてフォントファイルを取得してきてもOKです。

.ttc.otfに変換する

transfonterを使いました。
アップロードして変換後のファイルをダウンロードするだけです。

新フォントをXcodeに組み込む

  1. .otf形式に変換したフォントファイルをメインターゲット配下の任意のフォルダに格納します
  2. XcodeのProject > メインターゲットを選択 > Build Phases > Copy Bundle Resources に追加した.otfファイルが追加されていることを確認します(なければ追加してください)
  3. info.plistのFonts provided by applicationを追加して、新たに加えたhoge.otfファイルのファイル名を記述します

StroyBoard、xibから使用する

上記まで問題なくできていれば普通に使用するだけです。

before after
スクリーンショット 2021-07-27 23.24.07.png スクリーンショット 2021-07-27 23.01.48.png

ちなみにメインターゲットに入れていないと、
xib上ではフォントは変更されているのに、実機かシミュレータでは反映されません。
ご注意を。

コードから使用する

Xcodeから使用できるフォントはUIFont.familyNamesが持っているので、以下のコードからprintできます。

for family: String in UIFont.familyNames {
    print(family)
    for names: String in UIFont.fontNames(forFamilyName: family) {
        print("== \(names)")
    }
}

// 出力(抜粋)
// Hiragino Sans
// == HiraginoSans-W3
// == HiraginoSans-W6
// == HiraginoSans-W7
// == HiraKakuStdN-W8

もともと入っていたHiraginoSans-W3HiraginoSans-W6HiraginoSans-W7に加えて
HiraKakuStdN-W8が追加されています
また、メインターゲットにフォントファイルが入っていない場合こちらも出力されません。

このfamilyNameを使って以下のようにコードからも設定できます

let hirakakuStdW8Font = UIFont(name: "HiraKakuStdN-W8", size: 24)!

結論(再掲)

EmbeddedFrameworkによってターゲットを分けているプロジェクトで
カスタムフォントを使用する場合には
メインターゲットにフォントファイルを入れなければいけません。

7
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?