iOSアプリのパフォーマンス解析をしていたら、nibのロードが遅かった。原因は、正しくインストールされていないカスタムフォントをInterfaceBuilderで指定していたことが原因だった。
コードは、カスタムViewをつくるときの定石だと思うが、以下のようにnibをロードする感じ。
1 2 3 |
guard let view = UINib(nibName: "MyCustomView", bundle: nil).instantiate(withOwner: self, options: nil).first as? UIView else { return } |
で、原因を調査してヒットした記事が以下。
Nib files loading extremly slow
この記事を見て、自分のアプリのxibファイルをみてみると、ヒラギノ角ゴ Proが指定されていた!ヒラギノ角ゴシックは、標準フォントであるけど、ヒラギノ角ゴ Proはない。
デザイン時に、このフォントを使用しており、コーディング時に、フォントファイルだけ削除したことから、こうなってしまったようだ。
ってことで、他にもこのフォントが指定されていないか調べることにした。XCodeで、xibファイルを右クリッック > Open As > Source Codeして、どのように指定されているのか見てみる。
そうすると、ボタンやラベルなどに以下のように指定されていた。
1 |
<fontDescription key="fontDescription" name="HiraKakuPro-W3" family="Hiragino Kaku Gothic Pro" pointSize="18"/> |
で、これの、「HiraKakuPro」で、XCodeのプロジェクト内の検索機能で検索。
が、出てこない!なんで!
なので、さっさと諦めて、ターミナルからgrep検索することに。
(※MyAppは、実際は、自分のアプリ名です。)
そうるすと、ザクザク出てきたので、ひとつひとつのファイルを、丁寧にInterfaceBuilderから修正。ソースを直接置換してもできるのかもしれないが、InterfaceBuilderが、何をよろしくやってくれているのかわからないので、InterfaceBuilderから手で作業して修正することにした。幸いにも、ファイル数自体は、数ファイルしかなかった。
これで、パフォーマンスが改善した。というか、普通の速さにもどった。かなり速度に違いが出ると思うのだが…。フォントファイルを探しに行っているということなのだろうか?
コメント