R.swiftをどうしてもCarthageで使いたいあなたへ

# R.swift

[https://github.com/mac-cain13/R.swift](https://github.com/mac-cain13/R.swift)

R.swift 便利ですよね。

これが

```swift
let icon = UIImage(named: "settings-icon")
let font = UIFont(name: "San Francisco", size: 42)
let color = UIColor(named: "indictator highlight")
let viewController = CustomViewController(nibName: "CustomView", bundle: nil)
let string = String(format: NSLocalizedString("welcome.withName", comment: ""), locale: NSLocale.current, "Arthur Dent")
```

こうなるやつです。

```swift
let icon = R.image.settingsIcon()
let font = R.font.sanFrancisco(size: 42)
let color = R.color.indicatorHighlight()
let viewController = CustomViewController(nib: R.nib.customView)
let string = R.string.localizable.welcomeWithName("Arthur Dent")
```

# Carthageだと使えない？

> CocoaPods is the recommended way of installation, as this avoids including any binary files into your project.
> 
> Note on Carthage: R.swift is a tool used in a build step, it is not a dynamic library. Therefore it is not possible to install it with Carthage.

[https://github.com/mac-cain13/R.swift#installation](https://github.com/mac-cain13/R.swift#installation)

R.swiftはCocoaPodsでのインストールがオススメされています。
R.swiftはビルド時に実行されるツールなので、Carthageで単純にインストールできるようなものではないからですね。

# それでもできればCocoaPodsではなくCarthageを使いたい
そういう時、あるかもしれません。
そんな時はこれを使いましょう。

[RswiftDownloader.swift - Download R.swift binary for your Cartfile.resolved · GitHub](https://gist.github.com/monoqlo/848caf689e74378acac8a3dd30320f41)

使い方はかんたん。

1. CarthageでR.swift.Libraryをインストール
2. RswiftDownloaderを実行
3. [公式インストール手順](https://github.com/mac-cain13/R.swift#manually)の2から続ける

もう少し詳しく見ていきます。

## R.swift.Libraryをインストール
Cartfileを用意して、

```Cartfile
github "mac-cain13/R.swift.Library"
```

インストールします。

```
$ carthage update
```

ビルドされたFrameworkはXcodeプロジェクトに入れておきましょう。

詳しくは公式ドキュメントを読んで下さい。
https://github.com/Carthage/Carthage#if-youre-building-for-ios-tvos-or-watchos

## RswiftDownloaderの使い方

[RswiftDownloader.swift - Download R.swift binary for your Cartfile.resolved · GitHub](https://gist.github.com/monoqlo/848caf689e74378acac8a3dd30320f41) 
ここからダウンロードして、プロジェクト内に置きましょう。（場所はどこでもOK）

Cartfile.resolvedのパスを指定してRswiftDownloaderを実行します。

```
$ swift PATH/TO/RswiftDownloader.swift PATH/TO/Cartfile.resolved
```

Cartfile.resolvedからインストールされているR.swift.Libraryのバージョンを特定できると、
対応するR.swiftのビルド済みバイナリを [https://github.com/mac-cain13/R.swift/releases](https://github.com/mac-cain13/R.swift/releases) からダウンロードします。
Cartfile.resolvedの置かれているディレクトリにrswiftディレクトリがつくられ、その中にrswiftバイナリが置かれます。

```
YourApp/
  ├ RswiftDownloader.swift
  ├ Cartfile.resolved
  └ rswift/
    └ rswift
```

## Xcodeプロジェクトの設定をする
ここまでで [公式インストール手順](https://github.com/mac-cain13/R.swift#manually) の1までは終わっています。
以降はCocoaPodsやマニュアルインストールと同じ手順と変わりません。
強いていうと、`Run Script` で指定するrswiftのパスを間違えないようにして下さい。

こんな感じですね。

```
"$SRCROOT/rswift/rswift" generate "$SRCROOT/R.generated.swift"
```
 

# 番外編 fastlaneで使う
たとえばこんな感じ。

```ruby
lane :rswift do
  swift_file = Dir.pwd + "/../RswiftDownloader.swift"
  cartfile_resolved_path = Dir.pwd + "/../Cartfile.resolved"
  command = "/usr/bin/swift #{swift_file} #{cartfile_resolved_path}"
  system(command)
end
```

# まとめ

結局のところ、R.swiftをCocoaPodsでインストールする時にやっているのは、
指定されたバージョンのR.swift.Libraryをインストールし、
該当バージョンのバイナリをダウンロードしてきてプロジェクト内に設置しているだけです。

なので、バイナリダウンロードの部分さえお手軽にできて、
バージョンの整合性が取れればCarthageでも特に困りません。アップデートもお手軽ですね。
コマンドを何度も叩くのが面倒なら、fastlaneでlaneを組み合わせれば解決できますね。

もしどうしてもCocoaPodsを使いたくないとか、使いたくない事情がある方がいたら、ぜひ🙂

# 参考
* [RswiftDownloader.swift - Download R.swift binary for your Cartfile.resolved · GitHub](https://gist.github.com/monoqlo/848caf689e74378acac8a3dd30320f41)
* [GitHub - mac-cain13/R.swift: Get strong typed, autocompleted resources like images, fonts and segues in Swift projects](https://github.com/mac-cain13/R.swift)
* [GitHub - Carthage/Carthage: A simple, decentralized dependency manager for Cocoa](https://github.com/Carthage/Carthage)