🌊

R.sxiftの導入が反映されない問題を解決した

に公開

こんにちは。

はじめてRswiftを導入して、自分のアプリをリファクタリングしました。
そのときに、R.swiftのエラー解決に少しつまづいた点をまとめておきます。

検索してもなかなかドンピシャの回答が得られなかったので、自分でまとめることを思い立ちました。

AIの言う通りにするとなぜかうまくいかない

まず、AIに質問をするとR.swiftの導入方法を教えてもらいました。
(このとおりにやるとエラーの連続だったのでやらないように!!
どうやら古いやり方を教えてくれたようです。)

ただ、簡潔にわかりやすく書いてくれているので、今回はAIが教えてくれた手順にダメ出しをすることで私のアプリを正しく動くようにしていきます。

R.Swift を Swift Package Manager(SPM)で導入する方法!

R.Swift を使うと、画像・カラー・文字列などを安全に管理できる ようになります! ✅ ヒューマンエラーを減らし、コードの可読性を向上! ✅ チーム開発でも安心してリソースを扱える!

1️⃣ Swift Package Manager で R.Swift を追加

📌 Xcode で以下の手順を実行!
1️⃣ Xcode を開く
2️⃣ [File] → [Add Packages] を選択
3️⃣ 検索欄に以下のURLを入力!
https://github.com/mac-cain13/R.swift
4️⃣ 最新バージョンを選択し、[Add Package] をクリック!

✅ これで R.Swift のライブラリがプロジェクトに追加されます!🚀

2️⃣ Run Script を設定

📌 R.generated.swift を自動生成するために、Run Script を追加!
1️⃣ Xcode の [TARGETS] → [Build Phases] を開く
2️⃣ 「+」をクリックし、[New Run Script Phase] を追加
3️⃣ 以下のスクリプトを入力!

sh
if which rswift >/dev/null; then
    rswift generate "${SRCROOT}/${TARGET_NAME}/R.generated.swift"
else
    echo "rswift not installed"
fi

4️⃣ 「Compile Sources」の上に移動させる!
✅ これでビルド時に R.generated.swift が自動生成されます!✨

3️⃣ R.Swift を使ってコードをリファクタリング

📌 以下のような「ベタ書きの文字列」を R.Swift に置き換え!
🔹 画像の指定(Before → After)

// ❌ 文字列で指定(ヒューマンエラーの原因)
imageView.image = UIImage(named: "background")

// ✅ R.Swift を使う(安全!)
imageView.image = R.image.background()

🔹 カラーの指定(Before → After)

// ❌ 文字列で指定(ミスしやすい)
view.backgroundColor = UIColor(named: "primaryColor")

// ✅ R.Swift を使う(安全!)
view.backgroundColor = R.color.primaryColor()

🔹 XIB の識別子(Before → After)

// ❌ 文字列で指定(タイプミスのリスク)
let nib = UINib(nibName: "CustomCell", bundle: nil)

// ✅ R.Swift を使う(安全!)
let nib = R.nib.customCell()

✅ これで「文字列のヒューマンエラー」を防ぎ、コードを安全に管理できます!🚀
📌 注意点
🔹 導入後に "Cannot find 'R' in scope" のエラーが出る場合 👉 ビルドすると解消されるので、まずはビルドしてみてください!
🔹 R.Swift で置き換えられるもの ✅ カラーコード ✅ 画像ファイル ✅ XIBファイルの識別子 ✅ ベタ書きの文字列(例:"Tokyo" など)
📌 この方法でリファクタリングを進めてみてください!🚀 もし 追加の質問やカスタマイズが必要なら、気軽に聞いてください!✨

これだけだとうまくいかない

上のように作業をしてR.swiftにコードを書き換えていくと
こんなエラーが大量に現れます。

Cannot find 'R' in scope

通常はこのエラーが出てもビルドをすることで、エラーは自然に消えるらしいので無視してよいと他のサイトには書いてあったのですが、、、
AIのやり方には致命的な問題点がありました。

そもそもR.swiftがrunしてない!!

2の手順において、

2️⃣ Run Script を設定

📌 R.generated.swift を自動生成するために、Run Script を追加!
1️⃣ Xcode の [TARGETS] → [Build Phases] を開く
2️⃣ 「+」をクリックし、[New Run Script Phase] を追加
3️⃣ 以下のスクリプトを入力!

sh
if which rswift >/dev/null; then
rswift generate "${SRCROOT}/${TARGET_NAME}/R.generated.swift"

else
echo "rswift not installed"
fi

>4️⃣ 「Compile Sources」の上に移動させる!
>✅ これでビルド時に R.generated.swift  が自動生成されます!✨

現在は、R.generated.swiftは見えないところで管理される

なんと現在はR.generated.swiftは見えないところで管理されるようです。
必死になってファイルを探していた努力は、、、

もうひとつ手順を加える

run scriptを貼り付ける段階でもうひとつ

run scriptの上に、
[Run Build Tool Plug-ins]というタブがありますので、

ここの「+」を押して、RswiftGeneratePublicResources(Rswift)を選択する。

まとめ

なんとか解決しました。

おそらく、run scriptの貼り付けるコードをきちんと書くことで改善する方法もあったかと思うのですが、

[TARGETS]ってどこ?っていうレベルの人は、AIに聞いてみましょう。場所も教えてくれます。

Discussion