GoogleFontsiOS

Posted on
iOS Google Fonts GoogleFontsiOS Google Fonts iOS

GoogleFontsiOSというライブラリを公開しました。

iOSでは標準で用意されているfont以外にも、font fileを用意すればそのfontを利用することができます。 Webでお馴染みのGoogle FontsがiOSのアプリでも使えるか調べた所、各fontのライセンスに則れば利用可能ということがわかりました。

各fontはCocoaPodsのPod化されておらず、手動でfont fileをdrag & dropし、info.plistに使用するfontを追記する作業が必要だと判明し、毎回プロジェクト毎に手作業でやるのは面倒なため、Google Fontsのfont全てをCocoaPodsのsubspecにしたのが本ライブラリです。

ライブラリの説明

Install

PodfileにGoogleFontsiOS/<使用したいFont Family>と書いて、pod installすれば使えます。OpenSansを使いたかったら

pod 'GoogleFontsiOS/OpenSans'

と書けばOKです。

使い方

UIFontのカテゴリとして定義されているので、

UIFont * font = [UIFont openSansLightFontOfSize:14.0f];

の様に呼ぶ事ができます。

実装

達成したかったこと

  1. 手動でfont fileをdrag&dropしたり、info.plistをいじるのを避ける
  2. 必要なfontのみ組み込む
  3. 必要になった時にfontをloadする

fontのdynamic load

この記事を参考に、font fileはbundleで、font fileは実行時にロードするようにしました。これで達成したかったことの1.と3.はクリア

subspec

Google Fontsは現在800ほどfont familyがあり、使用しないfontを含めるのは非効率なので、各font family毎にsubspecを作る事にしました。subspecを手動で全部書くのは手間なので、Google Fontsのfontごとに分類されたディレクトリ内のMETADATA.jsonをparseして必要な情報を抽出し、それを元にpodspecをコードで生成するようにしました。これで達成したかったことの2.もクリア。

interface

標準搭載のfontと同じinterfaceで扱える様に、各fontをUIFontのカテゴリとして定義。これも手動で書くのは手間なので、コードで自動生成。

所感

自動生成にrubyを使ったのですが、rubyの基本的な文法しかわかっておらず、「これで良いのだろうか…」と悩みながら書いていました。rubyは書いていて楽しかったので、今後勉強する度に少しずつ自動生成部分のコードを改善してきたいです。

cf

http://www.mokacoding.com/blog/sharing-assets-with-cocoapods-resource-bundle-and-dynamically-loaded-fonts/ http://guides.cocoapods.org/making/using-pod-lib-create.html