ゲームアプリを開発している方の中には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指定が必要です。これはアプリをターゲットにして指定します。
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}
まとめ
Unityの進化は速いので、そのバージョンによって少しずつ設定も変わっています。NCMB SDKとの組み合わせでエラーが出た場合には、コミュニティにて質問してみてください。