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


