酢ろぐ!

カレーが嫌いなスマートフォンアプリプログラマのブログ。

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)

今までのバージョンはうまく動いてたのにどうして?

v3.8.xからv3.9.0へマイナーバージョンが上がってため「大きな変更があったのかな?」と調査した。リンクエラーが通らなくなった理由は.xcframeworkの中身を見るとわかった。

v3.8.0

これは過去バージョン。arm64シミュレータ向けにサポートされていることがわかる。

f:id:ch3cooh393:20211115133051p:plain

v3.9.0

こちらが最新バージョン。arm64向けのサポートが消えてしまっているのがわかる。

f:id:ch3cooh393:20211115133049p:plain

対応編

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と同じように問題なくリンクエラーが通るようになった。