OneSignal-iOS-SDK v3.9.0 をインストールするとarm64シミュレータ向けビルドでリンクエラーが発生する
本記事は「OneSignal-iOS-SDK v3.9.0 をインストールするとarm64シミュレータ向けビルドでリンクエラーが発生する - 酢ろぐ!」からの転載です。
Carthageで「OneSignal iOS SDK v3.9.0」をインストールすると、arm64シミュレータ向けのビルド時にリンクエラーが発生してしまう。iOSシミュレータでデバッグ実行できなくなってしまった。
この問題は2021/11/17にv3.9.1がリリースされたことで既に解決している。リンクエラーは発生せずにビルドも通るようになった。
OneSignal-iOS-SDK v3.9.0にアップデートするとarm64シミュレータ向けビルドでリンクエラーが発生した
2021/11/14にOneSignal iOS SDKがv3.9.0に更新された。早速プロジェクトをアップデートした結果、リンクエラーが発生するようになってしまった。
ld: warning: ignoring file /Users/ch3cooh/Library/Developer/Xcode/DerivedData/MY_APPLICATION-eoyslbwfrtrzwjcmqeevlxktpqgn/Build/Products/Debug-iphonesimulator/OneSignal.framework/OneSignal, missing required architecture arm64 in file /Users/ch3cooh/Library/Developer/Xcode/DerivedData/MY_APPLICATION-eoyslbwfrtrzwjcmqeevlxktpqgn/Build/Products/Debug-iphonesimulator/OneSignal.framework/OneSignal (2 slices).
Undefined symbols for architecture arm64:
"_OBJC_CLASS_$_OneSignal", referenced from:
objc-class-ref in NotificationService.o
ld: symbol(s) not found for architecture arm64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
今までのバージョンではarm64シミュレータでも動いてたのにどうして?
v3.8.xからv3.9.0へマイナーバージョンが上がっていたので「大きな変更があったのかな?」と調査した。GitHubでもIssueに登録されていなかったが、リンクエラーが通らなくなった理由は.xcframeworkの中身を見るとわかった。
v3.8.0 での.xcframework
これは過去バージョンであるv3.8.0 の.xcframework の中身。arm64シミュレータ向けにサポートされていることがわかる。
v3.9.0 での.xcframework
こちらが最新バージョンであるv3.9.0 の.xcframework の中身。arm64シミュレータ向けのサポートが消えてしまっているのがわかる。arm64対応はされているので実機デバッグとアーカイブはできる。
対応編
Cartfileで以下のように書くことでバージョンを v3.8.0 に固定できる。
github "OneSignal/OneSignal-iOS-SDK" == 3.8.0
応急処置だがこれでしばらくは乗り切れるだろう。OneSignal iOS SDKがv3.9.0でarm64向けシミュレータのサポートを正式にやめてしまったのか今後の動向を追いたいと思う。
(2021/11/17追記) v3.9.1でarm64シミュレータ向けのサポートが復活した
2021/11/17にv3.9.1がリリースされた。arm64シミュレータとmaccatalystのサポートが復活していた。v3.8.xと同じように問題なくリンクエラーが通るようになった。
Discussion