国産のmBaaSバンザイ。という事でParseではなくてNiftyCloud MobileBackendを使おうとおもった...けど、うまくいかなくて試行錯誤の結果使えるようになったのでその記録。
クイックスタート(iOS)ニフティクラウドを参考にします。
1.RubyMotionプロジェクトを作成する
motion create NCMBTest
2.SDKダウンロード及びインストール
2-1.SDKをダウンロードしてインストールする
2-1で得られた「NCMB.framework」をvendor/ディレクトリを作成してコピーします。
2-2 JSONKitは自分でframework化する
また、JSONKitについてはcocoapodではうまく組み込めませんでしたので、以下のように自分でJSONKit.frameworkを作成して利用しました。
独自Frameworkの作り方(&RubyMotionでのテスト)
これで作成したJSONKit.Frameworkをvendor以下にコピーします。
3.プログラム
3-1.Rakefileを変更する
GemfileとRakefileを以下のように変更して依存するFrameworkを読み込むように設定します。FacebookのSDKはcocoapodsで読み込みます。
gem 'rake'
gem 'motion-cocoapods'
Motion::Project::App.setup do |app|
# Use `rake config' to see complete project settings.
app.name = 'NCMBTest'
app.frameworks += [
"SystemConfiguration","MobileCoreService","AudioToolbox"
]
app.pods do
pod 'Facebook-iOS-SDK'
end
app.vendor_project(
'vendor/NCMB.framework',
:static,
:products => ['NCMB'],
:headers_dir => 'Headers'
)
app.vendor_project(
'vendor/JSONKit.framework',
:static,
:products => ['JSONKit'],
:headers_dir => 'Headers'
)
end
※FacebookのSDKも入れないとリンクエラーが出て動きませんでした。
3-2.コードを記述する
クイックスタートのサンプルコードはRubyMotionで書くと以下のようになります。
NCMB.setApplicationKey([APP_KEY], clientKey:[CLIENT_KEY])
query = NCMBQuery.queryWithClassName("TestClass")
query.whereKey("message", equalTo:"test")
query.findObjectsInBackgroundWithBlock(lambda do |objects, error|
if error == nil
if objects.size > 0
p "[FIND] #{objects[0]['message']}"
else
obj = NCMBObject.objectWithClassName("TestClass")
obj['message'] = "Hello RubyMotion!"
saveError = Pointer.new(:object)
obj.save(saveError)
if saveError[0] == nil
p "[SAVE] done"
else
p "[SAVE-ERROR] #{saveError[0].localizedDescription}"
end
end
else
p "[ERROR] #{error.localizedDescription}"
end
end)
※errorはNSErrorで返ってきているのだが、saveErrorは実際にテストができなかったので怪しいかも。このあたりのRubyMotinoに変換した場合のblockとかpointerの扱いはまだ勉強中です。
2-5.実行する
bundle install
rake pod:install
rake
で実行します。
メモ
- JSONKitでハマったので次のバージョンは非依存にしてほしいなぁ(希望)
- やる気がでてきたら他のAPIもRubyMotionで書いてみる
- もっとやる気ができたらアプリをNiftyCloudを使うように書きなおす:-)