【Unity】 Showing Recent Issues Undefined symbol: _ASAuthorizationScopeEmail の解決方法

NCMBでランキング機能を実装してからXcodeでビルドした時のエラーです。

エラー内容

Undefined symbols for architecture arm64:
  "_ASAuthorizationScopeEmail", referenced from:
      -[NCMBAppleAuth loginWithAppleId:] in NCMBAppleAuth.o
  "_ASAuthorizationScopeFullName", referenced from:
      -[NCMBAppleAuth loginWithAppleId:] in NCMBAppleAuth.o
  "_OBJC_CLASS_$_ASAuthorizationAppleIDProvider", referenced from:
      objc-class-ref in NCMBAppleAuth.o
  "_OBJC_CLASS_$_ASAuthorizationController", referenced from:
      objc-class-ref in NCMBAppleAuth.o
  "_OBJC_CLASS_$_UNUserNotificationCenter", referenced from:
      objc-class-ref in NCMBAppControllerPushAdditions.o
  "_OBJC_CLASS_$_WKWebView", referenced from:
      objc-class-ref in NCMBRichPushView.o
ld: symbol(s) not found for architecture arm64
clang: error: linker command failed with exit code 1 (use -v to see invocation)

解決策

以下のフレームワークが不足しているというエラーです。

  • WebKit.framework
  • UserNotifications.framework
  • AuthenticationServices.framework

Xcode側でもやれるのですがクリーンした時に同じ設定を毎回しないといけなくなるので、Unity側で対応していきます。

やり方は適当なプラグインの内1つを選択します。

インスペクターで PlatformSettings > Rarely used frameworks を開きます。

上記3つのフレームワークにチェックをつけます。

はい、これで完了です。

再びUnity側でビルドしてもらいXcodeのビルドをするとエラーが解消されます。

プラグインが1つでいい理由

これやってることはXcodeのframeworkを追加しているからです。下図はXcodeのframework一覧でここ変化しています。重複しても意味ないので1つだけでいいということです。

参考

Unity+NCMB+iOSビルドでlinker command failed with exit code 1のエラー – ゆーじの技術ブログ