iOS Swift 5| R.swiftでリソース管理を楽ちんに
2019年4月10日追記:Swift5での導入方法が変わりましたので、文中にやり方を追加で書きました。
どうも、もっち(@dkmczk)です。
今回は、私がプロダクトを作る際に必ず導入するライブラリの1つであるリソース管理ライブラリ「R.swift」の説明と導入方法を具体的な事例を交えて、紹介していきたいと思います。
何ができるのか?
iOSアプリを開発したことある人なら、必ず一回は頭を悩ませたであろうハードコーディングによるスペルミスのエラーを防ぐ時にとても役立つライブラリです。例えば、下記の場合は良くあるパターンでは無いでしょうか?
本来なら、Hoge
というストーリボードを呼び出したいのに、hoge
と小文字のスペルミスをしてしまって、アプリがクラッシュしてしまう、なんてありがちですよね。
let hoge = UIStoryboard(name: "hoge", bundle: nil).instantiateInitialViewController() as? HogeViewController
そんな時に役立つのが「R.swift」、ハードコーディングによるスペルミスや、画像、ストーリーボード、セル、色などのリソースを呼び出す時に、コード補完で作業の生産性を著しく向上させてくれます。なにより、ソースコードに直接文字列を打ち込まなくなるので、コードが見やすくなります。
上記のコードをR.swiftを使って書き直した場合は、こんな感じになります。
let hoge = R.storyboard.hoge.instantiateInitialViewController()
直接、ソースコードに文字列を打ち込むことは無くなり、短くそして可読性も上がっています。 R.
まで入力すると、コードの自動補完で入力することができます。
導入方法
さて、便利なことを分かって頂けたことと思いますので、さっそく導入に入っていきます。まずは、Podfile
にライブラリを追記します。
pod 'R.swift'
完了したら、 pod install
をしましょう。
次に、 Run Script
を設定していきます。 TARGETS > Build Phases
に進み、 +
ボタンをクリックして下さい。
ボタンをクリックすると、下記のポップアップ画面が出ますので、 New Run Script Phase
をクリック。
次に、新しく生成されたRun Script
を[CP]Check Pods Manifest.lock
と Compile Sources
の間にドラッグ&ドロップをして下さい。
Run Scriptをクリックし、黒い画面部分に、下記コードを挿入して下さい。※Swift3.x系の場合、generate
の部分は必要ありません。
"$PODS_ROOT/R.swift/rswift" generate "$SRCROOT"
Swift5での導入方法
Swift5系の場合は、青枠で囲まれている部分に下記のコードを挿入して下さい。
"$PODS_ROOT/R.swift/rswift" generate "$SRCROOT/R.generated.swift"
そして、Input Filesと書かれている部分で、+ボタンを押して、下記コードを挿入します。
$TEMP_DIR/rswift-lastrun
その後、Output filesと書かれている部分で、+ボタンを押して、下記コードを挿入します。
$SRCROOT/R.generated.swift
入力が完了したら、アプリをビルドして下さい。アプリフォルダを見てみると、 R.generated.swift
が生成されたことを確認できるかと思います。
次に、生成されたR.generated.swift
をプロジェクトのルートに移します。下記を参考に、ドラッグ&ドロップでファイルを移動させて下さい。※ copy item if needed
はチェックを外して下さい。
ここまで完了しましたら、下記を参考に HogeViewController
と Hoge.storyboard
を作成して下さい。
その後にアプリをビルドし、 R.generated.swift
を見てみると、このようにリソースファイルまでのアクセスが定義され、型指定でリソースへのアクセスが可能になるという仕組みです。
では、実際に試してみましょう。先ほど作ったリソースへのアクセスを試してみます。
このように、型が補完され、Hoge.storyboard
までのアクセスが容易にできるようになりました!
最後に
上記以外に、
- Images
- Fonts
- Resource files
- Colors
- Localized strings
- Storyboards
- Segues
- Nibs
- Reusable cells
などのリソースファイルへのアクセスが対応しています。詳しくは、公式のドキュメントを見てみて下さいね!
— — -
TwitterでiOS関連の情報発信をしています。
もし良かったらフォローを宜しくお願いします。