NCMBをSwift5環境で動かしてみた

タイトル通りですが、NCMB(NIFCLOUD mobile backend)をSwift5環境で動かしてみたので、その記録を残しておきます。

前提

普段はSwiftをメインで使っているわけではなく、そもそもSwiftを触ること自体久しぶりだったこともあるのですが、多少苦労しました。

試したこと

まず公式のgithubを参考にしました。
が、このリポジトリをダウンロードしてビルドしてみても、素直に動いてくれませんでした。
それもそのはず、よく見たらSDKのバージョンが古い。
そのため、公式ページのクイックスタートを参考に、CocoaPodsでSDKを入れました。

次に参考にしたのが、こちらの記事でした。
SDKがSwift対応になっていたので、ブリッジファイルは不要でした。
しかし、 “fieldName must not be entered.” というエラーが発生。
公式のエラーコード参照ページを見てみると、「設定不可の項目」という説明。
よく見たら下記の箇所が原因でした。

obj?.setObject("Hello, NCMB!", forKey: "createDate")

https://blog.mbaas.nifcloud.com/entry/2018/10/17/163302

createDateをforKeyに設定しているのに、内容はmessageだなと。
たしかに公式のサンプルでは forKey: “message” となっていたのでそのように修正。(ただの書き間違いかな?)
これでようやく動作しました。

公式githubから落としてきたソースはsaveInBackgroundWithBlockになっていたけどsaveInBackgroundに変更したり、細かい変更がいろいろあったので微妙に戸惑ってしまいました。

最終的なコードはこちら。

AppDelegate.swift

import UIKit
import NCMB

@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {
    var window: UIWindow?

    let applicationkey = "xxx"
    let clientkey = "xxx"

    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
        // Override point for customization after application launch.
        NCMB.setApplicationKey(applicationkey, clientKey: clientkey)
        return true
    }
}

ViewController.swift

import UIKit
import NCMB

class ViewController: UIViewController {
    @IBAction func testButton(_ sender: Any) {
        let obj = NCMBObject(className: "TestClass")
        obj?.setObject("Hello, NCMB!", forKey: "message")
        obj?.saveInBackground({ (err) in
            if err != nil {
                print(err?.localizedDescription ?? "");
            } else {
                print("Saved");
            }
        })
        
    }
}

※testButtonはInterface Builderから配置してます。

このあとはプッシュ通知をやりたい。