FJCT_ニフクラ mobile backend(mBaaS)お役立ちブログ

スマホアプリ開発にニフクラ mobile backend(mBaaS)。アプリ開発に役立つ情報をおとどけ!

Unity × iOSでNCMB SDKを利用する際によくあるエラーと回避法

f:id:mbaasdevrel:20200609155631p:plain

ゲームアプリを開発している方の中にはUnityを使っている方も多いでしょう。そしてそのゲームアプリでNCMB SDKを使ってランキングやプッシュ通知、認証などをアプリで提供しているケースもあるはずです。

Unityのプレーヤーで実行している時はよくても、iOSの実機で実行しようとしてエラーになることがよくあります。そこで、今回はよくあるエラーと、その修正法について紹介します。

ビルド時に発生するエラー

アプリのビルドに失敗するタイプのメッセージです。

Undefined symbols for architecture arm64:
  "_OBJC_CLASS_$_UNUserNotificationCenter", referenced from:
      objc-class-ref in NCMBAppControllerPushAdditions.o
  "_OBJC_CLASS_$_ASAuthorizationController", referenced from:
      objc-class-ref in NCMBAppleAuth.o
  "_OBJC_CLASS_$_ASAuthorizationAppleIDProvider", referenced from:
      objc-class-ref in NCMBAppleAuth.o
  "_ASAuthorizationScopeEmail", referenced from:
      -[NCMBAppleAuth loginWithAppleId:] in NCMBAppleAuth.o
  "_ASAuthorizationScopeFullName", referenced from:
      -[NCMBAppleAuth loginWithAppleId:] in NCMBAppleAuth.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)

このようなエラーメッセージは、アプリに必要なフレームワークが設定されていない場合に起こります。XcodeでGeneral > Frameworks, Libraries, and Embedded Contentで設定すればOKです。この時、Unityのバージョンによって対象が分かれます。

  • 2019.3より前
    ターゲットがアプリ本体
  • 2019.3以降
    ターゲットがUnityFramework

最近では2019.3以降を使うことが多いと思うので、基本的にターゲットはUnityFrameworkになるかと思います。基本的には WebKit.framework、UserNotifications.framework、AuthenticationServices.frameworkになるかと思います。

Capabilitiesが未設定のパターン

次のエラーメッセージは次のようなものです。これもビルド時に発生するものです。

Code Signing Error: "Unity-iPhone" requires a provisioning profile with the Push Notifications feature. Select a provisioning profile in the Signing & Capabilities editor.
Code Signing Error: Code signing is required for product type 'Application' in SDK 'iOS 13.5'

これは Signing & Capabilities での設定不足です。プッシュ通知の設定を忘れていると、ビルド時点でエラーになります。プッシュ通知を利用する際にはTeam設定が必須になります。また、Sign in with Appleを使う場合、そのCapabilities指定が必要です。これはアプリをターゲットにして指定します。

f:id:mbaasdevrel:20200609155853p:plain

Sign in with Appleを指定していない場合

CapabilitiesでSign in with Appleを忘れていてもビルドはできます。しかし実行時に以下のようなエラーが発生します。YOUR_APP_IDは皆さんのアプリ名に読み替えてください。この場合もCapabilitiesにて、Sign in with Appleを指定してください。

2020-06-05 23:10:24.142802+0900 YOUR_APP_ID[61348:16285249] [core] Authorization failed: Error Domain=AKAuthenticationError Code=-7026 "(null)" UserInfo={AKClientBundleID=YOUR_APP_ID}

f:id:mbaasdevrel:20200609155827p:plain

まとめ

Unityの進化は速いので、そのバージョンによって少しずつ設定も変わっています。NCMB SDKとの組み合わせでエラーが出た場合には、コミュニティにて質問してみてください。

中津川 篤司

中津川 篤司

NCMBエヴァンジェリスト。プログラマ、エンジニアとしていくつかの企業で働き、28歳のときに独立。 2004年、まだ情報が少なかったオープンソースソフトの技術ブログ「MOONGIFT」を開設し、毎日情報を発信している。2013年に法人化、ビジネスとエンジニアを結ぶDXエージェンシー「DevRel」活動をスタート。