iOS SDK機能、フレームワーク概要のまとめと機能別逆引き
CocoaPodsの登場によって、昨今のiOS開発ではとても簡単にライブラリを導入することができ、皆さんも多くの機能開発が楽になっていると思います。
ただiOS SDK自身にも非常に多くの機能やフレームワークが提供されており、外部ライブラリを利用しなくても実現できることも多くあります。
そこで、現状どのようなフレームワークや機能が提供されているか、簡単にまとめてみました。
機能の逆引きで何ができるかを記載しています。やりたいことに応じてどのフレームワークを見たり、その周辺ライブラリを見ればよいか一望できます。できることを知っておくことで、今後のアプリ開発で利用できるものも多くあるかと思います。
また、iOS8の登場でさらにフレームワークは増えていますので、代表的なものも記載しておきます。
iOS Layers
iOSは下記のようなレイヤーで構成されており、下のレイヤーで基本的なサービスを提供しています。上位レイヤーでは、扱いやすいインターフェースの提供がされています。
- Cocoa Touch Layer
- Media Layer
- Core Services Layer
- Core OS Layer
各レイヤーのフレームワークは、下位レイヤーを上位レイヤーで扱いやすいインターフェースで提供したり、複数のフレームワークを使って別のサービスを提供したりします。
利用者側は、利用手段によって上位レイヤーの機能を使うか、下位レイヤーを使うかも選択ができます。
- 簡単に利用したい場合は、より洗練されたインターフェースを持った上位レイヤーの機能を
- 細かくすべてを制御したい場合は、下位レイヤーの機能を
というように、開発者が選択することができます。
以下、各レイヤーごとの説明・機能・提供されるフレームワークとともに、どのようなことができるかも見ていきましょう。
Cocoa Touch Layer
Cocoa Touch Layerは、アプリのUI表示周りに加え、マルチタスキング、タッチジェスチャー、push通知などなど、大変多くの基本的機能を提供しています。
提供機能
以下、提供される機能群です。
- AirDrop
- AirDropは近距離のデバイス間でファイルをシェアすることが可能な機能です。
- Text Kit
- テキストや細かい文字体裁を処理するためのクラスのフル機能を備えた、高レベルのセットです。
- UIKit Dynamics
- UIKit DynamicsはUIKitに物理エンジンを利用できるようにします。衝突や重力を持たせたアニメーションが可能になるでしょう。
- Multitasking
- iOSでもいくらかの場合にマルチタスクが可能です。たとえば、
- 音楽の再生をバックグラウンドで行う
- 指定時間にローカル通知でアラートを出す
- 定期的にネットワーク越しにコンテンツをダウンロードを行う
- push通知を起点にコンテンツをダウンロードする
- iOSでもいくらかの場合にマルチタスクが可能です。たとえば、
- Auto Layout
- Auto Layoutもここに含まれます。constraintsに応じて自動的にViewをレイアウトします。
- Storyboard
- Storyboardもここに含まれます。グラフィカルに画面遷移を設計することができます。
- UI状態の保存
- アプリが常にいつ終了してしまうかは、不明確ですがViewやViewControllerの状態を保存することができます。それを元に状態を復元することにより、アプリが終了させられてしまっても、あたかも実行し続けていたかのように見せることが可能です。
- Apple Push Notification Service
- プッシュ通知の機能を用いることで文字、アイコンバッジ、音声によるユーザーへの通知が可能です。iOS7からはプッシュ通知を起点に新規コンテンツのダウンロードをさせることも可能です。
- Local Notifications
- ローカル通知はプッシュ通知と違い、外部サーバを使わずに通知を行うことが可能です。日時を指定してローカル通知の配信をスケジューリングしたり、スケジューリングされた通知をアプリケーションが実行されていない時でも配信できたりします。
- Gesture Recognizers
- ビューをスワイプする、ピンチするなど、一般的なタイプのジェスチャを検出するために使用します。
- 標準のsystem view Controller
- 標準的に利用するようなviewも提供されています。これらを用いることで、一貫したUXを提供させることができるため,できるかぎり利用しましょう。連絡先情報の表示または編集・カレンダーイベントの作成・電子メール、またはSMSメッセージの作成・ファイルの内容を開く、またはプレビューするなどのUIが提供されています。
Cocoa Touch Framworks
以下提供されるフレームワーク群です。
| Framework | 説明 |
|---|---|
| Address Book UI Framework | 連絡先関連を扱うためのUI |
| Event Kit UI Framework | カレンダー関連を扱うためのUI |
| Game Kit Framework | Game Centerを使うための機能一覧 |
| iAd Framework | iAd配信のためのフレームワーク |
| Map Kit Framework | 地図情報を扱うためのUI,機能 |
| Message UI Framework | 電子メールやSMSのメッセージ作成UI |
| Twitter Framework | Twitterを扱うためのフレームワークですが、現在はSocial Frameworkに統合されています。 |
| UIKit Framework | UIを扱うための基本的フレームワークで、様々な機能を持ち合わせています。 |
こういうことができるよ!
- 新規の連絡先を作成したり、既存の連絡先を編集または選択したりするためのUIを簡単に使いたい!
- Address Book UI Framework
- カレンダーのイベントの閲覧や、編集をさせるためのUIを簡単に使いたい!
- Event Kit UI Framework
- GameCenterを使って、ゲームのランキング表示やアチーブメント機能の追加、マッチメークの機能を実装したいんだ!
- Game Kit Framework
- アプリに広告貼って一儲けするぞ!
- iAd Framework
- 地図アプリを作りたい!
- Map Kit Framework
- メール送信させるためのUIを簡単に使いたい
- Message UI Framework
- Push通知、Local通知でよりユーザーRetentionを向上させる!
- UIKit (Push Notification,Local Notification)
- マルチタスクでアプリが閉じていても処理させる!
- UIKit (MultiTasking)
- 物理エンジンを使ったアニメーションをつくりたい!
- UIKit (UI Dynamics)
Media Layer
Media Layerは、グラフィック、オーディオ、ビデオなどマルチメディア類の機能群のレイヤーになります。iOSデバイスをより魅力的に彩る機能は、これらが担っています。
提供機能
以下、提供される機能群です。
Graphics Technologies
グラフィクスはアプリの一番重要な部分ですが、下記の機能群を用いて、非常に魅力的なUIを作り上げることが可能です。
- UIKit Graphics
- UIKitには画像やベジエ曲線の描画、ビューの内容のアニメーション化などの機能が含まれています。
- Core Graphics framework
- Core Graphics(別名Quartz )は、iOSアプリケーション用のネイティブな描画 エンジンで、独自の2次元ベクトルレンダリング、画像ベースのレンダリングが可能です。OpenGL ESほど高速ではありませんが、2次元の図形や画像を動的 にレンダリングしたい場合に適しています。
- Core Animation
- UIKitのビューはCore Animationを使って、ビューレベルのアニメーションを実現しています。アニ メーションの動作をよりきめ細かく制御したい場合に、Core Animationを直接使うとよいでしょう。
- Core Image
- ビデオ画像や静止画像を操作するための高度なサポートを提供します。
- OpenGL ES And GLKit
- ハードウェアによって加速化されたインターフェイスを使用し て、高度な2Dおよび3Dのレンダリングを支援します
- TextKit and Core Text
- Text Kitは、高品位印刷やテキスト管理に用いるUIKitのクラス群、Core Textは高品位印刷やレイアウトを処理するCで記述された低レベルのフレームワークです.
- Image I/O
- Image I/Oには、ほとんどの画像形式の読み取り、書き込みを行うためのイン ターフェイスが用意されています
- Assets Library
- ユーザの写真やビデオ・メディアにアクセスする手段を提供します。
Audio Technologies
音声の再生、録音、またはMIDIコンテンツの処理をiOS上で用いることで、よりリッチな体験を提供することができます。
- Media Player framework
- ユーザのiTunesライブラリへの簡単なアクセス、および曲やプレイリストの 再生を支援する、高レベルのフレームワークです。再生時の動作を細かく制御する必要がない場合に向いています。
- AV Foundation
- オーディオ/ビデオの録音/録画や再生を管理する、 Objective-Cのインターフェイスを提供します。音声を録音するとき、あるい は再生方法を細かく制御したい場合に向いています。
- OpenAL
- OpenALは定位オーディオを提供する業界標準のテクノロジーです。多くのゲーム開発者がこのテクノロジーを基盤とし、クロスプラットフォームのインターフェイス群を使って、高品位オーディオの再生機能を実装します。
- Core Audio
- オーディオやMIDIの録音/再生を行う、シンプルかつ洗練されたインターフェイスを提供するフレームワーク群です。オーディオをきめ細かく制御したい開発者に向いています。
Video Technologies
動画の再生、録音はもちろんストリーミング再生もサポートします。
- UIImagePickerController
- ユーザーに、既存の静止画像やビデオを選択 させる、あるいは新規コンテンツを取り込ませるために使います
- Media Player
- ビデオを再生するための、簡単に使える一連のインターフェイスを提供します。全画面表示と一部領域への表示が可能で、ユーザが操作する再生コントロールも付属しています。
- AV Foundation
- 高度なビデオ再生/録画機能を提供します。再生/録画の方法をきめ細かく制御したい場合に向いています。
- Core Media
- メディアを操作するために用いる、低レベ ルのデータ型やインターフェイスを定義しています。通常、このフレーム ワークを直接使う必要はありませんが、ビデオコンテンツの非常に細かな 部分を制御したい場合には役に立つでしょう。
AirPlay
AirPlayもこのレイヤーに含まれます。デバイスの音声や映像をAirPlayを介して、AirPlayデバイスへ配信できます。
Media Layer Framework
以下提供されるフレームワーク群です。
| Framework | 説明 |
|---|---|
| Assets Library Framework | 「写真(Photos)」で管理している写真やビデオにアクセスする手段を提供します。 |
| AV Foundation Framework | オーディオ/ビデオの再生、録音/録 画、管理に用いる、Objective-Cのクラス群 |
| Core Audio | オーディオの生成、録音、ミキシング、再生などネイティブなオーディオ処理機能を提供するフレームワーク群です。Core Audioは複数のフレームワークで成り立っています |
| CoreAudio.framework | Core Audio全体で使われるオーディオデータ型を定義します。 |
| Audio-Toolbox.framework | オーディオファイルおよびストリームに対して再生および録音サー ビスを提供します。 |
| AudioUnit.framework | オーディオ処理モジュールである内蔵Audio Unitを使用するための サービスを提供します。アプリケーションのオーディオコンテンツを、他のアプリケーションからも使えるオーディオコンポーネントとして販売することも可能です。 |
| CoreMIDI.framework | ハードウェアキーボードやシンセサイザなどのMIDIデバイスと通信する標準的な手段を提供します |
| Media-Toolbox.framework | オーディオタップインターフェイスへのアクセス機能を提供します。 |
| Core Graphics Framework | Quartz 2D描画API用のインターフェースです |
| Core Image Framework | ビデオや静止画像を操作する、強力なフィルタ群が組み込まれています。この組み込みフィルタを使えば、写真のレタッチや修正から、顔面認識、特徴認識まで、さまざまなことが可能 |
| Core Text Framework | テキストのレイアウトとフォントの処理を 行う、シンプルで高性能なCベースの一連のインターフェイスが含まれています |
| Core Video Framework | Core Mediaフレームワークに対してバッファおよびバッファプールのサポートを提供します。ほとんどのアプリケーションは、このフレームワークを直接使用する必要はありません。 |
| Game Controller Framework | iPhone/iPod/iPad用に作られたゲームコントローラを、アプリケーションで検出、設定できます。 |
| GLKit Framework | OpenGL ESアプリケーションの開発を容易にする、 Objective-Cベースの一連のユーティリティクラスが組み込まれています |
| Image I/O Framework | 画像データおよび画像メタデータのインポー トとエクスポートのためのインターフェイスを提供します |
| Media Accessibility Framework | メディアファイルに埋め込まれたクローズドキャプションの表示を管理します。 |
| Media Player Framework | アプリケーションからオーディオコンテンツおよびビデオコンテンツを再生するための高レベルのサポートを提供します。 |
| OpenAL Framework | アプリケーションで定位のオーディオを提供するためのクロスプラットフォームの標準です。 |
| OpenGL ES Framework | 2Dコンテンツや3Dコンテンツを描画する ための各種ツールが用意されています。 |
| Quartz Core Framework | Quartz Coreフレームワークには、 Core Animationインターフェイスが含まれています。Core Animationは高度な画像合成テクノロジーであり、高速で効率よく動作する、 ビューベースのアニメーションを容易に作成できます。 |
| Sprite Kit Framework | 2Dゲームや2.5Dゲームのアニメーションを、ハードウェアで高速化するための機能があります。 |
こういうことができるよ!
- 端末に保存してある写真や動画を選択したりしたい!
- UIImagePickerController
- 端末に保存してある写真や動画を自分で作ったUIで扱ったり、写真やビデオを保存したい!
- Assets Library Framework
- 音声や動画を簡単に再生させたい!
- Media Player Framework
- 音声や動画を細かく制御して再生させるUIを作りたい!
- AV Foundation Framework
- 他のアプリからも使えるInter-App-Audioアプリを作りたい!
- AudioUnit.framework
- 画像フィルターの機能を作りたい!
- Core Image Framework
- 顔認識アプリケーションを作りたい!
- Core Image Framework
- アニメーションが気持ちいいアプリを作りたい!
- Quartz Core Framework
- iOSでゲームを作りたい!
- Sprite Kit Framework
- パフォーマンスのよいサウンド処理を行いたい
- OpenAL Framework
Core Services Layer
Core Services Layerはその名の通り、基本的なシステムサービスが含まれるレイヤーになります。 すべてのベースになるCore Foundation Frameworkから、iCloud,Social Networkを利用するためのフレームワークも存在します。
提供機能
以下提供される機能群です。
- ピアツーピアサービス
- ピアツーピア接続を使用することで、近くにあるデバイスとの間で通信セッションを開始できます。
- iCloud Storage
- プリケーションがユーザのドキュメントおよびデータをクラウド側に書き込めます。ユーザはどこからでも、コンピュータやiOSデバイスを使ってアクセスできます。
- Automatic Reference Counting
- ARCはこのレイヤーに含まれます。
- Block Object
- Block Objectはこのレイヤーに含まれます。
- データ保護
- 特定のファイルを保護対象として指定すると、システムはそのファイルを暗号化された形式でディスク上に格納します。デバイスがロックされている間、アプリケーションからも侵入者からもファイルの内容にはアクセスできません。
- ファイル共有のサポート
- ファイル共有によりアプリケーションは、iTunes 9.1以上を通じてユーザのデータファイルを利用できます。
- Grand Central Dispatch
- Grand Central Dispatchはこのレイヤーに含まれます。
- In-App Purchase
- In-App Purchaseはこのレイヤーに含まれます。
- SQLite
- SQLiteも利用可能でこのレイヤーに含まれます。
- XML Support
- Foundationフレームワークは、XMLドキュメントから要素を取得するためのNSXMLParserクラスを提供しています。
Core Services Framework
以下提供されるフレームワーク群です。
| Framework | 説明 |
|---|---|
| Accounts Framework | ユーザアカウントにログインするための「シングルサインオン」モデルを提供します。このフレームワークはSocialフレームワークと組み合わせて使用します |
| Address Book Framework | ユーザの連絡先データベースにプログラムからアクセスするための手段を提供します。 |
| Ad Support Framework | 広告識別子にアクセスし、広告目的に使えます。また、追跡型広告の機能(Ad Tracking)を制限している旨を表すフラグも参照できます。 |
| CFNetwork Framework | ネットワークプロトコルを処理するために オブジェクト指向の抽象化を使用する、高性能なC言語ベースのインターフェイスセットです |
| Core Data Framework | Model-View-Controllerアプリケーションのデータモデルを管理するためのテクノロジーでXcodeのグラフィカルなツールを使ってデータモデルを表すスキーマを作成できます。 |
| Core Foundation Framework | iOSアプリケーションの基本的なデータ管理およびサービス機能を提供する、C言語ベースのインターフェイスセットです。 |
| Core Location Framework | 位置と方角の情報をアプリケーションに提供します。 |
| Core Media Framework | AV Foundationフレームワークが使用する下位レベルのメディアタイプを提供します。 |
| Core Motion Framework | デバイスの動き(モーション)に関するあらゆるデータにアクセスできる、一連のインターフェイス群が揃っています。 |
| Core Telephony Framework | 携帯電話用無線機能が備わったデバイス上の電話ベースの情報をやり取りするためのインターフェイスを提供します |
| Event Kit Framework | ユーザデバイス上のカレンダーイベントにアクセスするためのインターフェイスを提供します。 |
| Foundation Framework | FoundationフレームワークはCore Foundationフレームワークの機能の多くにObjective-Cラッパーを提供します。 |
| JavaScript Core Framework | 標準的な多くのJavaScriptオブジェクトの、Objective-Cによるラッパークラスを実装しています。 |
| Mobile Core Services Framework | Uniform Type Identifiers(UTI)で使用される下位レベルのタイプを定義します。 |
| Multipeer Connectivity Framework | 付近にあるデバイスを検出し、インターネット接続を介することなく、直接通信するために使います。 |
| Newsstand Kit Framework | 雑誌や新聞を購読する「窓口」としての場を提供します |
| Pass Kit Framework | 「パス」を発行して業務に活用できます。クーポン、搭乗券、催しの入場券、割引券などに相当するものです。 |
| Quick Look Framework | アプリケーションが直接サポートしていないファイルの内容をプレビューするための直接的なインターフェイスを提供します。このフレームワークは主に、ネットワークからファイルをダウンロードするアプリケーション、または未知のソー スから取得したファイルを扱うアプリケーションを対象にしています。 |
| Safari Service Framework | Safariの履歴リストに、プログラムでURLを追加するために使います。 |
| Social Framework | ユーザのソーシャルメディアアカウントにアクセスするための、単純なインターフェイスです。Twitterフレームワークを補うもので、Facebook、新浪微博など、他のソーシャルアカウントにも対応できるようになりました。 |
| Store Kit Framework | iOSアプリケーション内からコンテンツやサービスを購入できる機能を提供します。 |
| System Configuration Framework | デバイスのネットワーク構成を特定するために使用できる、到達性のためのインターフェイスを提供します。このフレームワークは、Wi-Fi接続または携帯電話接続が使用中かどうか、そして特定のホストサーバがアクセス可能かどうかを特定するために使用できます。 |
こういうことができるよ!
- FacebookやTwitterのアカウントでシングサインオンを実現したい!
- Accouns Framework , Social Framework
- 連絡帳アプリを作りたい!
- Address Book Framework
- 広告配信のための情報を使いたい!
- Ad Support Framework
- http通信以外にもいろいろなネットワーク通信を扱いたい!
- CFNetwork Framework
- アプリ上で複雑なデータ構造を扱ったアプリを作りたい!
- Core Data Framework
- GPSで位置情報を知りたい!
- Core Location Framework
- Beaconを使って位置情報を測りたい!
- Core Location Framework
- コンパスを使って方角情報を知りたい!
- Core Location Framework
- 直接フレームやバッファを扱うような複雑な音声や動画アプリを作りたい!
- Core Mediaフレームワーク
- ジャイロを使ってデバイスの動きを使ったアプリを作りたい!
- Core Motion Framework
- 電話呼び出しイベントをフックしたいのだけれども?
- Core Telephony Framework
- カレンダーアプリを作りたい!
- Event Kit Framework
- JavaScriptとアプリを連動させたい!
- JavaScript Core Framework
- アプリで扱うファイルのMIME TYPEが知りたい!
- Mobile Core Services Framework
- 近くにあるデバイス同士を通信させるアプリを作りたい!
- Multipeer Connectivity Framework
- 記事を配信するアプリを作りたい!
- Newsstand Kit Framework
- クーポン発行するアプリを作りたい!
- Pass Kit Framework
- FacebookやTwitterに投稿したり、情報を取得したい!
- Social Framework
- アプリ内課金で一儲けするぞ!
- Store Kit Framework
- ネットワークの接続情報を知りたい!
- System Configuration Framework
Core OS Layer
Core OS Layerはもっとも低レベルのレイヤーで、直接触る機会は少ないでしょうが、これらを用いて上位レイヤーの機能が提供されていたりします。セキュリティや外部アクセサリー向けのフレームワークが存在します。
Core OS Framework
以下提供されるフレームワーク群です。
| Framework | 説明 |
|---|---|
| Accelerate Framework | DSP(デジタル信号処理)、線形代数、 画像処理の計算を実行するためのインターフェイスが含まれています。 |
| Core Bluetooth Framework | Core Bluetoothフレームワークを用いてBluetooth Low-Energy(「LE」)アクセサリを活用できます。 |
| External Accessory Framework | iOSベースのデバイスに接 続されているハードウェアアクセサリとの通信のためのサポートを提供します。アクセサリは、デバイスの30ピンDockコネクタを使用して接続するか、Bluetoothを使用してワイヤレスに接続できます。 |
| Generic Security Service Framework | セキュリティ関係の標準的な サービス群をiOSアプリケーションに組み込むことができます。 |
| Security Framework | 内蔵のセキュリティ機能に加えてiOSでは、アプリケーションで管理するデータのセキュリティを保 証できる、明示的なSecurityフレームワーク(Security.framework)も提供します。 |
こういうことができるよ!
- 音声信号処理や高速な画像処理を行いたい!
- Accelerate Framework
- BLEを扱うアプリを作りたい!
- Core Bluetooth Framework
- 外部アクセサリと通信する
- External Accessory Framework
- iOSでkerberos認証をやりたい!
- Generic Security Service Framework
- KeyChainサービスを使って安全にアプリ内にデータを保存したり、アプリ間でデータを共有したい
- Security Framework
iOS8にて追加予定のフレームワーク
現時点で追加される予定のフレームワークもいくつか紹介します。
| Framework | 説明 |
|---|---|
| CloudKit Framework | Apple提供のmBaaS |
| HealthKit Framework | 健康管理のための機能開発フレームワーク |
| HomeKit Framework | ホームコントロールのための機能開発フレームワーク |
| Photos Framework | iCloudや写真アプリで管理する画像や動画を操作する機能を提供する |
こういうことができるよ!
- BaaSを使ってアプリ開発をより簡単に行いたい!
- CloudKit Framework
- 健康アプリを作ってメタボやめたい!
- HealthKit Framework
- Siriと連携してしゃべるだけで、家の家電を操作できるアプリを作りたい!
- HomeKit Framework
- 写真アプリをより簡単に高機能なものを作りたい!
- Photos Framework
最後に
いかがでしょうか?
SDKで提供される機能だけでも膨大にあります。iOS3の頃から開発している身からすると、すさまじく成長し続けており、様々な可能性を秘めていると思います。
iOS8の公開を控え、これからますます進化してくiOSアプリ開発を、皆さんぜひ楽しんでください!
自分の書いたコードを誰かに評価されたいエンジニアは、けっこう多い?
ITエンジニアのための実務スキル評価サービス『CodeIQ』で出題されている「コード銀行」問題に挑戦すると、あなたのコードが評価されます。
評価(1)出題者からの評価 ⇒評価フィードバック例を見る
- 企業ではたらくという観点からあなたのコードをチェックします
- フィードバックされた観点をふまえてコードを書くと世の中の企業にとって「いいコード」が書けるようになります
評価(2)企業からの評価 ⇒評価フィードバック例を見る
- 「あなたと一緒にはたらきたい」という企業からスカウトが届きます
- あなたのコードが社会でどこまで通用するか、リアルな評価が得られます
興味を持った方はこちらからチャレンジを!