ついにリリースされた iOS8 SDK と Xcode6 には、多くの機能が追加されました。特集の第 1 回目では、その新たに追加された主な機能や API について紹介したいと思います。
View 関連
iOS8 はルック&フィールこそ大きな変化はありませんが、View や ViewController の振る舞いに関して大幅な見直しが行われました。iPhone6 の登場により画面サイズや解像度のバリエーションが更に増えたこともあり、あらゆる端末に対応した UI を効率よく製作するためにも、新たな API を活用することが求められるでしょう。
- Size Classes/Trait Collection
- 様々な解像度に対して適切なレイアウトを提供するために、新たな概念を導入
- Self sizing cell
- テーブルビューやコレクションビューで、セル自身の大きさに基づいたレイアウトをサポート
- Visual Effect (UIVisualEffectView)
- 通知センターやコントロールセンターで使われている「すりガラス効果」が利用可能に
- 画面回転の考え方の見直し
- rotation 系メソッドを廃止し、Trait Collection を基本とした画面遷移実装に変更
- UIAlertController
- UIAlertView と UIActionSheet を統合
- iPad 専用ビューの iPhone サポート
- UISplitViewController, UIPopoverController が iPhone でも利用可能に
Size Classes/Trait Collection
これまでユニバーサルなアプリを開発するとき、iPhone と iPad の UI デザインを別々に行い、場合によっては Portrait 表示と Landscape 表示でレイアウトを変更することもありました。このように様々な表示パターンを表す新たな概念として、Size Classes と Trait Collection が定義されました。
上図のように、iPhone/iPad の Portrait/Landscape 表示それぞれにおいて、水平方向および垂直方向の Size Class が定義されています。それぞれの Size Class でどのように UI 部品をレイアウトするか指定することで、あらゆる表示パターンに対応することができます。
Extension
iOS8 SDK ではアプリ間の連携に関わる API が大幅に強化されました。各アプリは自身の持つ機能を Extension として他のアプリに提供することができ、ユーザはお気に入りの機能をアプリに統合できるようになっています。
- Photo Editing Extension
- 「写真」アプリに独自の画像加工機能を提供
- Share Extension
- SNS などの Web サービスにテキストや画像を投稿する機能を提供
- Today Extension (Widget)
- 通知センターにアプリ独自の情報を表示する機能を提供
- Action Extension
- テキストや画像に独自の加工を施して返したり、アプリ内に取り込む機能を提供
- Document Provider
- クラウドストレージへのアクセスやアプリ内データの読み書きを提供
- Custom Keyboard
- 独自のキーボードやテキスト入力機能を提供
Share Extension
Share Extension は Safari などの UIActivityViewController を利用しているアプリに現れ、そのアプリから提供されるテキストや画像、URL などを独自の SNS や Web サービスに投稿することができるようになります。これまで Facebook や Twitter に投稿する機能が OS より提供されていましたが、それぞれのアプリから独自サービスへの投稿機能をユーザに展開できます。
Action Extension
Action Extension も UIActivityViewController を利用しているアプリに現れます。アプリから提供されるデータを利用する点は Share Extension と同じですが、そのデータを自身のアプリ内に取り込んだり、加工して提供元のアプリケーションにフィードバックする機能を提供することが主な目的となります。
以下の例では Safari で開いているページの背景色を黒に、テキストの色を白に加工しています。
Today Extension (Widget)
Today Extension を利用すると、通知センターにアプリ独自の情報と UI を提供することができるようになります。ほかの Extension 同様 ViewController を用いて独自 UI を展開できますが、通知センターの操作性を損なわない実装が求められます。
Notification
通知はついにユーザアクションに対応しました。また Location Notifications という新しいタイプの通知が追加されています。
- User Notifications: 通知タイプの指定とユーザ設定の取得に対応
- リモート通知で送信できる最大データサイズが 2KB に拡張
- Notification actions: 通知に対する応答をユーザに選択させる
- Location Notifications: 指定地点(領域)の出入り時に通知する
新しいフレームワーク
iOS8 SDK でまた強力なフレームワークが追加されました。iCloud を BaaS としての利用を可能にする CloudKit、外部機器との連携を容易に実現する HealthKit や HomeKit など、これまでとはひと味違うフレームワークが提供されており、アプリの可能性が広がったと言えるでしょう。
- PhotoKit
- 写真やアルバムへのアクセス機能を提供
- CloudKit
- iCloud をデータベースとして利用し、端末やユーザ間でのデータ共有やプッシュ通知を提供
- HealthKit
- ウェアラブル端末等から取り込んだ生体情報を管理・共有する機能を提供
- HomeKit
- 屋内設備や家電の状態確認やコントロール機能を提供
- Metal
- iPhone/iPad に最適化された、低レベルグラフィックス API
PhotoKit
これまでも AssetLibrary を利用すれば、端末に保存されている写真はアルバムにアクセスすることはできましたが、写真の上書き保存や削除など、一部の操作はできませんでした。PhotoKit はこれらの制限が緩和された上、より多くの API が提供されています。
- 写真やアルバム追加だけでなく、変更や削除が可能に
- 快適な UI を実現するための最適化された画像読み込み
- 「写真」アプリや iCloud 上での編集の検知
なお先述の Photo Editing Extension は PhotoKit の機能のひとつで、iOS 標準の「写真」アプリで利用可能な画像加工機能を提供することができます。
CloudKit
CloudKit は Apple が提供する BaaS です。データベースへのアクセスやプッシュ通知など、サーバを必要としていたことが CloudKit で実現できるようになります。すべてのサーバサイド・アプリケーションの代わりになるわけではありませんが、様々な要件を CloudKit で解決できる可能性を秘めています。以下に CloudKit の特徴を挙げます。
- Apple ID を基本としたユーザ管理
- KVS ライクなデータベース
- 画像等のアセットを自動でアップロード・ダウンロード
- 条件に応じたプッシュ通知
- 上限はあるものの、実質無料で利用可能
例えば、CloudKit を利用することで以下のようなチャット機能を作成することができます。
既存フレームワークの強化
iOS8 SDK では既存のフレームワークにも多くの API が追加されています。ここではその中でも代表的なものを紹介します。
- AV Foundation
- 音声処理系のクラスライブラリ化(AVAudioEngine)
- フォーカスや露出などのマニュアル制御(Manual Camera Controls)
- Core Image
- カスタムフィルタの作成(CIKernel)
- 組み込みフィルタの追加(CIFilter)
- 矩形や QR コード検出の追加(CIDetector)
- Core Location
- 訪問監視(Visit monitoring)
- 屋内の位置情報取得(Indoor Positioning)
- Security
- Touch ID を利用した認証(LAContext)
- SpriteKit
- シェーダの利用やライティング・影付けへの対応
- 新しい物理演算効果の追加(Physics Fields)
- 3D モデル表示の対応(SceneKit Integration)
Xcode6
IDE の Xcode もメジャーバージョンアップが行われ、多くの機能が追加されました。Interface Builder は Size Classes に対応し、UI 設計を一元管理できるようになりました。機能の試作に便利な Playground、ビューの状態を可視化する View Debugging、テスト機能の強化など、アプリの生産性や保守性を向上させる機能が多数追加されています。
- Swift
- 新たなプログラミング言語のサポート。Objective-C と相互にブリッジ
- Universal Storyboard
- iPhone/iPad の UI デザインが 1 つの storyboard ファイルで管理可能に
- Playground
- 変数やビューの状態をリアルタイムで可視化する、機能の試作環境を提供
- Scene Editor
- SpriteKit で読み込み可能なシーン編集 GUI
- View Debugging
- ブレイク中のビュー階層を 3D 表示したり、各ビューの状態をインスペクタから確認できる
- Quicklook
- debugQuickLookObject メソッドが実装されていれば、ブレイク中にオブジェクトの内容をクイックルック可能
- Testing framework
- パフォーマンステスト、非同期テストのサポート
これだけではない!
本記事で紹介した機能以外にも、大小様々な機能が追加されています。公式マニュアルや WWDC のセッション資料も公開されていますので、興味のある機能は自分で調べてみるのがよいかと思います。次回は iOS8 で追加された機能の中から注目すべきものをピックアップし、その中身についてより深く追ってみたいと思います。どうぞお楽しみに!