🍎

OneSignal-iOS-SDK v3.9.0 をインストールするとarm64シミュレータ向けビルドでリンクエラーが発生する

2021/11/17に公開

本記事は「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