狠狠撸

狠狠撸Share a Scribd company logo
公开用
                                                一部画像を削除/変更 版




              iOS フレームワークとデータベース

                                  http://www.a10-objects.jp/


                        オープンセミナー広島@2013




                 最終更新 2013-01-21 17:13
13年1月21日月曜日                                                    1
1.今日の目次と概要

              1. 今日の内容
                 ?セッション内容を紹介。

              2. A10 Objectsの紹介
                 ?こんな人です。

              3. iOS 开発环境 概要
                 ?颈翱厂向けのアプリを开発するために必要なもの
                 ???デベロッパー登録からアプリ公开までの流れ
                 ???必要な機材
                 ?iOS フレームワーク概要

              4. iOS CoreData 概要
                 ?iOSの標準データベースSQLiteへのアクセス

              5. 質疑応答




13年1月21日月曜日                                  2
2.A10 Objectsの紹介




13年1月21日月曜日                      3
エーテン?オブジェクツ株式会社


              1. Java ベースのサーバーアプリ開発

              2. Objective-C ベースのiOS アプリ開発

              3. 自社FWの開発/各種アプリ開発

              4. 受託開発など...



13年1月21日月曜日                                  4
开発メンバーツアー




                   wo!
13年1月21日月曜日               5
WebObjects
              ? JavaベースのASフレームワーク(Apple社制)
              ? 各種開発ツールはEclipesベースでOSS化
              ? Wonder/WOdka フレームワークによる拡張


         WebObjects    Apple Store /App Store/iTunes   WOdka




13年1月21日月曜日                                                    6
iOS 開発
              ? Objective-C ベース
              ? Javaによるサーバーサイドとの連例アプリ
              ? iOS関連サーバーの開発


              iPhone    iPad/ iPad mini   iPod touch




13年1月21日月曜日                                            7
参加しているよ!

       iOS SDK 開発勉強会
         2010年5月から毎週始めた勉強会
         Onlineで開催、128回
         参加表明は『私まで』




     広島 電子工作 娯楽部(仮)
        2012年10月から始めたFB(非公開)
        電子工作が趣味の方の集まり




13年1月21日月曜日                    8
厂狈厂関连


              Facebook: 谷雅彦

              Twitter:   woTani




13年1月21日月曜日                       9
iOS 24h
              http://ios24h.net/




                     wo!
13年1月21日月曜日                        10
3. iOS 开発环境 概要




13年1月21日月曜日                    11
3. iOS 开発环境 概要



              1. 颈翱厂向けのアプリを开発するために必要なもの
                1. デベロッパー登録からアプリ公开までの流れ
                2. 必要な機材

              2. iOS フレームワーク概要
                 1. Cocoa Touch レイヤのフレームワーク
                 2. 惭别诲颈补レイヤのフレームワーク
                 3. Core Servicesレイヤのフレームワーク
                 4. Core OSレイヤのフレームワーク




13年1月21日月曜日                                    12
颈翱厂向けのアプリを开発するために必要なもの




                  1. デベロッパー登録からアプリ公开までの流れ
                     ? iOSデベロッパプログラム
                     ? iOSデベロッパエンタープライズプログラム
                     ? iOSデベロッパユニバーシティプログラム
                  2. 必要な机材(ハードウエア)
                     ? Mac (OS X 10.8)
                     ? インターネット
                     ? iOS 機器
                  3. 开発环境
                     ? Xcode IDE
                  4. 忍耐




13年1月21日月曜日                                    13
デベロッパー登録からアプリ公开までの流れ

                      iOSデベロッパプログラム
                      iOSデベロッパエンタープライズプログラム
                      iOSデベロッパユニバーシティプログラム




      デベロッパー登録   開発           テスト             配布




13年1月21日月曜日                                        14
デベロッパー登録からアプリ公开までの流れ

                      iOSデベロッパプログラム
                      iOSデベロッパエンタープライズプログラム
                      iOSデベロッパユニバーシティプログラム



       お




      デベロッパー登録   開発           テスト             配布




13年1月21日月曜日                                        15
デベロッパー登録からアプリ公开までの流れ

              iOSデベロッパプログラム(年間参加費 8,400円)
                  個人開発者、個人事業主、法人企業、組織団体、行政機関、教育機関がApp Store
                  でアプリケーションの配布を希望する場合
                  特記事項: 社内専用配布不可




              iOSデベロッパエンタープライズプログラム (年間参加費 24,800円)
                  所属している法人企業、組織団体、行政機関、教育機関の内部で配布するために業
                  務専用アプリケーションの開発を希望する場合
                  特記事項: AppStore配布不可、B2B配布不可、iAd広告不可




              iOSデベロッパユニバーシティプログラム(無料)
                  学位を授与できる高等教育機関が「iOS向け開発」のカリキュラム導入を希望し
                  ている場合
                  特記事項: AppStore配布不可、B2B配布不可、iAd広告不可
                        AdHoc不可、SDKのβ利用不可、コードレベルサポート不可




13年1月21日月曜日                                                   16
必要な机材(ハードウエア)


                                ? Mac (OS X 10.8)
                                ? インターネット
                                ? iOS 機器




              Mac (OS X 10.8)       インターネット         iOS 機器




13年1月21日月曜日                                                  17
必要な机材(ハードウエア)


                          Apple社のMac
                            开発环境を動作させるためには、OS X が動作するApple社のMacが必要。
                            iMac/MacPro/MacBookシリーズどのMacでも可能だが、極端に小さな画面
                            はおすすめしない。

       Mac (OS X 10.8)


                          インターネット環境
                            开発环境を動作、各種ツールの動作には必須環境。
                            Xcodeは、Apple社のサーバーと接続してドキュメントのダウンロードおよび
                            デベロッパー関連のやりとりを行う。
        インターネット




                          iOS 機器
                             開発されたアプリを実際の機器でテストするために必要。


              iOS 機器




13年1月21日月曜日                                                               18
开発环境



                          ? Xcode IDE




              Xcode IDE          Instruments   iOS Simulator




13年1月21日月曜日                                                    19
开発环境


                                   Xcode IDE
                                     インタフェース設計、データ設計、AppleLLVMコンパイラ、デバッガ、バージ
                                     ョン管理、デベロッパーサイト連携などの統合开発环境などの。

          Xcode IDE




                                   Instruments
                                      ディスク、メモリ、CPU使用率などのデータをリアルタイムに収集して表示。


         Instruments




                                   iOS Simulator/Printer Simulator
                                      実際のiOSデバイスとほぼ同じ方法でアプリケーションを動作。



 iOS Simulator/Printer Simulator




13年1月21日月曜日                                                                    20
忍耐




13年1月21日月曜日        21
iOS フレームワーク概要


               1. Cocoa Touch レイヤのフレームワーク
                Address Book UI, Event Kit UI, Game Kit, Map Kit, Message UI,
                Twitter, UIKit, iAd

               2. 惭别诲颈补レイヤのフレームワーク
                AV Foundation, Assets Library, Audio Toolbox, Audio Unit, Core Audio,
                Core Graphics, Core Image, Core MIDI, Core Text, Core Video, GLKit,
                Image I/O, Media Player, Open AL, OpenGLES, Quartz Core
                framework

               3. Core Servicesレイヤのフレームワーク
                Accounts, Ad Support, Address Book, CFNetwork, Core Data, Core
                Foundation, Core Location, Core Media, Core Motion, Core Telephony,
                Event Kit, Foundation, Mobile Core Services, Newsstand, Pass Kit,
                Quick Look, Social, Store Kit, System Con?guration framework

               4. Core OSレイヤのフレームワーク
                Accelerate, Core Bluetooth, External Accessory, Security, System




13年1月21日月曜日                                                                             22
Objective-C 2.0
Objective-Cの歴史                                    作成 A4 縦 100 % 2009-03-17 13:28 by A10
                                                                                           文法-クラス使用例                                        作成 A4 縦 100 % 2009-03-


                            1973年                                                               #import <Cocoa/Cocoa.h>
                                        C
                                                                                                #import "ClassSample.h"

                                                                                                int main(int argc, char *argv[])
                                                   影響                   Smalltalk               {
     1983年                  1983年                                                                   ClassSample *obj = [[ClassSample alloc]init];
             C++                    Objective-C
                                                                                                    [obj methodName:@"AA" with:11];
                             1985年                                                                  [ClassSample classMethod:@"BB"];
                                    Objective-C
                                     on GCC             NeXT社
                                                                                                    return NSApplicationMain(argc,   (const char **) argv);
                                                                           Java                 }

                                                               Python               Ruby




                                                                                            ?
                 Objective-C++
                                                                                                    こんな感じで書く:メッセージ式
                                                                                                ?     [オブジェクト?メッセージ]
                            2007年
                                                                                                ?     [オブジェクト?メッセージ:引数]
                                 Objective-C 2.0        MacOSX 10.5
                                                        iPhone OS 2.x                           ?     [オブジェクト?メッセージ:引数 メッセージ2:引数2....]

                                                                                            ?C言語をベースにオブジェクト指向に拡張。
                                                                                                    ?iPhone OSでは32ビット環境のみをサポート
                                                                                                    ?C/C++/Objective-C など




13年1月21日月曜日                                                                                                                                                    23
Cocoa Touch レイヤのフレームワーク



                          Address Book UI, Event Kit UI, Game Kit, Map Kit, Message UI,
                          Twitter, UIKit, iAd




              iOS開発で特徴的な機能を実装するための主要なフレームワークが含ま
              れているグループ。

              「ストーリーボード」「ドキュメント」「マルチタスク」「印刷」「通
              知サービス」「ジェスチャー」などを実現することが出来る。

              「UIKit フレームワーク」




13年1月21日月曜日                                                                               24
Cocoa Touch レイヤのフレームワーク



                          「UIKit framework」




              おそらく「UIKit framework」= iOSアプリ開発 というべきもの。
              iOS にグラフィカルなイベント駆動型アプリケーションを実装するため
              の主要なAPIを提供する。
              以下の機能を実装するために使用。
               ユーザインターフェイス管理、グラフィックス処理、ウインドウ管理、マルチタスク対応、
               印刷、タッチ/モーションベースイベントの処理、テキストおよびWebコンテンツ、カット、
               コピー、ペースト、通知、etc...。




13年1月21日月曜日                                                  25
Cocoa Touch レイヤのフレームワーク



                                   「Address Book UI, Event Kit UI, Game Kit, Map Kit,
                                   Message UI, Twitter, iAd」


   ? Address Book UI                           ? Message UI
         連絡先の標準インターフェースの提供                             電子メールメッセージ、SMSメッセージの作成機能を提供


   ? Event Kit UI                              ? Twitter
         カレンダーの標準インターフェースの提供                           Twitterへの投稿機能の提供
                                                       補足: Social Framework でも提供
   ? Game Kit
         ゲームに必要な機能を提供。ネットワーク機能、Game            ? iAd
         Centerの提供                                     アプリケーションにバナー広告の配信機能を提供


   ? Map Kit
         マップインタフェース(Map View)の提供




13年1月21日月曜日                                                                             26
惭别诲颈补レイヤのフレームワーク


                           AV Foundation, Assets Library, Audio Toolbox, Audio Unit, Core Audio,
                           Core Graphics, Core Image, Core MIDI, Core Text, Core Video, GLKit,
                           Image I/O, Media Player, Open AL, OpenGLES, Quartz Core
                           framework




              マルチメディア体験の演出のためのフレームワークが含まれているグル
              ープ。

              「グラフィック」「オーディオ」「ビデオ」「AirPlay」などを使用す
              ることが出来る。

              「AV Foundation フレームワーク」




13年1月21日月曜日                                                                                        27
Cocoa Touch レイヤのフレームワーク



                          「AV Foundation framework」




              iOS にオーディオとビデオの録音?録画と再生機能を提供し、これらの
              メディア操作と管理を洗練された方法で提供する。
              以下の機能を実装するために使用。
               メディアの編集、ムービーのキャプチャ/再生、トラックの管理、メタデータ管理、サウンド
               同期、サウンドファイルに関する詳細、AirPlay経由での配信機能、etc...。




13年1月21日月曜日                                                 28
Cocoa Touch レイヤのフレームワーク


                             「 AV Foundation, Assets Library, Audio Toolbox, Audio Unit, Core
                             Audio, Core Graphics, Core Image, Core MIDI, Core Text, Core Video,
                             GLKit, Image I/O, Media Player, Open AL, OpenGLES, Quartz Core
                             framework」


   ? AV Foundation                            ? Core Image
         オーディオ、ビデオ機能の提供。録音/再生/編集など。                 ビデオ、静止画の操作、フィルタ/顔認識などの提供


   ? Assets Library                           ? Core MIDI
         デバイスから写真やビデオへのアクセスを提供。                     MIDIデバイス(Dock/ネットワーク)との通信機能などを提供


   ? Audio Toolbox                            ? Core Text
         音声の録音、再生、フォーマット変換などの機能を提供。                 テキストのレイアウト/フォントの処理の提供


   ? Audio Unit                               ? Core Video
         オーディオ処理の提供                                 Core Mediaのサポート機能の提供


   ? Core Graphics                            ? GLKit
         2D描画、ベクトルベースの描画エンジン、PDFなどの提供               OpenGL ES 2.0アプリのためのサポート機能の提供




13年1月21日月曜日                                                                                        29
Cocoa Touch レイヤのフレームワーク


                                「 AV Foundation, Assets Library, Audio Toolbox, Audio Unit, Core
                                Audio, Core Graphics, Core Image, Core MIDI, Core Text, Core Video,
                                GLKit, Image I/O, Media Player, Open AL, OpenGLES, Quartz Core
                                framework」


   ? Image I/O
         画像データ/画像メタデータの操作を提供。


   ? Media Player
         オーディオ/ビデオの再生機能を提供。


   ? Open AL
         高性能/高品質のオーディオを提供。


   ? OpenGLES
         2D/3Dコンテンツの描画機能の提供


   ? Quartz Core
         複雑なアニメーション/視覚効果の提供




13年1月21日月曜日                                                                                           30
Core Servicesレイヤのフレームワーク


                           Accounts, Ad Support, Address Book, CFNetwork, Core Data, Core
                           Foundation, Core Location, Core Media, Core Motion, Core Telephony,
                           Event Kit, Foundation, Mobile Core Services, Newsstand, Pass Kit,
                           Quick Look, Social, Store Kit, System Con?guration framework




              全てのアプリケーションで使用する基本的なサービスが含まれているグ
              ループ。直接的に使用しなくとも、システム内のほとんどの部分がこれ
              らの上に構築されている。

              「iCloudストレージ」「自動参照カウント」「ブロックオブジェクト」
              「Grand Central Dispatch (GCD)」「アプリ内課金」「SQLite」
              「XMLサポート」などのサービスを受けることが出来る。

              「Foundationフレームワーク」




13年1月21日月曜日                                                                                      31
Cocoa Touch レイヤのフレームワーク



                           「 Foundationフレームワーク」



              おそらく「 Foundationフレームワーク」= iOSアプリ開発 というべき
              もの(UIKitと同様に)。
              Core Foundation フレームワーク(Cベース)に、Objective-Cラッパー
              を提供したiOS アプリ開発の土台となるクラス群。
              以下の機能を実装するために使用されます。
               コレクションデータ型、バンドル、文字列管理、日付と時刻の管理、環境設定管理、スレッ
               ドおよび実行ループ、通信、ローカライズ、正規表現、etc...。




13年1月21日月曜日                                                    32
Cocoa Touch レイヤのフレームワーク


                                Accounts, Ad Support, Address Book, CFNetwork, Core Data, Core
                                Foundation, Core Location, Core Media, Core Motion, Core Telephony,
                                Event Kit, Foundation, Mobile Core Services, Newsstand, Pass Kit,
                                Quick Look, Social, Store Kit, System Con?guration framework


   ? Accounts                                   ? Core Foundation
         「シングルサインイン」モデルの提供                            基本的なデータ管理およびサービス機能の提供


   ? Ad Support                                 ? Core Location
         アプリケーションにバナー広告の配信機能の提供                       位置と方角の情報(GPS/携帯電話/Wi-Fi利用)の提供


   ? Address Book                               ? Core Media
         連絡先情報への操作を提供。                                AV Foundationが使用する下位レベル操作の提供


   ? CFNetwork                                  ? Core Motion
         ネットワークプロトコルへオブジェクト指向(Cベース)の提供                モーションイベント(加速度など)処理の提供


   ? Core Data                                  ? Core Telephony
         MVCモデルによるデータモデル機能の提供                         デバイス上の電話ベースの情報をやり取りする機能の提供




13年1月21日月曜日                                                                                       33
Cocoa Touch レイヤのフレームワーク


                                       Accounts, Ad Support, Address Book, CFNetwork, Core Data, Core
                                       Foundation, Core Location, Core Media, Core Motion, Core Telephony,
                                       Event Kit, Foundation, Mobile Core Services, Newsstand, Pass Kit,
                                       Quick Look, Social, Store Kit, System Con?guration framework


   ? Event Kit                                         ? Pass Kit
         カレンダーイベントの操作を提供                                     提供
                                                       ? Quick Look
   ? Foundation                                              アプリが直接サポートしていないファイルの内容のプレビュ
         Core Foundation機能のObjective-Cラッパーを主に提供              ー機能の提供


   ? Mobile Core Services                              ? Social
         Uniform Type Identi?ers (UTI)で使用される下位レベルの           ソーシャルネットワーキングの機能の提供
         タイプの提供。
                                                       ? Store Kit
   ? Newsstand                                               アプリ内課金機能の提供
         雑誌や新聞の購読者用の集中管理機能の提供
                                                       ? System Con?guration
                                                             デバイスのネットワー ク構成を特定する機能の提供




13年1月21日月曜日                                                                                              34
Core OSレイヤのフレームワーク



                         Accelerate, Core Bluetooth, External Accessory, Security, System




              ほかの多くのテクノロジーの土台となる下位レベルの機能グループ。直
              接的に使用しなくとも、システム内のほとんどの部分がこれらの上に構
              築されている。

              「DSP、線形代数、 画像処理の計算」「Bluetooth」「ハードウェア
              アクセサリとの通信」「キーチェーン」「仮想メモリシステム、スレッ
              ド、ファイルシステム、 ネットワーク、およびプロセス間通信を管理」
              などを実現することが出来ます。




13年1月21日月曜日                                                                                 35
Cocoa Touch レイヤのフレームワーク



                                 「 Accelerate, Core Bluetooth, External Accessory,
                                 Security, System」


   ? Accelerate                              ? System
         SP、線形代数、 画像処理の計算を実行するためのインター             Machベースのカーネル上に、OSIXスレッド/BSDソケット/
         フェイスなどの提供                                ファイル操作/メモリ管理などのiOS機能の提供


   ? Core Bluetooth
         Bluetoothアクセサリへの操作の提供


   ? External Accessory
         iOSデバイスに接続されているハードウエアアクセサリへの操
         作の提供。


   ? Security
         アプリケーションで管理するデータのセキュリティの提供




13年1月21日月曜日                                                                          36
4. iOS CoreData 概要




13年1月21日月曜日                        37
4. iOS CoreData 概要




              1. Core Data て?

              2. 生い立ち

              3. オブジェクトグラフ

              4. 開発ツール

              5. 一覧表示との統合




13年1月21日月曜日                                     38
1.Core Data て?


         ? 「データ」を「モデル」として抽象化して、オブジェクトとして操作

         ? 「M-V-C」モデルのM(モデル)部分としてデータの操作
         ? モデル部分のデータをデータベースなどへ永続化する操作

         ? OS X / iOS のために開発されたフレームワーク

         ? より具体的な例としては「モデルとSQLite(SQLデータベース)」間でO/R
              マッピング技術でオブジェクトベースで操作

         ? モデルを効率よくV-Cするための標準クラス/開発ツールの提供

         ? Core Dataの機能(変更操作/スキーマ移行/etc...)




13年1月21日月曜日                                          39
1.Core Data て?


              ? 「モデルとSQLite(SQLデータベース)」間でO/Rマッピング技術でオ
               ブジェクトベースで操作

                   データベースの永続化の操作にSQL文ではなくオブジェクトで操作




13年1月21日月曜日                                             40
1.Core Data て?

              なぜ必要?
              ?(必要性に関しては。いろんな考え方ありますが...とりあえず)

               1.   非常にシンプルでデータ構造が簡単ならデータを独自形式のファイルで管理
               2.   データが多量で複雑になるなら、データベースを導入して管理
               3.   プログラムはオブジェクト管理が便利、データベースはデータの効率的アクセスが得意
               4.   じゃ、相互変換的出来る便利なツールを作ろう
               5.   O/R技術の登場!
               6.   なんと、SQL知らなくても、多量のデータをデータベースに保存/アクセス可能に!


              多量のデータでもメモリ使用量の増加とパフォーマンスの低下を予防
              O/R機能を使うのにSQLに比べて大きい学習オーバーヘッドが発生


              Apple社の資料では「アプリケーションのモデル 階層を実装するために
              必要なコード量(行数)が、一般に50 70%程度削減できる」




13年1月21日月曜日                                                   41
1.Core Data て?

              一般的なパフォーマンス比較




13年1月21日月曜日                             42
1.Core Data て?




              Core Data の主な機能

               ?   変更の追跡、取り消し処理の支援
               ?   フォールティング(メモリ使用量の削減のための遅延読み込みなど)
               ?   値の自動検証
               ?   スキーマの移行(マイグレーション)
               ?   ユーザーインタフェースとの同期支援クラスの提供(NSFetchedResultsController)
               ?   属性アクセス用メソッドの自動生成機能
               ?   洗練されたクエリのコンパイル(NSPredicate)




13年1月21日月曜日                                                              43
1.Core Data て?

              おまけ
               ? Core DataはRDBMS(リレーションデータベース)ではない。
               ? Core Dataは体系化されたデータ構造の変更管理と永続ストア間の読み書きの基本を提供
                   する仕組み。(この事は実際にファイルに保存される事とは無関係である)
               ? Core Dataは他のフレームワーク同様に万能では無く、データ構造の管理を助ける仕組み
                   である。
              Core Data と EOF のクラスの多くには類似点
               ? NSManagedObject                ->   EOGenericRecord
               ? NSManagedObjectModel           ->   EOModel
                                                           [マネージド(管理対象)オブジェクト モデル]
               ? NSManagedObjectContext         ->   EOEditingContext
                                                           [マネージド(管理対象)オブジェクト コンテキスト]
               ? NSPersistentStoreCoordinator   ->   EOPersistentStoreCoordinator
                                                           [パーシステント(永続) ストア コーディネータ]
               ?   NSEntityDescription          ->   EOEntity
               ?   NSPropertyDescription        ->   EOProperty
               ?   NSRelationshipDescription    ->   EORelationship
               ?   NSAttributeDescription       ->   EOAttribute


               ? Core DataにはEOModelGroupは存在しない。




13年1月21日月曜日                                                                             44
1.Core Data て?




              一度、使い始めると止められないよ!



                    ....たぶん(^^)




13年1月21日月曜日                       45
2. 生い立ち

         ? 1996年3月に「Next社」から世界初のWebアプリケーションサーバとし
              てリリースされた「WebObjects」で使用されたEnterprise
              Objects(エンタープライズオブジェクツ)フレームワークから。

         ? 多くのアプリケーションサーバーとO/R技術に影響を与えたといわれる。

         ? Mac OS X 10.4で、アプリケーション組み込み用のSQLiteを使用した
              Core Dataとしてリリース(デスクトップ用の単一アプリケーション用途に
              再設計)。

         ? SQLite/XML/バイナリーをサポート

         ? Xcodeでモデル定義などをサポート

         ? iOS 3.0から追加(それまではSQLiteのみ)




13年1月21日月曜日                                            46
3. オブジェクトグラフ




        NSManagedObject
            [マネージド(管理対象)オブジェクト]

        NSManagedObjectContext
            [マネージド(管理対象)オブジェクト コンテキスト]

        NSPersistentStoreCoordinator
             [パーシステント(永続) ストア コーディネータ]




13年1月21日月曜日                              47
3. オブジェクトグラフ
                                   Core Data と実際のモデルオブジェクトの関係は?



               managedObjectContext           ? 1つのデータの管理
                                                 NSManagedObject(管理対象オブジェクト)が1つのデータを
                   managedObject                 管理。

                                              ? 変更などの管理
                                                 NSManagedObjectContext(管理対象オブジェクト?コンテ
                                                 キスト)がオブジェクト変更を管理。
              PersistentStoreCoordinator
                                              ? SQLiteのファイル管理
                                                 NSPersistentStoreCoordinator(永続ストアコーディネータ)
                                                 が実際のSQLファイルを管理。




                    データ.sqlite




13年1月21日月曜日                                                                                   48
3. オブジェクトグラフ
                                       NSManagedObject(管理対象オブジェクト)

                                   モデルはXcodeで定義することで作成出来る

                 managedObject
                  (1つのデータ)                    ? 1つのデータの管理
                                                 NSManagedObject(管理対象オブジェクト)が1つのデータを
              NSAttributeDescription
                      (属性)                       管理。

                                              ? エンティティ管理
                                                 NSEntityDescription(エンティティ記述)、
                 entityMapping                   NSPropertyDescription(プロパティ記述)、
               (エンティティ関係)
                                                 NSAttributeDescription(属性)。

                                              ? エンティティ関係管理
                 managedObject                   NSRelationshipDescription(関係)、
                  (1つのデータ)
                                                 NSPropertyMapping(関係)。




13年1月21日月曜日                                                                            49
4. 開発ツール




              1. Xcode
                    ?データモデルの定義(エンティティ/属性/リ
                     レーションなど)
                    ?フェッチ要求の定義
              2. Instruments(インスツルメンツ)

                 ?フェッチ情報の記録
                 ?処理時間




13年1月21日月曜日                                  50
4. 開発ツール

              Xcode / モデル定義例




13年1月21日月曜日                    51
3. オブジェクトグラフ
                             Xcode / モデル定義例
              属性定義
                 オプション:     属性が必須なら OFF
                 一時:        ON: データファイルに保存されない、アフリ内で一時的に使用される。
                 索引付き:      インデックスを追加。
                            ただし、データの作成時にインデックス作成時間が必要になる。


              指定可能なデータ型一覧:
              ?整数16 :16bitの整数(NSNumber)
              ?整数32 :32bitの整数(NSNumber)
              ?整数64 :64bitの整数(NSNumber)
              ?10進  :38桁までの整数値(NSDecimalNumber)
              ?倍精度  :duble(NSNumber)
              ?浮動小数点:?oat(NSNumber)
              ?文字列  :(NSString)
              ?論理値  :(NSNumber)
              ?日付   :(NSDate)
              ?バイナリデータ:(NSData)
              ?変換可能 :独自で変換する(UIImageなど)
              ?未定義:




13年1月21日月曜日                                                      52
3. オブジェクトグラフ
              Xcode / フェッチ要求の定義



                           GUIによる検索条件定義


                         f_BF_LogicalDelTS == nil AND ((((f_DT_Start_Date <= $tagetDate AND
                         f_xxxxx_Date >= $tagetDate) OR (f_DT_Start_Date <= $tagetDate AND
                         f_xxxxx_Date == nil)) AND f_xxxxx_Date <= $today) OR (((f_xxxxx_Date
                         <= $tagetDate AND f_xxxxx_Date >= $tagetDate) OR (f_xxxxx_Date <=
                               $tagetDate AND f_xxxxx_Date == nil AND f_xxxxx_Date >=
                          $tagetDate)) AND f_xxxxx_Date > $today)) AND (f_xxxxx_Date == 12
                                   OR f_xxxxx_Date == 22) AND f_xxxxx_Date == 0




13年1月21日月曜日                                                                                 53
4. 開発ツール

              Xcode / Instruments(インスツルメンツ)
              DTrace ベース (SunがSolaris用に開発)




                                        時間: microseconds




13年1月21日月曜日                                                54
4. 開発ツール

              Xcode / Instruments(インスツルメンツ)
              DTrace ベース (SunがSolaris用に開発)




                                        時間: microseconds




13年1月21日月曜日                                                55
5. 一覧表示との統合




              CoreDataを一覧表示させる便利なクラスがある

                NSFetchedResultsController




13年1月21日月曜日                                  56
5. 一覧表示との統合

              CoreDataを一覧表示




              NSFetchedResultsController
                  UITableViewにCoreDataのデータを表示するクラス
                  データソース表示情報を提供
                  デリゲートメソッドにより動作のカスタマイズ
                  検索/編集(追加/変更/削除)機能の提供


                  ストリートボートを組み合わせれば簡単にテスト可能




13年1月21日月曜日                                          57
5. 一覧表示との統合
                             NSManagedObject(管理対象オブジェクト)- 新規追加
              - (void)insertNewObject:(id)sender
              {
                  NSManagedObjectContext *context = [self.fetchedResultsController managedObjectContext];
                  NSEntityDescription *entity = [[self.fetchedResultsController fetchRequest] entity];
                  NSManagedObject *newManagedObject = [NSEntityDescription insertNewObjectForEntityForName:[entity name]
              inManagedObjectContext:context];

                  // If appropriate, configure the new managed object.
                  // Normally you should use accessor methods, but using KVC here avoids the need to add a custom class to
              the template.
                  [newManagedObject setValue:[NSDate date] forKey:@"timeStamp"];

                  // Save the context.
                  NSError *error = nil;
                  if (![context save:&error]) {
                       // Replace this implementation with code to handle the error appropriately.
                       // abort() causes the application to generate a crash log and terminate. You should not use this
              function in a shipping application, although it may be useful during development.
                      NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
                      abort();
                  }
              }




         ? 新規データを作成して保存の例
         ? 一覧表示に使用しているCoreData管理オブジェクト(fetchedResultsController)から、CoreDataの変更を追跡している
              NSManagedObjectContextを取得
         ?    新しいレコード(NSManagedObject)を作成してNSManagedObjectContextオブジェクトに追加
         ?    新しいレコード(NSManagedObject)にデータを設定
         ?    データ保存




13年1月21日月曜日                                                                                                                  58
5. 一覧表示との統合
                            NSManagedObject(管理対象オブジェクト)- 削除-保存

              - (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle
              forRowAtIndexPath:(NSIndexPath *)indexPath
              {
                  if (editingStyle == UITableViewCellEditingStyleDelete) {
                      NSManagedObjectContext *context = [self.fetchedResultsController managedObjectContext];
                      [context deleteObject:[self.fetchedResultsController objectAtIndexPath:indexPath]];

                      NSError *error = nil;
                      if (![context save:&error]) {
                           // Replace this implementation with code to handle the error appropriately.
                           // abort() causes the application to generate a crash log and terminate. You should not use
              this function in a shipping application, although it may be useful during development.
                          NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
                          abort();
                      }
                  }
              }




         ? データを削除の例
         ? 一覧表示に使用しているCoreData管理オブジェクト(fetchedResultsController)から、CoreDataの変更を追跡している
              NSManagedObjectContextを取得
         ?    NSManagedObjectContextオブジェクトからオブジェクトを削除
         ?    データ保存




13年1月21日月曜日                                                                                                              59
公开用




                             http://www.a10-objects.jp/




                 オープンセミナー広島@2013
                                                    End

              for OSH@2013
13年1月21日月曜日                                               60

More Related Content

オープンセミナー2013蔼広岛

  • 1. 公开用 一部画像を削除/変更 版 iOS フレームワークとデータベース http://www.a10-objects.jp/ オープンセミナー広島@2013 最終更新 2013-01-21 17:13 13年1月21日月曜日 1
  • 2. 1.今日の目次と概要 1. 今日の内容 ?セッション内容を紹介。 2. A10 Objectsの紹介 ?こんな人です。 3. iOS 开発环境 概要 ?颈翱厂向けのアプリを开発するために必要なもの ???デベロッパー登録からアプリ公开までの流れ ???必要な機材 ?iOS フレームワーク概要 4. iOS CoreData 概要 ?iOSの標準データベースSQLiteへのアクセス 5. 質疑応答 13年1月21日月曜日 2
  • 4. エーテン?オブジェクツ株式会社 1. Java ベースのサーバーアプリ開発 2. Objective-C ベースのiOS アプリ開発 3. 自社FWの開発/各種アプリ開発 4. 受託開発など... 13年1月21日月曜日 4
  • 5. 开発メンバーツアー wo! 13年1月21日月曜日 5
  • 6. WebObjects ? JavaベースのASフレームワーク(Apple社制) ? 各種開発ツールはEclipesベースでOSS化 ? Wonder/WOdka フレームワークによる拡張 WebObjects Apple Store /App Store/iTunes WOdka 13年1月21日月曜日 6
  • 7. iOS 開発 ? Objective-C ベース ? Javaによるサーバーサイドとの連例アプリ ? iOS関連サーバーの開発 iPhone iPad/ iPad mini iPod touch 13年1月21日月曜日 7
  • 8. 参加しているよ! iOS SDK 開発勉強会 2010年5月から毎週始めた勉強会 Onlineで開催、128回 参加表明は『私まで』 広島 電子工作 娯楽部(仮) 2012年10月から始めたFB(非公開) 電子工作が趣味の方の集まり 13年1月21日月曜日 8
  • 9. 厂狈厂関连 Facebook: 谷雅彦 Twitter: woTani 13年1月21日月曜日 9
  • 10. iOS 24h http://ios24h.net/ wo! 13年1月21日月曜日 10
  • 11. 3. iOS 开発环境 概要 13年1月21日月曜日 11
  • 12. 3. iOS 开発环境 概要 1. 颈翱厂向けのアプリを开発するために必要なもの 1. デベロッパー登録からアプリ公开までの流れ 2. 必要な機材 2. iOS フレームワーク概要 1. Cocoa Touch レイヤのフレームワーク 2. 惭别诲颈补レイヤのフレームワーク 3. Core Servicesレイヤのフレームワーク 4. Core OSレイヤのフレームワーク 13年1月21日月曜日 12
  • 13. 颈翱厂向けのアプリを开発するために必要なもの 1. デベロッパー登録からアプリ公开までの流れ ? iOSデベロッパプログラム ? iOSデベロッパエンタープライズプログラム ? iOSデベロッパユニバーシティプログラム 2. 必要な机材(ハードウエア) ? Mac (OS X 10.8) ? インターネット ? iOS 機器 3. 开発环境 ? Xcode IDE 4. 忍耐 13年1月21日月曜日 13
  • 14. デベロッパー登録からアプリ公开までの流れ iOSデベロッパプログラム iOSデベロッパエンタープライズプログラム iOSデベロッパユニバーシティプログラム デベロッパー登録 開発 テスト 配布 13年1月21日月曜日 14
  • 15. デベロッパー登録からアプリ公开までの流れ iOSデベロッパプログラム iOSデベロッパエンタープライズプログラム iOSデベロッパユニバーシティプログラム お デベロッパー登録 開発 テスト 配布 13年1月21日月曜日 15
  • 16. デベロッパー登録からアプリ公开までの流れ iOSデベロッパプログラム(年間参加費 8,400円) 個人開発者、個人事業主、法人企業、組織団体、行政機関、教育機関がApp Store でアプリケーションの配布を希望する場合 特記事項: 社内専用配布不可 iOSデベロッパエンタープライズプログラム (年間参加費 24,800円) 所属している法人企業、組織団体、行政機関、教育機関の内部で配布するために業 務専用アプリケーションの開発を希望する場合 特記事項: AppStore配布不可、B2B配布不可、iAd広告不可 iOSデベロッパユニバーシティプログラム(無料) 学位を授与できる高等教育機関が「iOS向け開発」のカリキュラム導入を希望し ている場合 特記事項: AppStore配布不可、B2B配布不可、iAd広告不可 AdHoc不可、SDKのβ利用不可、コードレベルサポート不可 13年1月21日月曜日 16
  • 17. 必要な机材(ハードウエア) ? Mac (OS X 10.8) ? インターネット ? iOS 機器 Mac (OS X 10.8) インターネット iOS 機器 13年1月21日月曜日 17
  • 18. 必要な机材(ハードウエア) Apple社のMac 开発环境を動作させるためには、OS X が動作するApple社のMacが必要。 iMac/MacPro/MacBookシリーズどのMacでも可能だが、極端に小さな画面 はおすすめしない。 Mac (OS X 10.8) インターネット環境 开発环境を動作、各種ツールの動作には必須環境。 Xcodeは、Apple社のサーバーと接続してドキュメントのダウンロードおよび デベロッパー関連のやりとりを行う。 インターネット iOS 機器 開発されたアプリを実際の機器でテストするために必要。 iOS 機器 13年1月21日月曜日 18
  • 19. 开発环境 ? Xcode IDE Xcode IDE Instruments iOS Simulator 13年1月21日月曜日 19
  • 20. 开発环境 Xcode IDE インタフェース設計、データ設計、AppleLLVMコンパイラ、デバッガ、バージ ョン管理、デベロッパーサイト連携などの統合开発环境などの。 Xcode IDE Instruments ディスク、メモリ、CPU使用率などのデータをリアルタイムに収集して表示。 Instruments iOS Simulator/Printer Simulator 実際のiOSデバイスとほぼ同じ方法でアプリケーションを動作。 iOS Simulator/Printer Simulator 13年1月21日月曜日 20
  • 22. iOS フレームワーク概要 1. Cocoa Touch レイヤのフレームワーク Address Book UI, Event Kit UI, Game Kit, Map Kit, Message UI, Twitter, UIKit, iAd 2. 惭别诲颈补レイヤのフレームワーク AV Foundation, Assets Library, Audio Toolbox, Audio Unit, Core Audio, Core Graphics, Core Image, Core MIDI, Core Text, Core Video, GLKit, Image I/O, Media Player, Open AL, OpenGLES, Quartz Core framework 3. Core Servicesレイヤのフレームワーク Accounts, Ad Support, Address Book, CFNetwork, Core Data, Core Foundation, Core Location, Core Media, Core Motion, Core Telephony, Event Kit, Foundation, Mobile Core Services, Newsstand, Pass Kit, Quick Look, Social, Store Kit, System Con?guration framework 4. Core OSレイヤのフレームワーク Accelerate, Core Bluetooth, External Accessory, Security, System 13年1月21日月曜日 22
  • 23. Objective-C 2.0 Objective-Cの歴史 作成 A4 縦 100 % 2009-03-17 13:28 by A10 文法-クラス使用例 作成 A4 縦 100 % 2009-03- 1973年 #import <Cocoa/Cocoa.h> C #import "ClassSample.h" int main(int argc, char *argv[]) 影響 Smalltalk { 1983年 1983年 ClassSample *obj = [[ClassSample alloc]init]; C++ Objective-C [obj methodName:@"AA" with:11]; 1985年 [ClassSample classMethod:@"BB"]; Objective-C on GCC NeXT社 return NSApplicationMain(argc, (const char **) argv); Java } Python Ruby ? Objective-C++ こんな感じで書く:メッセージ式 ? [オブジェクト?メッセージ] 2007年 ? [オブジェクト?メッセージ:引数] Objective-C 2.0 MacOSX 10.5 iPhone OS 2.x ? [オブジェクト?メッセージ:引数 メッセージ2:引数2....] ?C言語をベースにオブジェクト指向に拡張。 ?iPhone OSでは32ビット環境のみをサポート ?C/C++/Objective-C など 13年1月21日月曜日 23
  • 24. Cocoa Touch レイヤのフレームワーク Address Book UI, Event Kit UI, Game Kit, Map Kit, Message UI, Twitter, UIKit, iAd iOS開発で特徴的な機能を実装するための主要なフレームワークが含ま れているグループ。 「ストーリーボード」「ドキュメント」「マルチタスク」「印刷」「通 知サービス」「ジェスチャー」などを実現することが出来る。 「UIKit フレームワーク」 13年1月21日月曜日 24
  • 25. Cocoa Touch レイヤのフレームワーク 「UIKit framework」 おそらく「UIKit framework」= iOSアプリ開発 というべきもの。 iOS にグラフィカルなイベント駆動型アプリケーションを実装するため の主要なAPIを提供する。 以下の機能を実装するために使用。 ユーザインターフェイス管理、グラフィックス処理、ウインドウ管理、マルチタスク対応、 印刷、タッチ/モーションベースイベントの処理、テキストおよびWebコンテンツ、カット、 コピー、ペースト、通知、etc...。 13年1月21日月曜日 25
  • 26. Cocoa Touch レイヤのフレームワーク 「Address Book UI, Event Kit UI, Game Kit, Map Kit, Message UI, Twitter, iAd」 ? Address Book UI ? Message UI 連絡先の標準インターフェースの提供 電子メールメッセージ、SMSメッセージの作成機能を提供 ? Event Kit UI ? Twitter カレンダーの標準インターフェースの提供 Twitterへの投稿機能の提供 補足: Social Framework でも提供 ? Game Kit ゲームに必要な機能を提供。ネットワーク機能、Game ? iAd Centerの提供 アプリケーションにバナー広告の配信機能を提供 ? Map Kit マップインタフェース(Map View)の提供 13年1月21日月曜日 26
  • 27. 惭别诲颈补レイヤのフレームワーク AV Foundation, Assets Library, Audio Toolbox, Audio Unit, Core Audio, Core Graphics, Core Image, Core MIDI, Core Text, Core Video, GLKit, Image I/O, Media Player, Open AL, OpenGLES, Quartz Core framework マルチメディア体験の演出のためのフレームワークが含まれているグル ープ。 「グラフィック」「オーディオ」「ビデオ」「AirPlay」などを使用す ることが出来る。 「AV Foundation フレームワーク」 13年1月21日月曜日 27
  • 28. Cocoa Touch レイヤのフレームワーク 「AV Foundation framework」 iOS にオーディオとビデオの録音?録画と再生機能を提供し、これらの メディア操作と管理を洗練された方法で提供する。 以下の機能を実装するために使用。 メディアの編集、ムービーのキャプチャ/再生、トラックの管理、メタデータ管理、サウンド 同期、サウンドファイルに関する詳細、AirPlay経由での配信機能、etc...。 13年1月21日月曜日 28
  • 29. Cocoa Touch レイヤのフレームワーク 「 AV Foundation, Assets Library, Audio Toolbox, Audio Unit, Core Audio, Core Graphics, Core Image, Core MIDI, Core Text, Core Video, GLKit, Image I/O, Media Player, Open AL, OpenGLES, Quartz Core framework」 ? AV Foundation ? Core Image オーディオ、ビデオ機能の提供。録音/再生/編集など。 ビデオ、静止画の操作、フィルタ/顔認識などの提供 ? Assets Library ? Core MIDI デバイスから写真やビデオへのアクセスを提供。 MIDIデバイス(Dock/ネットワーク)との通信機能などを提供 ? Audio Toolbox ? Core Text 音声の録音、再生、フォーマット変換などの機能を提供。 テキストのレイアウト/フォントの処理の提供 ? Audio Unit ? Core Video オーディオ処理の提供 Core Mediaのサポート機能の提供 ? Core Graphics ? GLKit 2D描画、ベクトルベースの描画エンジン、PDFなどの提供 OpenGL ES 2.0アプリのためのサポート機能の提供 13年1月21日月曜日 29
  • 30. Cocoa Touch レイヤのフレームワーク 「 AV Foundation, Assets Library, Audio Toolbox, Audio Unit, Core Audio, Core Graphics, Core Image, Core MIDI, Core Text, Core Video, GLKit, Image I/O, Media Player, Open AL, OpenGLES, Quartz Core framework」 ? Image I/O 画像データ/画像メタデータの操作を提供。 ? Media Player オーディオ/ビデオの再生機能を提供。 ? Open AL 高性能/高品質のオーディオを提供。 ? OpenGLES 2D/3Dコンテンツの描画機能の提供 ? Quartz Core 複雑なアニメーション/視覚効果の提供 13年1月21日月曜日 30
  • 31. Core Servicesレイヤのフレームワーク Accounts, Ad Support, Address Book, CFNetwork, Core Data, Core Foundation, Core Location, Core Media, Core Motion, Core Telephony, Event Kit, Foundation, Mobile Core Services, Newsstand, Pass Kit, Quick Look, Social, Store Kit, System Con?guration framework 全てのアプリケーションで使用する基本的なサービスが含まれているグ ループ。直接的に使用しなくとも、システム内のほとんどの部分がこれ らの上に構築されている。 「iCloudストレージ」「自動参照カウント」「ブロックオブジェクト」 「Grand Central Dispatch (GCD)」「アプリ内課金」「SQLite」 「XMLサポート」などのサービスを受けることが出来る。 「Foundationフレームワーク」 13年1月21日月曜日 31
  • 32. Cocoa Touch レイヤのフレームワーク 「 Foundationフレームワーク」 おそらく「 Foundationフレームワーク」= iOSアプリ開発 というべき もの(UIKitと同様に)。 Core Foundation フレームワーク(Cベース)に、Objective-Cラッパー を提供したiOS アプリ開発の土台となるクラス群。 以下の機能を実装するために使用されます。 コレクションデータ型、バンドル、文字列管理、日付と時刻の管理、環境設定管理、スレッ ドおよび実行ループ、通信、ローカライズ、正規表現、etc...。 13年1月21日月曜日 32
  • 33. Cocoa Touch レイヤのフレームワーク Accounts, Ad Support, Address Book, CFNetwork, Core Data, Core Foundation, Core Location, Core Media, Core Motion, Core Telephony, Event Kit, Foundation, Mobile Core Services, Newsstand, Pass Kit, Quick Look, Social, Store Kit, System Con?guration framework ? Accounts ? Core Foundation 「シングルサインイン」モデルの提供 基本的なデータ管理およびサービス機能の提供 ? Ad Support ? Core Location アプリケーションにバナー広告の配信機能の提供 位置と方角の情報(GPS/携帯電話/Wi-Fi利用)の提供 ? Address Book ? Core Media 連絡先情報への操作を提供。 AV Foundationが使用する下位レベル操作の提供 ? CFNetwork ? Core Motion ネットワークプロトコルへオブジェクト指向(Cベース)の提供 モーションイベント(加速度など)処理の提供 ? Core Data ? Core Telephony MVCモデルによるデータモデル機能の提供 デバイス上の電話ベースの情報をやり取りする機能の提供 13年1月21日月曜日 33
  • 34. Cocoa Touch レイヤのフレームワーク Accounts, Ad Support, Address Book, CFNetwork, Core Data, Core Foundation, Core Location, Core Media, Core Motion, Core Telephony, Event Kit, Foundation, Mobile Core Services, Newsstand, Pass Kit, Quick Look, Social, Store Kit, System Con?guration framework ? Event Kit ? Pass Kit カレンダーイベントの操作を提供 提供 ? Quick Look ? Foundation アプリが直接サポートしていないファイルの内容のプレビュ Core Foundation機能のObjective-Cラッパーを主に提供 ー機能の提供 ? Mobile Core Services ? Social Uniform Type Identi?ers (UTI)で使用される下位レベルの ソーシャルネットワーキングの機能の提供 タイプの提供。 ? Store Kit ? Newsstand アプリ内課金機能の提供 雑誌や新聞の購読者用の集中管理機能の提供 ? System Con?guration デバイスのネットワー ク構成を特定する機能の提供 13年1月21日月曜日 34
  • 35. Core OSレイヤのフレームワーク Accelerate, Core Bluetooth, External Accessory, Security, System ほかの多くのテクノロジーの土台となる下位レベルの機能グループ。直 接的に使用しなくとも、システム内のほとんどの部分がこれらの上に構 築されている。 「DSP、線形代数、 画像処理の計算」「Bluetooth」「ハードウェア アクセサリとの通信」「キーチェーン」「仮想メモリシステム、スレッ ド、ファイルシステム、 ネットワーク、およびプロセス間通信を管理」 などを実現することが出来ます。 13年1月21日月曜日 35
  • 36. Cocoa Touch レイヤのフレームワーク 「 Accelerate, Core Bluetooth, External Accessory, Security, System」 ? Accelerate ? System SP、線形代数、 画像処理の計算を実行するためのインター Machベースのカーネル上に、OSIXスレッド/BSDソケット/ フェイスなどの提供 ファイル操作/メモリ管理などのiOS機能の提供 ? Core Bluetooth Bluetoothアクセサリへの操作の提供 ? External Accessory iOSデバイスに接続されているハードウエアアクセサリへの操 作の提供。 ? Security アプリケーションで管理するデータのセキュリティの提供 13年1月21日月曜日 36
  • 37. 4. iOS CoreData 概要 13年1月21日月曜日 37
  • 38. 4. iOS CoreData 概要 1. Core Data て? 2. 生い立ち 3. オブジェクトグラフ 4. 開発ツール 5. 一覧表示との統合 13年1月21日月曜日 38
  • 39. 1.Core Data て? ? 「データ」を「モデル」として抽象化して、オブジェクトとして操作 ? 「M-V-C」モデルのM(モデル)部分としてデータの操作 ? モデル部分のデータをデータベースなどへ永続化する操作 ? OS X / iOS のために開発されたフレームワーク ? より具体的な例としては「モデルとSQLite(SQLデータベース)」間でO/R マッピング技術でオブジェクトベースで操作 ? モデルを効率よくV-Cするための標準クラス/開発ツールの提供 ? Core Dataの機能(変更操作/スキーマ移行/etc...) 13年1月21日月曜日 39
  • 40. 1.Core Data て? ? 「モデルとSQLite(SQLデータベース)」間でO/Rマッピング技術でオ ブジェクトベースで操作 データベースの永続化の操作にSQL文ではなくオブジェクトで操作 13年1月21日月曜日 40
  • 41. 1.Core Data て? なぜ必要? ?(必要性に関しては。いろんな考え方ありますが...とりあえず) 1. 非常にシンプルでデータ構造が簡単ならデータを独自形式のファイルで管理 2. データが多量で複雑になるなら、データベースを導入して管理 3. プログラムはオブジェクト管理が便利、データベースはデータの効率的アクセスが得意 4. じゃ、相互変換的出来る便利なツールを作ろう 5. O/R技術の登場! 6. なんと、SQL知らなくても、多量のデータをデータベースに保存/アクセス可能に! 多量のデータでもメモリ使用量の増加とパフォーマンスの低下を予防 O/R機能を使うのにSQLに比べて大きい学習オーバーヘッドが発生 Apple社の資料では「アプリケーションのモデル 階層を実装するために 必要なコード量(行数)が、一般に50 70%程度削減できる」 13年1月21日月曜日 41
  • 42. 1.Core Data て? 一般的なパフォーマンス比較 13年1月21日月曜日 42
  • 43. 1.Core Data て? Core Data の主な機能 ? 変更の追跡、取り消し処理の支援 ? フォールティング(メモリ使用量の削減のための遅延読み込みなど) ? 値の自動検証 ? スキーマの移行(マイグレーション) ? ユーザーインタフェースとの同期支援クラスの提供(NSFetchedResultsController) ? 属性アクセス用メソッドの自動生成機能 ? 洗練されたクエリのコンパイル(NSPredicate) 13年1月21日月曜日 43
  • 44. 1.Core Data て? おまけ ? Core DataはRDBMS(リレーションデータベース)ではない。 ? Core Dataは体系化されたデータ構造の変更管理と永続ストア間の読み書きの基本を提供 する仕組み。(この事は実際にファイルに保存される事とは無関係である) ? Core Dataは他のフレームワーク同様に万能では無く、データ構造の管理を助ける仕組み である。 Core Data と EOF のクラスの多くには類似点 ? NSManagedObject -> EOGenericRecord ? NSManagedObjectModel -> EOModel [マネージド(管理対象)オブジェクト モデル] ? NSManagedObjectContext -> EOEditingContext [マネージド(管理対象)オブジェクト コンテキスト] ? NSPersistentStoreCoordinator -> EOPersistentStoreCoordinator [パーシステント(永続) ストア コーディネータ] ? NSEntityDescription -> EOEntity ? NSPropertyDescription -> EOProperty ? NSRelationshipDescription -> EORelationship ? NSAttributeDescription -> EOAttribute ? Core DataにはEOModelGroupは存在しない。 13年1月21日月曜日 44
  • 45. 1.Core Data て? 一度、使い始めると止められないよ! ....たぶん(^^) 13年1月21日月曜日 45
  • 46. 2. 生い立ち ? 1996年3月に「Next社」から世界初のWebアプリケーションサーバとし てリリースされた「WebObjects」で使用されたEnterprise Objects(エンタープライズオブジェクツ)フレームワークから。 ? 多くのアプリケーションサーバーとO/R技術に影響を与えたといわれる。 ? Mac OS X 10.4で、アプリケーション組み込み用のSQLiteを使用した Core Dataとしてリリース(デスクトップ用の単一アプリケーション用途に 再設計)。 ? SQLite/XML/バイナリーをサポート ? Xcodeでモデル定義などをサポート ? iOS 3.0から追加(それまではSQLiteのみ) 13年1月21日月曜日 46
  • 47. 3. オブジェクトグラフ NSManagedObject [マネージド(管理対象)オブジェクト] NSManagedObjectContext [マネージド(管理対象)オブジェクト コンテキスト] NSPersistentStoreCoordinator [パーシステント(永続) ストア コーディネータ] 13年1月21日月曜日 47
  • 48. 3. オブジェクトグラフ Core Data と実際のモデルオブジェクトの関係は? managedObjectContext ? 1つのデータの管理 NSManagedObject(管理対象オブジェクト)が1つのデータを managedObject 管理。 ? 変更などの管理 NSManagedObjectContext(管理対象オブジェクト?コンテ キスト)がオブジェクト変更を管理。 PersistentStoreCoordinator ? SQLiteのファイル管理 NSPersistentStoreCoordinator(永続ストアコーディネータ) が実際のSQLファイルを管理。 データ.sqlite 13年1月21日月曜日 48
  • 49. 3. オブジェクトグラフ NSManagedObject(管理対象オブジェクト) モデルはXcodeで定義することで作成出来る managedObject (1つのデータ) ? 1つのデータの管理 NSManagedObject(管理対象オブジェクト)が1つのデータを NSAttributeDescription (属性) 管理。 ? エンティティ管理 NSEntityDescription(エンティティ記述)、 entityMapping NSPropertyDescription(プロパティ記述)、 (エンティティ関係) NSAttributeDescription(属性)。 ? エンティティ関係管理 managedObject NSRelationshipDescription(関係)、 (1つのデータ) NSPropertyMapping(関係)。 13年1月21日月曜日 49
  • 50. 4. 開発ツール 1. Xcode ?データモデルの定義(エンティティ/属性/リ レーションなど) ?フェッチ要求の定義 2. Instruments(インスツルメンツ) ?フェッチ情報の記録 ?処理時間 13年1月21日月曜日 50
  • 51. 4. 開発ツール Xcode / モデル定義例 13年1月21日月曜日 51
  • 52. 3. オブジェクトグラフ Xcode / モデル定義例 属性定義 オプション: 属性が必須なら OFF 一時: ON: データファイルに保存されない、アフリ内で一時的に使用される。 索引付き: インデックスを追加。 ただし、データの作成時にインデックス作成時間が必要になる。 指定可能なデータ型一覧: ?整数16 :16bitの整数(NSNumber) ?整数32 :32bitの整数(NSNumber) ?整数64 :64bitの整数(NSNumber) ?10進 :38桁までの整数値(NSDecimalNumber) ?倍精度 :duble(NSNumber) ?浮動小数点:?oat(NSNumber) ?文字列 :(NSString) ?論理値 :(NSNumber) ?日付 :(NSDate) ?バイナリデータ:(NSData) ?変換可能 :独自で変換する(UIImageなど) ?未定義: 13年1月21日月曜日 52
  • 53. 3. オブジェクトグラフ Xcode / フェッチ要求の定義 GUIによる検索条件定義 f_BF_LogicalDelTS == nil AND ((((f_DT_Start_Date <= $tagetDate AND f_xxxxx_Date >= $tagetDate) OR (f_DT_Start_Date <= $tagetDate AND f_xxxxx_Date == nil)) AND f_xxxxx_Date <= $today) OR (((f_xxxxx_Date <= $tagetDate AND f_xxxxx_Date >= $tagetDate) OR (f_xxxxx_Date <= $tagetDate AND f_xxxxx_Date == nil AND f_xxxxx_Date >= $tagetDate)) AND f_xxxxx_Date > $today)) AND (f_xxxxx_Date == 12 OR f_xxxxx_Date == 22) AND f_xxxxx_Date == 0 13年1月21日月曜日 53
  • 54. 4. 開発ツール Xcode / Instruments(インスツルメンツ) DTrace ベース (SunがSolaris用に開発) 時間: microseconds 13年1月21日月曜日 54
  • 55. 4. 開発ツール Xcode / Instruments(インスツルメンツ) DTrace ベース (SunがSolaris用に開発) 時間: microseconds 13年1月21日月曜日 55
  • 56. 5. 一覧表示との統合 CoreDataを一覧表示させる便利なクラスがある NSFetchedResultsController 13年1月21日月曜日 56
  • 57. 5. 一覧表示との統合 CoreDataを一覧表示 NSFetchedResultsController UITableViewにCoreDataのデータを表示するクラス データソース表示情報を提供 デリゲートメソッドにより動作のカスタマイズ 検索/編集(追加/変更/削除)機能の提供 ストリートボートを組み合わせれば簡単にテスト可能 13年1月21日月曜日 57
  • 58. 5. 一覧表示との統合 NSManagedObject(管理対象オブジェクト)- 新規追加 - (void)insertNewObject:(id)sender { NSManagedObjectContext *context = [self.fetchedResultsController managedObjectContext]; NSEntityDescription *entity = [[self.fetchedResultsController fetchRequest] entity]; NSManagedObject *newManagedObject = [NSEntityDescription insertNewObjectForEntityForName:[entity name] inManagedObjectContext:context]; // If appropriate, configure the new managed object. // Normally you should use accessor methods, but using KVC here avoids the need to add a custom class to the template. [newManagedObject setValue:[NSDate date] forKey:@"timeStamp"]; // Save the context. NSError *error = nil; if (![context save:&error]) { // Replace this implementation with code to handle the error appropriately. // abort() causes the application to generate a crash log and terminate. You should not use this function in a shipping application, although it may be useful during development. NSLog(@"Unresolved error %@, %@", error, [error userInfo]); abort(); } } ? 新規データを作成して保存の例 ? 一覧表示に使用しているCoreData管理オブジェクト(fetchedResultsController)から、CoreDataの変更を追跡している NSManagedObjectContextを取得 ? 新しいレコード(NSManagedObject)を作成してNSManagedObjectContextオブジェクトに追加 ? 新しいレコード(NSManagedObject)にデータを設定 ? データ保存 13年1月21日月曜日 58
  • 59. 5. 一覧表示との統合 NSManagedObject(管理対象オブジェクト)- 削除-保存 - (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath { if (editingStyle == UITableViewCellEditingStyleDelete) { NSManagedObjectContext *context = [self.fetchedResultsController managedObjectContext]; [context deleteObject:[self.fetchedResultsController objectAtIndexPath:indexPath]]; NSError *error = nil; if (![context save:&error]) { // Replace this implementation with code to handle the error appropriately. // abort() causes the application to generate a crash log and terminate. You should not use this function in a shipping application, although it may be useful during development. NSLog(@"Unresolved error %@, %@", error, [error userInfo]); abort(); } } } ? データを削除の例 ? 一覧表示に使用しているCoreData管理オブジェクト(fetchedResultsController)から、CoreDataの変更を追跡している NSManagedObjectContextを取得 ? NSManagedObjectContextオブジェクトからオブジェクトを削除 ? データ保存 13年1月21日月曜日 59
  • 60. 公开用 http://www.a10-objects.jp/ オープンセミナー広島@2013 End for OSH@2013 13年1月21日月曜日 60