コンユウメモ @kon_yu

作ったガラクタとか、旅行とかの話

Objective-Record導入手順

Objective-Record導入手順

新年一発目は抱負ではなく、普通のこと

Core Dataは素で書くと結構めんどくさいっぽいので Core DataをActiveRecordっぽくラップしてくれるパッケージ Objective-Record https://github.com/mneorr/Objective-Record これを動く環境を構築する。 目標はサンプルプロジェクトを動かすところまで。

環境

  • OS OSX 10.7 Lion
  • git version 1.7.12.1
  • ruby 1.9.3p125
  • gem 1.8.17
  • Xcode 4.5.2

要は、macでxcoderubyとgitがインストールされている状態

Objective-Record DL方法

https://github.com/mneorr/Objective-Record 上記サイトからアクセスしてまずは、git clone する。 本体及びサンプルプロジェクト(SampleProject)をクローン(DL)する

git clone https://github.com/mneorr/Objective-Record.git

Readme.mdインストール方法を見ると

  1. Install with CocoaPods or clone

  2. import "ObjectiveRecord.h" in your model or .pch file.

とある。CocoaPods http://cocoapods.org/とかいうRubyで言うところのRubygemsをインストールする必要があるらしい。

SampleProjectディレクトリ直下にあるPodfileがrubygemsにおけるGemfileに相当し、依存ファイルのライブラリなどをDLするのに必要

CocoaPodsインストール方法

CocoaPods サイトのInstall欄より、ターミナルから以下のコマンドを叩く

$ gem install cocoapods
$ pod setup

これでインストール完了

サンプルプロジェクトの依存ライブラリをDL

$ cd SampleProject
$ # ここで、Podfileがあるのを確認する
$ cat Podfile

# Gemfile みたいな感じで書かれている
platform :ios, :deployment_target => "5.0"
pod 'ObjectiveSugar'

target :test, :exclusive => true do
  link_with 'SampleProjectTests'
    pod 'Kiwi'
end

$ pod install #依存ファイルインストールする

インストールすると、もろもろファイルが生成される。Podsディレクトリとか、つくられる。

  • Pods
  • SampleProject.xcworkspace

    open SampleProject.xcworkspace

Xcodeを起動する。

  • PodsとSampleProjectと2つプロジェクトがあるが、Podsの方からコンパイル
  • 次にSampleProjectをコンパイルする。

サンプルプロジェクトそのままでは実行しても、何もデータを永続化しないので、 AppDelegate.m を以下のように追加する。

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
    // Override point for customization after application launch.
    self.window.backgroundColor = [UIColor whiteColor];
    [self.window makeKeyAndVisible];
    
    //追加 
    //Personオブジェクト作成
    Person *john = [Person create];
    john.name = @"John";

    //Sqlite3に保存
    john.save;
    
    //Sqlite3に保存されているPersonレコードを表示
    for(Person *person in [Person all]) {        
        NSLog(@"models name = %@",person.name);
    }
 //ここまで
    
    return YES;
}

シミュレータで実行すると、コンソールログにこんな感じでデータが保存されてれていることが確認できる。

2013-01-03 00:22:38.615 SampleProject[29275:11603] models name = John

Sqlite3ファイルから保存状態を確認する

シミュレータで起動するとして、アプリ内のSqlite3を開けてみて確認する

シミュレータと、アプリの場所は以下の様な場所に保管されている

/Users/{UserName}/Library/Application Support/iPhone Simulator/6.0/Applications/XXXXXXXXXXXXXXXXXXXX ※/Documents/SampleProject.sqlite
※ XXXXXXXXXXXXXXXXXXXX はランダムっぽい文字列アプリのUUIDかな?たぶん アプリの分だけある。

上記パスからのSqliteファイルをターミナルから起動する

$ sqlite3 SampleProject.sqlite
# テーブル定義を確認する プレフィックスにZがついた形で、Personテーブルが作成されているのが確認できる。
# CoreDataで作成された形式になっているのがわかる
sqlite> .schema
CREATE TABLE ZPERSON ( Z_PK INTEGER PRIMARY KEY, Z_ENT INTEGER, Z_OPT INTEGER, ZAGE INTEGER, ZISMEMBER INTEGER, ZNAME VARCHAR, ZSURNAME VARCHAR );
# アプリで格納したレコードを確認する
sqlite> select * from ZPERSON;
1|1|1|0||John|