NCMBをSwift5環境で動かしてみた
タイトル通りですが、NCMB(NIFCLOUD mobile backend)をSwift5環境で動かしてみたので、その記録を残しておきます。
前提
普段はSwiftをメインで使っているわけではなく、そもそもSwiftを触ること自体久しぶりだったこともあるのですが、多少苦労しました。
試したこと
まず公式のgithubを参考にしました。
が、このリポジトリをダウンロードしてビルドしてみても、素直に動いてくれませんでした。
それもそのはず、よく見たらSDKのバージョンが古い。
そのため、公式ページのクイックスタートを参考に、CocoaPodsでSDKを入れました。
次に参考にしたのが、こちらの記事でした。
SDKがSwift対応になっていたので、ブリッジファイルは不要でした。
しかし、 “fieldName must not be entered.” というエラーが発生。
公式のエラーコード参照ページを見てみると、「設定不可の項目」という説明。
よく見たら下記の箇所が原因でした。
https://blog.mbaas.nifcloud.com/entry/2018/10/17/163302
obj?.setObject("Hello, NCMB!", forKey: "createDate")
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から配置してます。
このあとはプッシュ通知をやりたい。