個人開発のアプリを CocoaPods から Swift Package Manager に移行した。
やることはシンプルで $ pod deintegrate
して、Xcode の Package Dependencies
に Podfile にあるライブラリを追加していくだけでよい。 なのだが、同時にM1Macへの移行やiOS15対応などが発生し、色々ハマったのでメモ。
Swift PM 移行は全てのライブラリを一気に移行した方が良い
最初は Podfile からライブラリを1つずつ Swift PM に移行していったのだが、そうすると以下のようなエラーが出て困った。
全てを一気に移行するとどこでエラーが出たのかわからないから1つずつと思ったのだがそれが間違いで CocoaPods と SwiftPM が共存すると色々ややこしくなるっぽいので CocoaPods を消して Swift PM 移行した方が楽っぽい。
- framework not found FBLPromises
- Could not find module 'Xxxx' for target 'x86_64-apple-ios-simulator'; found: arm64-apple-ios-simulator, at: /Path/Build/Products/Debug-iphonesimulator/Siren.swiftmodule is missing one or more architectures required by this target: arm64.
- No such module 'GoogleMobileAds'
細かい対応
Undefined symbol: _OBJC_CLASS_$_JSContext
https://github.com/googleads/swift-package-manager-google-mobile-ads/issues/8
JavaScriptCore が抜けてるっぽい。PRはマージされてないのでXcodeで直接追加した
Crashlytics Run script
SVProggressHUD
https://github.com/SVProgressHUD/SVProgressHUD/pull/1063
Swift PM 未対応なので使うのをやめて解決
その他
Other Linker Flags
にいっぱい記載されていたので-ObjC
だけの状態にしたExcluded Architecture
をx86_64
だけ指定- 他にもごちゃごちゃいっぱい試行錯誤して触ったけど覚えてない
- Fastlane
- Gymfile の workspace を削除
- upload_symbols_to_crashlytics に binary_path の指定が必要
- upload_symbols_to_crashlytics did not handle SPM Crashlytics Solution · Issue #17288 · fastlane/fastlane · GitHub
binary_path: ENV['UPLOAD_SYMBOLS_PATH']
を UPLOAD_SYMBOLS_PATH=xcodebuild -showBuildSettings | grep -m 1 "BUILD_DIR" | grep -oEi "\/.*" | sed 's/Build\/Products/SourcePackages\/checkouts\/firebase-ios-sdk\/Crashlytics\/upload-symbols/'
で設定
おわり
数年前に Swift Package Manager が出てきた時は全然実用段階じゃなくて、こんなの使う日が来るのか? と思ってたけどもう実用段階で実際に使えるようになってすごいし感慨深い。