結論
EmbeddedFrameworkによってターゲットを分けているプロジェクトで
カスタムフォントを使用する場合には
メインターゲットにフォントファイルを入れなければいけません。
メイン以外のターゲット配下にファイルを入れて、
そのターゲットのinfo.plist
にファイルを紐付けても、
使用することはできません。
言いたいことは以上なのですが、FontBookを使ったカスタムフォントの導入方法も備忘のために記述します。
カスタムフォントの導入方法
今回はHiraKakuStdN-W8
を追加します。
FontBookから必要なフォントファイルを取得する
Xcodeでカスタムフォントを使用するには.ttf
、.otf
形式のファイルをXcodeに組み込む必要があります。
デフォルトでMacに入っているFontBook
を開き、お目当てのHiraKakuStdN-W8はヒラギノ角ゴのW8にあたるので、
それを検索して右クリックするとFinderからフォントファイルの在り処を調べることができます。
FontBook経由でなくてもデフォルトでMacで使えるフォント(例えばBigSurの場合はこちら)は
/System/Library/Fonts/
配下にあるはずなのでこちらにアクセスしてフォントファイルを取得してきてもOKです。
.ttc
を.otf
に変換する
transfonterを使いました。
アップロードして変換後のファイルをダウンロードするだけです。
新フォントをXcodeに組み込む
-
.otf
形式に変換したフォントファイルをメインターゲット配下の任意のフォルダに格納します - XcodeのProject > メインターゲットを選択 > Build Phases > Copy Bundle Resources に追加した
.otf
ファイルが追加されていることを確認します(なければ追加してください) - info.plistの
Fonts provided by application
を追加して、新たに加えたhoge.otf
ファイルのファイル名を記述します
StroyBoard、xibから使用する
上記まで問題なくできていれば普通に使用するだけです。
before | after |
---|---|
![]() |
![]() |
ちなみにメインターゲットに入れていないと、
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-W3
、HiraginoSans-W6
、HiraginoSans-W7
に加えて
HiraKakuStdN-W8
が追加されています
また、メインターゲットにフォントファイルが入っていない場合こちらも出力されません。
このfamilyNameを使って以下のようにコードからも設定できます
let hirakakuStdW8Font = UIFont(name: "HiraKakuStdN-W8", size: 24)!
結論(再掲)
EmbeddedFrameworkによってターゲットを分けているプロジェクトで
カスタムフォントを使用する場合には
メインターゲットにフォントファイルを入れなければいけません。