KYな雑記帳

個人的なメモ帳

Xcodeにフォントを追加しようとしたらフリーズした話

アプリを作っていると、デフォルトのフォントだけでなく様々なフォントを使いたいと思いますよね?
特に今だとネットで探せば多くのフォントが探せて使えます。
今回は、Xcodeを使ってフォントを追加したら問題が起きたのでその備忘録です。

起きた問題

Xcodeiosアプリの画面レイアウトを実装しているときにフォントの指定があったので、Xcodeからinfo.plistを編集してアプリに新しくフォントを組み込みました。
そうしたらアプリがフリーズするようになってしまいました…

原因

相談したらある程度どのあたりでフリーズしているのかメドがついたので、ブレークポイントを使ってどの部分でフリーズしているのか確認しました。
そうしたら、 CGFontCreateWithDataProvider という関数で処理が止まっていました。
この関数は、サーバーなどにおいてあるフォントファイルをダウンロードしてきて、アプリで使えるように登録する部分で使われていました。
どうして、そんなことをしているかというと、フォントファイルであるttfファイルは重いので(1Mぐらいある)いくつもフォントを使おうおするとその分アプリの容量が増えてしまいます。
しかし、App Storeでは50Mを超えるとwifi環境でないとアプリをダウンロード・インストールできなくなります。
それを避けるために、サーバーに多くのフォントファイルを置いて、起動したら画面を出す前にフォントファイルをダウンロードして使えるように登録している、というわけです。
しかし、Xcodeからもフォントを組み込んでいると、Xcodeから組み込まれたフォントが読まれる前にこの関数が呼ばれるとフリーズしてしまうみたいです。

解決方法

解決策としては簡単で、この CGFontCreateWithDataProvider が呼ばれる前にIUFont関数を実行して、Xcodeから組み込まれたフォントを読み込めばいい感じでした。