コピペSEが携帯アプリで一攫千金を狙うブログ

SEやってます。Javaラーです。主な仕事はコピペです。携帯アプリ、イチから作っていきます。

mBaasで遊んでみた

ども。いきなり更新滞ってるきんみです。

基本構文の勉強&記事化は正直しんどくなってきたんで色々遊んでます。

いやー分かり易くSwift入門記事を書かれてる方々、尊敬します。

なんかもう、自演拷問とさえ思うぐらいきついです。

書きかけの記事あるんで、ちょっとずつ執筆&公開できたらなと思います。

さて、タイトル通り、mBassで遊んでみたので、その事書きます。


mBaasとは

BaaS 【 Backend as a Service 】 MBaaS / Mobile Backend as a Service
BaaSとは、スマートフォン向けのWebアプリケーションが必要とするサーバ側の様々な機能をインターネットを通じてサービスとして提供するクラウドサービスの一種。

提供される機能はサービスにより様々だが、利用者情報の登録・管理や認証、データの保管、プッシュ通知、課金・決済、ソーシャルメディアとの連携などが実装されていることが多い。アプリケーション開発者はこれらの機能のAPIを呼び出すよう設定することで、自らのアプリケーションの一部として取り込むことができる。

らしいっす。

アプリ作る上で、サーバ通信するような機能をつけたい場合もあるでしょう。
プッシュ通知、データ登録、等々。
ただ、サーバ構築はノウハウも予算もないので、基本無料系のこういうサービス使っていこうと思います。

今回使用したのはここ。
多分一番代表的なとこだと思います(ググった感じ)
mb.cloud.nifty.com

まずは1社、使い倒してみない事には良し悪しは分からないと思い、あまり比較とかはしてません。

登録とかは難なくいきました。
さぁ、いざ使ってみよう。

  • 躓き①

・・・公式ドキュメントがObjective-C向けのみ orz

中の人ブログ等にはSwift版の解説があり、サンプルプロジェクト等もありましたが、
ちゃんと導入からしたかったのでこちらを参考にさせてもらいました。
<CocoaPods>SwiftでmBaaSを始めよう!(use_framewoks!を有効にした方法) - Qiita

ふむふむ。CocoaPodsとかいうライブラリ管理システムを使うんですね。
JavaでいうMavenみたいなもんか。

コンソール開いていざインストール!

  • 躓き②

ERROR: While executing gem ... (Errno::EPERM)

なんじゃこりゃ(@д@;

El CapitanにアップデートしてCocoaPodsがインストールできない - Qiita
らしいっす。
cocoa pods のupdateも
-n インストールディレクト オプションつければいけます。

んで、上記導入サイトの 5. mBaaSのコードを試してみよう!
を試してみます。

  • 躓き③

f:id:copipe-se:20160626170635p:plain
Closure cannot have keyword arguments

え、えぇと。。。
クロージャーにこのキーワードの引数は無い?かな?
んなバカな。

    /**
     設定されている検索条件に当てはまるオブジェクトを非同期で取得。取得し終わったら与えられたblockを呼び出す。
     @param block 信後に実行されるblock。blockは次の引数のシグネチャを持つ必要がある(NSArray *objects, NSError *error)
     objectsには取得したオブジェクトが渡される。errorにはエラーがなければnilが渡される。
     */
    public func findObjectsInBackgroundWithBlock(block: NCMBArrayResultBlock!)

ふ・・・ふむ。
んで、NCMBArrayResultBlockとは?

public typealias NCMBArrayResultBlock = ([AnyObject]!, NSError!) -> Void

あんじゃん!o(`ω´ )o

エラーメッセージでググっても日本語サイトはヒットせず。。
日本人でこのエラーにびっくりしたのは俺だけって事なのかな。。

stackoverflowにありました。
Swift - Closure cannot have keyword arguments Error In Xcode 7.3 - Stack Overflow

どうやらSwift2.2から書き方変わってるっぽい。。まじか。

これを

        query.findObjectsInBackgroundWithBlock{(NSArray objects, NSError error) in

こう!

        query.findObjectsInBackgroundWithBlock{(objects, error ) in

f:id:copipe-se:20160626172200p:plain

消えた!(T ^ T)

よっしゃビルドや!

  • 躓き④
2016-06-26 17:31:39.351 mBaasTest[10855:1259083] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Application key or Client key must not be nil.'
*** First throw call stack:
(
	0   CoreFoundation                      0x000000010fd0bd85 __exceptionPreprocess + 165
〜(略)〜

ちくしょう・・・なんやこれ・・・


今から頑張ります。
解決出来たら更新します。。。

出来ました!

        NCMB.setApplicationKey(applicationkey, clientKey: client key)

これ入れるの忘れてました。。。
お恥ずかしい。。。

キー設定なんて重要なの忘れちゃあかんですね。。。
niftyさんSwift2対応してないんじゃとか邪推しちゃいました。ごめんなさい。

f:id:copipe-se:20160626195424p:plain

ちゃんとダッシュボード上でも確認出来ました。
これでDB使うようなのは出来るのかな?
むぅ。。。難しい。。。