LoginSignup
4
4

More than 5 years have passed since last update.

RubyMotionでNiftyCloudを使う

Last updated at Posted at 2014-01-15

国産のmBaaSバンザイ。という事でParseではなくてNiftyCloud MobileBackendを使おうとおもった...けど、うまくいかなくて試行錯誤の結果使えるようになったのでその記録。

クイックスタート(iOS)ニフティクラウドを参考にします。

1.RubyMotionプロジェクトを作成する

motion create NCMBTest

2.SDKダウンロード及びインストール

2-1.SDKをダウンロードしてインストールする

iOS 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で読み込みます。

Gemfile
gem 'rake'
gem 'motion-cocoapods'
Rakefile

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を使うように書きなおす:-)
4
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
4