LoginSignup
10
3

More than 1 year has passed since last update.

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

Posted at

はじめに

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

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

7.0.0 のリリースノートにマイグレーションガイドのリンクがあって,
親切にも 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-inRswiftGenerateInternalResources 追加
  • RswiftXcodeModifyPackages をクリック
  • import Rswiftimport 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 Architecturesarm64 を削除。

スクリーンショット 2022-12-10 8.00.27.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

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

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

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

スクリーンショット 2022-12-10 12.46.16.png

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

おまけのモヤモヤ

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

typealias Strings = R.string.localizable

例)
label.text = Strings.hogefuge()

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

スクリーンショット 2022-12-10 13.04.28.png

おわりに

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

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

10
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
3