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)
今までのバージョンはうまく動いてたのにどうして?
v3.8.xからv3.9.0へマイナーバージョンが上がってため「大きな変更があったのかな?」と調査した。リンクエラーが通らなくなった理由は.xcframeworkの中身を見るとわかった。
v3.8.0
これは過去バージョン。arm64シミュレータ向けにサポートされていることがわかる。
v3.9.0
こちらが最新バージョン。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と同じように問題なくリンクエラーが通るようになった。