R.swift を CocoaPods から Swift Package Manager (6.1.0->7.2.2)に移行した際に困ったこと

## はじめに

個人開発でも業務でも iOS や watchOS のアプリ開発で
リソースファイルを扱いやすくするためによく [R.swift](https://github.com/mac-cain13/R.swift) を使っています。
詳しくは GitHub や良記事が多々あるので見てください。

久々にライブラリの更新作業やっていたら
R.swift の 6系から 7系のアップデートに
少し大きな変更があったようで
マイグレーション作業が必要になっていました。

[7.0.0](https://github.com/mac-cain13/R.swift/releases/tag/7.0.0) のリリースノートに[マイグレーションガイド](https://github.com/mac-cain13/R.swift/blob/master/Documentation/Migration.md)のリンクがあって，
親切にも CocoaPods から Swift Package Manager への
移行動画も用意されていていたにも関わらず少し詰まってしまったのでメモ程度に残します。

## 開発環境

* M2 MacBook Air
* macOS 12.5.1
* Xcode 14.1
* R.swift 6.1.0 -> 7.2.2
  * CocoaPods から Swift Package Manager に移行したい

## まずやったこと

マイグレーションガイドを参考に🧑‍💻

* `Podfile` から R.swift を削除して `(bundle exec) pod install` で削除
* `R.generated.swift` を削除
* Build Phase の R.swift 用の Run Script 削除
* SPM で R.swift の導入
* Build Phase の `Run Build Tool Plug-in` に `RswiftGenerateInternalResources` 追加
* RswiftXcodeModifyPackages をクリック
* `import Rswift` を `import RswiftResources` に
* `ImageResourceType` などをガイド見ながら適切に書き換え
* ビルド・・・

ビルド失敗😇

## 詰まった点

### x86_64 がちらつく

シミュレータ起動しようと Run するものの・・・

> /Users/xxx/Library/Developer/Xcode/DerivedData/XXXX/SourcePackages/plugins/XXXX.output/XXXX/RswiftGenerateInternalResources/XXXX/Resources/R.generated.swift:7:8 Could not find module 'RswiftResources' for target 'x86_64-apple-ios-simulator'; found: arm64-apple-ios-simulator,

そういえば，M1 Mac の対応でいじった記憶ある。
`Excluded Architectures` の `arm64` を削除。

![スクリーンショット 2022-12-10 8.00.27.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/88266/2568dcb0-d2b7-4f7a-389d-fc4c3ab1b1d3.png)

さらに，`Podfile` にワークアラウンド的に書いてた記述を削除。

```
// Podfile

post_install do |installer|
  installer.pods_project.targets.each do |target|
    target.build_configurations.each do |config|
      config.build_settings.delete 'IPHONEOS_DEPLOYMENT_TARGET'
      // ↓ここ消す
      config.build_settings["EXCLUDED_ARCHS[sdk=iphonesimulator*]"] = "arm64"
      config.build_settings['CODE_SIGNING_ALLOWED'] = 'NO'
    end
  end
end

```

ようやくビルド成功。

### Bitrise でこける

PR 出してみたものの・・・
CI こけとる😓

該当ステップ部分は **Xcode Test for iOS** のテスト部分。
こういうログが確認できる。


> The following build commands failed:
	Validate plug-in “RswiftGenerateInternalResources” in package “r.swift”

そういえばマイグレーションガイドに書いてあったような・・・

![スクリーンショット 2022-12-10 12.42.14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/88266/3bc797f8-915b-7af7-220e-237151ad2624.png)

CI の場合 `-skipPackagePluginValidation` オプション使えと。


Bitrise の Xcode Test for iOS のステップだとどこになるのか。

あった。
**xcodebuild configuration** の
**Additional options for the xcodebuild command** 部分。

![スクリーンショット 2022-12-10 12.46.16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/88266/ff45508a-73dd-b3ef-dde4-eeb730e9736f.png)

オプションを入力して，
再度ワークフロー実行で CI 通った🎉

## おまけのモヤモヤ

文字列は strings ファイルで管理しています。
ちょっと記述が長くなるので，下記のように `typealias` を使って少し短く描けるようにしてました。

```
typealias Strings = R.string.localizable

例)
label.text = Strings.hogefuge()
```

グローバルに宣言して書いてたら怒られるので一旦戻した。
ちょっと対応考える🤔

![スクリーンショット 2022-12-10 13.04.28.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/88266/be1a4906-4914-2b23-cdad-0e77ecd88a84.png)

## おわりに

R.swift を CocoaPods から Swift Package Manager(6.1.0->7.2.2)に移行した際に困ったことについて書きました。

こういうの対応してうまく動くと嬉しい。
CocoaPods に比べて導入は楽になったようには感じますね。