狠狠撸

狠狠撸Share a Scribd company logo
RestKitの紹介 - Webサービスのクライアント実装補助フレームワーク -
永島 次朗 / Jiro Nagashima

iOS Developer @ nana music, inc.




           @hedjirog
RestKit / Examples / RKTwitter
サンプルプロジェクト
? 動作手順
   ? リポジトリを複製 (masterブランチ)
   ? Examplesディレクトリ下のプロジェクトを開く
   ? Build & Run
$ git clone -b master --recursive git://github.com/RestKit/RestKit.git

$ open RestKit/Examples/RKTwitter/RKTwitter.xcodeproj


              ※ 同時に複数のサンプルプロジェクトを開くと、
           (サブプロジェクトとして含まれるRestKitの参照に失敗して)
                 ビルドエラーになる場合があるので注意
サンプルプロジェクト(补足)
           Submoduleを含むリポジトリ複製



               recursiveオプションを付与
             (clone後のsubmodule更新)
$ git clone -b master --recursive git://github.com/RestKit/RestKit.git

$ open RestKit/Examples/RKTwitter/RKTwitter.xcodeproj
Agenda
? 搁别蝉迟碍颈迟とは
 ? 導入手順
 ? 注意点
? 基本的な使い方
 ? Networking, Object Mapping, Core Data
搁别蝉迟碍颈迟とは
搁别蝉迟碍颈迟とは



                           Networking
Object Mapping
                 RestKit
                             Core Data
搁别蝉迟碍颈迟とは
   Webサービスのクライアント実装を
          強力にサポート!!


                           Networking
Object Mapping
                 RestKit
                             Core Data
搁别蝉迟碍颈迟とは
           ? RestKit
            ? http://restkit.org/
           ? Github project page
            ? https://github.com/RestKit/
              RestKit
RestKit
導入手順
? CocoaPodsを利用(推奨)
 ? https://github.com/RestKit/RestKit#via-
   cocoapods
 ? http://cocoapods.org/?q=RestKit
注意点
? iOS 5.0 以上が必須
? ARC
? 最新バージョンに pre の表記 (2013.01.26現在)
 ? https://github.com/RestKit/RestKit/tags
? Apache License 2.0
Agenda
  搁别蝉迟碍颈迟とは
    導入手順
    注意点

? 基本的な使い方
 ? Networking, Object Mapping, Core Data
基本的な使い方
※ サンプルプロジェクト(RKTwitter, RKTwitterCoreData)から抜粋
Networking (1/6)
      ? RKObjectManager
         ? 通信処理の共通設定

NSURL *baseURL = [NSURL URLWithString:@"http://twitter.com"];

RKObjectManager *objectManager = [RKObjectManager managerWithBaseURL:baseURL];
Networking (2/6)
      ? RKObjectManager
         ? 共通設定からリクエストを作成

RKObjectManager *objectManager = [RKObjectManager sharedManager];

[objectManager getObjectsAtPath:@"/status/user_timeline/RestKit"
                     parameters:nil
                        success:^(RKObjectRequestOperation *operation,
                                  RKMappingResult *mappingResult) {
                            NSArray* statuses = [mappingResult array];
                            NSLog(@"Loaded statuses: %@", statuses);
                        }
                        failure:^(RKObjectRequestOperation *operation,
                                  NSError *error) {
                            NSLog(@"Hit error: %@", error);
                        }];
Object Mapping (3/6)
      ? RKObjectMapping
         ? マッピング対象のクラスを指定
         ? レスポンスで受け取るJSONデータのキーと、
              クラスのプロパティをマッピング
RKObjectMapping *statusMapping;
statusMapping = [RKObjectMapping mappingForClass:[RKTweet class]];

[statusMapping addAttributeMappingsFromDictionary:@{
 @"id" : @"statusID",
 @"created_at" : @"createdAt",
 @"text" : @"text",
 @"url" : @"urlString",
 @"in_reply_to_screen_name" : @"inReplyToScreenName",
 @"favorited" : @"isFavorited",
 }];

                   ※ CoreData利用時のマッピングは後述(RKEntityMapping)
Object Mapping (4/6)
      ? RKObjectMapping
         ? マッピングを適用するレスポンスの状態を
              RKResponseDescriptorで設定
         ? RKObjectManagerへ設定内容を引き渡し
RKResponseDescriptor *responseDescriptor;
responseDescriptor = [RKResponseDescriptor responseDescriptorWithMapping:statusMapping
                                           pathPattern:@"/status/user_timeline/:username"
                                           keyPath:nil
                                           statusCodes:[NSIndexSet indexSetWithIndex:200]];

RKObjectManager *objectManager = [RKObjectManager sharedManager];
[objectManager addResponseDescriptor:responseDescriptor];
Core Data (5/6)
      ? RKManagedObjectStore
         ? Core Dataスタックの管理

NSManagedObjectModel *managedObjectModel;
managedObjectModel = [NSManagedObjectModel mergedModelFromBundles:nil];

RKManagedObjectStore *managedObjectStore;
managedObjectStore = [[RKManagedObjectStore alloc]
                       initWithManagedObjectModel:managedObjectModel];

RKObjectManager *objectManager = [RKObjectManager sharedManager];
objectManager.managedObjectStore = managedObjectStore;
Core Data (6/6)
      ? RKEntityMapping
         ? マッピング対象のエンティティと、
              RKManagedObjectSotreインスタンスを指定
         ? 値が一意となる属性を指定(オブジェクト更新時
              に利用される)
RKEntityMapping *tweetMapping;
tweetMapping = [RKEntityMapping mappingForEntityForName:@"Tweet"
                                inManagedObjectStore:managedObjectStore];

tweetMapping.identificationAttributes = @[ @"statusID" ];
[tweetMapping addAttributeMappingsFromDictionary:@{
 @"id": @"statusID",
 @"created_at": @"createdAt",
 @"text": @"text",
 @"url": @"urlString",
 @"in_reply_to_screen_name": @"inReplyToScreenName",
 @"favorited": @"isFavorited",
 }];
Agenda
搁别蝉迟碍颈迟とは
 導入手順
 注意点

基本的な使い方
 Networking, Object Mapping, Core Data
関連
? API Reference
 ? https://github.com/RestKit/RestKit#api-
   quickstart
 ? http://restkit.org/api/latest/
? Wiki
 ? https://github.com/RestKit/RestKit/wiki

More Related Content

RestKitの紹介 - Webサービスのクライアント実装補助フレームワーク -

  • 2. 永島 次朗 / Jiro Nagashima iOS Developer @ nana music, inc. @hedjirog
  • 3. RestKit / Examples / RKTwitter
  • 4. サンプルプロジェクト ? 動作手順 ? リポジトリを複製 (masterブランチ) ? Examplesディレクトリ下のプロジェクトを開く ? Build & Run $ git clone -b master --recursive git://github.com/RestKit/RestKit.git $ open RestKit/Examples/RKTwitter/RKTwitter.xcodeproj ※ 同時に複数のサンプルプロジェクトを開くと、 (サブプロジェクトとして含まれるRestKitの参照に失敗して) ビルドエラーになる場合があるので注意
  • 5. サンプルプロジェクト(补足) Submoduleを含むリポジトリ複製 recursiveオプションを付与 (clone後のsubmodule更新) $ git clone -b master --recursive git://github.com/RestKit/RestKit.git $ open RestKit/Examples/RKTwitter/RKTwitter.xcodeproj
  • 6. Agenda ? 搁别蝉迟碍颈迟とは ? 導入手順 ? 注意点 ? 基本的な使い方 ? Networking, Object Mapping, Core Data
  • 8. 搁别蝉迟碍颈迟とは Networking Object Mapping RestKit Core Data
  • 9. 搁别蝉迟碍颈迟とは Webサービスのクライアント実装を 強力にサポート!! Networking Object Mapping RestKit Core Data
  • 10. 搁别蝉迟碍颈迟とは ? RestKit ? http://restkit.org/ ? Github project page ? https://github.com/RestKit/ RestKit RestKit
  • 11. 導入手順 ? CocoaPodsを利用(推奨) ? https://github.com/RestKit/RestKit#via- cocoapods ? http://cocoapods.org/?q=RestKit
  • 12. 注意点 ? iOS 5.0 以上が必須 ? ARC ? 最新バージョンに pre の表記 (2013.01.26現在) ? https://github.com/RestKit/RestKit/tags ? Apache License 2.0
  • 13. Agenda 搁别蝉迟碍颈迟とは 導入手順 注意点 ? 基本的な使い方 ? Networking, Object Mapping, Core Data
  • 15. Networking (1/6) ? RKObjectManager ? 通信処理の共通設定 NSURL *baseURL = [NSURL URLWithString:@"http://twitter.com"]; RKObjectManager *objectManager = [RKObjectManager managerWithBaseURL:baseURL];
  • 16. Networking (2/6) ? RKObjectManager ? 共通設定からリクエストを作成 RKObjectManager *objectManager = [RKObjectManager sharedManager]; [objectManager getObjectsAtPath:@"/status/user_timeline/RestKit" parameters:nil success:^(RKObjectRequestOperation *operation, RKMappingResult *mappingResult) { NSArray* statuses = [mappingResult array]; NSLog(@"Loaded statuses: %@", statuses); } failure:^(RKObjectRequestOperation *operation, NSError *error) { NSLog(@"Hit error: %@", error); }];
  • 17. Object Mapping (3/6) ? RKObjectMapping ? マッピング対象のクラスを指定 ? レスポンスで受け取るJSONデータのキーと、 クラスのプロパティをマッピング RKObjectMapping *statusMapping; statusMapping = [RKObjectMapping mappingForClass:[RKTweet class]]; [statusMapping addAttributeMappingsFromDictionary:@{ @"id" : @"statusID", @"created_at" : @"createdAt", @"text" : @"text", @"url" : @"urlString", @"in_reply_to_screen_name" : @"inReplyToScreenName", @"favorited" : @"isFavorited", }]; ※ CoreData利用時のマッピングは後述(RKEntityMapping)
  • 18. Object Mapping (4/6) ? RKObjectMapping ? マッピングを適用するレスポンスの状態を RKResponseDescriptorで設定 ? RKObjectManagerへ設定内容を引き渡し RKResponseDescriptor *responseDescriptor; responseDescriptor = [RKResponseDescriptor responseDescriptorWithMapping:statusMapping pathPattern:@"/status/user_timeline/:username" keyPath:nil statusCodes:[NSIndexSet indexSetWithIndex:200]]; RKObjectManager *objectManager = [RKObjectManager sharedManager]; [objectManager addResponseDescriptor:responseDescriptor];
  • 19. Core Data (5/6) ? RKManagedObjectStore ? Core Dataスタックの管理 NSManagedObjectModel *managedObjectModel; managedObjectModel = [NSManagedObjectModel mergedModelFromBundles:nil]; RKManagedObjectStore *managedObjectStore; managedObjectStore = [[RKManagedObjectStore alloc] initWithManagedObjectModel:managedObjectModel]; RKObjectManager *objectManager = [RKObjectManager sharedManager]; objectManager.managedObjectStore = managedObjectStore;
  • 20. Core Data (6/6) ? RKEntityMapping ? マッピング対象のエンティティと、 RKManagedObjectSotreインスタンスを指定 ? 値が一意となる属性を指定(オブジェクト更新時 に利用される) RKEntityMapping *tweetMapping; tweetMapping = [RKEntityMapping mappingForEntityForName:@"Tweet" inManagedObjectStore:managedObjectStore]; tweetMapping.identificationAttributes = @[ @"statusID" ]; [tweetMapping addAttributeMappingsFromDictionary:@{ @"id": @"statusID", @"created_at": @"createdAt", @"text": @"text", @"url": @"urlString", @"in_reply_to_screen_name": @"inReplyToScreenName", @"favorited": @"isFavorited", }];
  • 22. 関連 ? API Reference ? https://github.com/RestKit/RestKit#api- quickstart ? http://restkit.org/api/latest/ ? Wiki ? https://github.com/RestKit/RestKit/wiki