統計情報(30日間)


最新情報をツイート


人気の投稿

【書評】上を目指すプログラマーのためのiPhoneアプリ開発テクニック iOS 7編

このエントリーをはてなブックマークに追加

【追加情報】サンプルコードが公開されていました
インプレス・ダウンロードページ



待望の iOS7本が出た。

@hkato193さん・インプレスジャパンより献本。

以下、内容紹介。

Chapter 01 iOS 7の新機能(加藤氏担当)


iOS7 の新機能のウォークスルー。
最初に最も変化の大きかったUIデザインの変更について解説あり。iOS7で重要な3つのデザインテーマについて取り上げている。
・Deference(服従、謙虚)
・Clarity(明確さ)
・Depth(深さ、奥行き)
続いて iOS7で導入された新しい機能・APIの概要。UIKit Dynamicsや TextKitの他、OpenGL ES 3.0対応、音楽データのアプリ間通信などの紹介。Xcode5の新機能にも触れられている。Auto Layout設定の改善やアセットファイルほか。この辺りは既に多くの人が触っているはず。

知っていたようで知らないこともいろいろあってこの章は役に立った。iOS7の開発情報を押さえておくのにいい。


Chapter 02 画面遷移(西方氏担当)


iOS7から導入された新しい画面遷移の仕組みについて。
まず新しく導入されたクラスとプロトコルの解説。
画面コーディネーター
UIViewControllerTransitionContext, UIViewControllerTransitionCoordinator

画面遷移デリゲート
UIViewControllerTransitioningDelegate(モーダル時利用), UINavigationControllerDelegate, UITabBarControllerDelegate

画面遷移コントローラ
UIViewControllerAnimatedTransitioning, UIViewControllerInteractiveTransitioning, UIPercentDrivenInteractiveTransition

遷移コンテキスト
UIViewControllerContextTransitioning
ほとんどが UIViewControllerが頭についたプロトコル。他に関連で UICollectionViewTransitionLayout など。

メモ)iOS7ではスプリングアニメーション用のメソッドが追加されていてこれを画面遷移でも利用することが可能らしい。
+ (void)animateWithDuration:(NSTimeInterval)duration delay:(NSTimeInterval)delay usingSpringWithDamping:(CGFloat)dampingRatio initialSpringVelocity:(CGFloat)velocity options:(UIViewAnimationOptions)optionsanimations:(void (^)(void))animations completion:(void (^)(BOOL finished))completion
リファレンス
ほー。

カスタム画面遷移

続いてカスタム画面遷移の作り方。カスタム遷移を実装するには
(1) アニメーションコントローラ <UIViewControllerAnimatedTransitioning> を作成して

(2) 遷移元のコントローラなどで画面遷移デリゲート <UIViewControllerTransitioningDelegate>を実装し、(1)のインスタンスを返す
画面遷移時には自動的に(1)が呼び出され遷移アニメーションが動き出す。アニメーションの実装はアニメーションコントローラに書く(transitionDuration: & animateTransition:)。

アニメーションは独自に実装する他、表示中のビューのスナップショットを利用することも可能。本では遷移元の画面が自動扉のように左右に開き、下から遷移先の画面が出てくるサンプルが紹介されている。

画面遷移のカスタマイズは西方氏ご自身のホームページでも解説がある。導入としてはこちらの方がわかりやすいかも。
[iOS 7] 簡単にできる画面遷移のカスタマイズ

インタラクティブ画面遷移

インタラクティブ画面遷移はジェスチャーに合わせた画面遷移を指す。ナビゲーションコントローラで画面を左から右へスワイプした時に前画面へ戻れる、あの動作のやつ。

これを実現するには UIViewControllerInteractiveTransitioning に適合するインスタンスを実装する。このプロトコルを実装したクラス UIPercentDrivenInteractiveTransition が iOS7では用意されていて通常はこれをサブクラス化して使うらしい。
UIPercentDrivenInteractiveTransition
これを使うと指で画面をパン(ドラッグ)しながらスライドさせるおなじみの画面遷移が可能になる。本ではジェスチャーによって遷移をコントロールする方法がサンプルコードとして紹介されている。

Collection Viewのレイアウト変更

最後に Collection View のレイアウト変更とナビゲーショコントローラ連動の話。ここはかなり複雑で理解するにはかなり骨が折れるところだが、図とサンプルコードを使って簡潔にうまく説明してくれてる。ここまで実装できるとかなり凝った表現が可能。


Chapter 03 UIKit Dynamics(西方氏担当)


UIKit Dynamics はユーザインターフェイスで現実世界の動き(物理運動)を表現する為のフレームワーク。画面上の動きをよりリアルに質感のあるものとして表現するのを強力にサポートする。iOS7では見た目がフラットデザイン寄りになった一方で、動きはよりリアルにと体感的なフィードバックを重要視しているのがこのAPIを標準で提供するところからもわかる。

Animator, Behavior, Item の3つのレイヤーから構成される。
イメージ
UIDynamicAnimator → id <UIDynamicAnimatorDelegate>
 |
 |--UIDynamicBehavior
 |   |--id <UIDynamicItem>
 |   |--id <UIDynamicItem>
 |   :
 |--UIDynamicBehavior
 |   |--id <UIDynamicItem>
 |   |--id <UIDynamicItem>
 |   :
 :
このうち動きを司るのが UIDynamicBehaivor。標準で様々なサブクラスが用意されている。
UIGravityBehavior 落下運動
UICollisionBehavior 衝突
UISnapBehavior 終了時に振動を伴う
UIPushBehavior 対象物を押す
UIAttachmentBehavior 2つのitem/アンカーポイントを結合(連結)
UIDynamicItemBehavior item設定
本では UIPushBehaviorと UICollisionBehavior の2つ組み合わせて磁石のような動作を表現するサンプルが紹介されている。

後半では、カスタムBehavior によるCollction Viewのレイアウトのサンプルとして、縦に連なるセルが振り子のように揺れるサンプルコードが解説されている。UIKit Dynamics が UICollectionView と連携できるとは眼から鱗。いいアイディアですね。また UIKit Dynamics を利用した画面遷移として、UIGravityBehavior, UICollisionBehavior, UIAttachmentBehavior の3つを組み合わせて画面が下へ落下しバウンドするようなサンプル解説がある。UIKit Dynamics を使うといろいろな画面遷移が可能になるという好例で面白い。UIKit Dynamics は強力ならがらも構成がシンプルな為に他のビューとの連携がしやすい。それゆえ応用範囲が広くさまざまな場面での利用が期待できそう。UIKit Dynamics を使った人間の感覚に沿ったフィードバックは(確か)Appleも使用を推奨していたので、iOS7以降のユーザインターフェイスの標準要素と考えておいた方が良い気がする。

iOS7のユーザインターフェイスの新しい特徴のうち「静」がフラットデザインなら、「動」が UIKit Dynamics といった感じか。


Chapter 04 Text Kit(西方氏、高丘氏担当)


iOS7から、String Drawingが排除され、新しく TextKitが導入された。またWebKitがUIWebView専用に。
iOS6

iOS7

Text Kit は、従来低レベルAPIである Core Textを直接使わないと実現できなかったテキスト表現を、Objective-CベースのAPIで使いやすく提供したもの。主な機能は次の通り。
フォント :フォント作成、検索、Dynamic Type
表示   :リンク埋め込み、画像埋め込み、テキスト回り込み、リッチテキスト編集
レイアウト:ページング、マルチカラム、テキスト省略のカスタマイズ
デザイン :エフェクト、カーニング、行間、文字間隔指定

フォントと属性付き文字

UIFontDescriptorによるフォント属性情報の管理、Dynamic Typeへの対応方法など。Dynamic Type では文字属性を指定するのにフォント名やサイズではなく、スタイル(UIFontTextStyle)で指定することができる。UIFontTextStyleHeadline や UIFontTextSytleBody, UIFontTextStyleCaption1 など HTMLのタグ指定に似ている。スタイルを利用することで Dynamic Type による実行時のフォントサイズ変更にきめ細かく対応することが可能になる(例えば本文だけ文字サイズを変更するなど)。

各種情報検出、画像の埋め込み

従来から提供されていた UIDataDetectorTypeで定義されている各種情報(リンク、電話番号や住所、カレンダーイベントなど)の検出機能が強化され、文字属性を変更したりタップされた時の処理をカスタマイズできるようになった。NSAttributedString内に画像を埋め込むこともできるようになったらしい。

高度なテキスト表現

後半は Text Kit を構成するコアクラス(NSTextContainer, NSLayoutManager, NSTextStorage)についての解説と、さまざまなレイアウト方法について解説されている。exclusionPaths を使うとテキストの回り込みも可能になる。こんなやつ↓
そのほか NSTextContainerを使ったマルチカラムレイアウトなど。
最後に NSTextStorageのサブクラス化による文字属性の動的変更(例えばキー入力中に色を変えるとか)の紹介。こんなことまで簡単にできるのか。

iOS7はコンテンツが主役と言われてるだけに、その主要情報であるテキスト表現APIも従来に比べると格段に良くなっている。今後 Text Kitを活用したリッチなテキスト表現が当たり前になるということか。

(参考)[iOS7] Text Kit チュートリアル

※画像は下記から引用
Text Kit Tutorial


Chapter 05 マルチタスキング・通信(藤川氏、鈴木氏)


iOS7アプリ開発者向けの裏の(?)目玉機能であるマルチタスキング・通信周りの強化についての解説。
Background Fetch
NSURLSession
Multipeer Connectivity
サイレントプッシュ通知

Background Fetch

Background Fetch自体はシンプルな仕組み。必要な手順は多くない。
・Info.plistでの宣言
・Fetch Intervalの指定
・Fetch処理の実装(UIApplicationDelegate)
のたった3点。

ただアプリの実行中は様々な状態遷移が発生する為、それぞれの状態における Background Fetchの振る舞いを抑えて置く必要がある。本書では様々な状態における Background Fetchの実行/停止状況や、そのタイミングなどを簡潔に整理してある。Background Fetch プログラミング時には本書を手元においておきたい。

NSURLSession

NSURLSession は、通信セッションと、サーバとのデータ通信(リクエスト/レスポンス)を受け持つタスクから構成される。NSURLSession で扱うことができるセッションは4種類。
1. shared     アプリ内共有セッション
2. default    独自定義セッション
3. ephemeral   一時的セッション(キャッシュやCookie、認証情報を残さない)
4. background  バックグラウンド動作(nsnetworkdに委任)
通常は用意されたファクトリクラスメソッドでセッションを取得して使いまわす。このセッションを元に実際のデータ通信を行うタスクを紐付けて実行させる。

タスクは3種類
1. NSURLSessionDataTask RESTやAPIコールなど
2. NSURLSessionUploadTask   ファイルダウンロード
3. NSURLSessionDownloadTask ファイルアップロード
いずれも NSURLSession に生成メソッドが用意されている。
(例)
NSURLSessionDataTask* task =
    [[NSURLSession sharedSession] dataTaskWithRequest:request
                                    completionHandler:^(NSData* data, NSURLResponse *response, NSError* erro) {
                                         :
    }];

[task resume];   // タスク実行
・NSURLSessionDataTask はオンメモリで軽量
・NSURLSessionUploadTask と NSURLSessionDownloadTask はファイルを介したデータ渡し
・タスクのコールバックは Delegate/Blocksから選択可能。
・バックグラウンド処理や、プログレスバーや認証リダイレクト等細かい対応を行いたい場合は Delegateを利用する。
本章では5つの delegateメソッドについてそれぞれサンプルが解説されている。
後半はファイルアップロードとダウンロードの具体例や nsnetworkdでのダウンロード継続についての解説など。あとセッション定義に認証。Fetchno連携や分割実行など、時間がかかる処理への具体的な対策などのノウハウが書かれてる。こういうのは地味に役立つ。

Multipeer Connectivity

同時に8台までのiOSデバイス同士間での通信を可能にするフレームワーク。基本要素は4つ。
ServiceAdvertiser サービス利用可能を広報
Browser 接続相手を探す
Session 接続セッション
PeerID  エンドポイント識別子
それぞれを表すクラスが提供されている(MCで始まるクラス群)。

通信にあたっては最初に MCAdvertiserAssistantのインスタンスを作成して、他デバイスに対して開始可能を通知する。自分のデバイスは MCPeerIDで表す。相手のデバイスから接続要求が来ると MCAdvertiserAssistantDelegate が呼び出される。この中のメソッドで要求への反応を行う。相手先を探す目的で簡易的なユーザインターフェイスが標準で用意されている。MCBrowserViewControllerというやつ。これを組み込むだけで候補端末のリストを簡単に表示できる。セッションが確立できたら MCSessionを使ってデータを送信する。受信は MCSessionDelegateで受ける。サンプルソースではストリームデータの送受信についても解説されている。なお MCAdvertiserAssistant の代わりに MCNearbyServiceAdvertiser を使うと自動接続も可能。これはユーザの利便性を上げるのに役立ちそう。

サイレントプッシュ通知

サイレントプッシュ通知の前提となるプッシュ通知の説明から始まり、Goole App Engine を使ったプッシュ通知の実装の具体例を解説。最後にサイレントプッシュ。どちらかというとプッシュ解説がメインになってましたね。


Chapter 06 Sprite Kit(高丘氏、加藤氏)


Sprite Kit の基本として、Xcode付属のテンプレート("SpriteKit Game")のソースコードを解説。押さえるべきキーワードとしては
・シーン(ゲーム画面)
・ノード(シーン上のオブジェクト)
・アクション/トランジション(ノード動作)
その他注意点としては座標系が UIKitと異なりY軸の正方向が上になっている(↑→)。UIKitは↓→

ノードの種類

SKSpriteNode :スプライト(画像)
SKLabelNode :文字表示
SKEmitterNode:パーティクル(爆発・花火)
SKShapeNode :パス表示
SKCropNode  :マスク
SKEffectNode :Core Image フィルタ
SKVideoNode  :ビデオ
おー、Core Imageにビデオまであるのか。
それぞれのノードについてサンプル付きで丁寧に解説されている。Xcode5ではパーティクルエディタが用意されていてパラメータ設定の結果をリアルタイムに視覚確認できるらしい。

アクション

最初にシーン内のノード管理方法についての解説。シーン内のノード検索にはノード名を条件として * や [ ] といったワイルドカードの利用も可能。検索でみかったノードに対して順に処理を適用することもできる。
アクションは SKActionで定義する。使い方は、移動や回転、拡大縮小といった機能毎に SKActionのインスタンスを作り、それをノードへ適用する。複数の SKAction をグルーピングする事もできる(SKActionは複数の子SKActionをぶら下げられる)。

(例)
SKAction *actionRotate = [SKAction rotateByAngle:M_PI*6 duration:1];
SKAction *actionMove = [SKAction moveTo:CGPointMake(300, 300) duration:1];
SKAction *spinMove = [SKAction group:@[actionMove, actionRotate];
[node runAction:spinMove]

SKTransitionを使うとトランジションによるシーン切替も可能。章の最後には物理計算エンジンにも言及。この辺りは2ページの割り当てしか無く、物足り無い(でもいずれSpritKit本が出る予感も...)。


Chapter 07 拡張機能(鈴木氏、西方氏担当)


この章ではその他のiOS7でのトピックを取り扱っている。

Core Data, Keychain の iCloud共有

Core Dataの基礎から始まり、iCloudとの連携が解説されている。iCloud へのデータ変更、データ読み込み、iCloudからの変更反映など。後半は iCloud Keychainに関して。知らなかったが APIからもこれ使えるのか(というかデバイスの[iCloud]設定でキーチェーンをオンにするだけで同期とのこと。)。

Core Bluetooth

セントラルとペリフェラルの解説から始まり、ペリフェラルの接続→セントラルの接続→データ送信→データ要求→データ送信とコンボで詳細な解説。1つの独立した章にできそう。最後にバックグラウンド時の注意点にも触れられている。

Map Kit / Core Loaction

新しい 3Dビューで利用可能なマップカメラ(MKMapCamera)、MKOverlayView(Deprecated)の代わりに用意された MKOverlayRendererなど。iOS7からは MKDirections を使って経路検索がAPIから可能なった。MKDirectionsRequestに出発点・目的地、時刻や移動方法などを設定して問い合わせると、非同期で経路結果がMKDirectionsResponseとして帰ってくる。結果に含まれる MKPolyline と MKOverlayRenderを組み合わせると地図上に経路を描くことも可能。経路を地図上に描くサンプルが紹介されている。その他、CLBeaconの紹介、サンプルなど(発信、検出)。

Core Motion

「モーション検出はシステムにより常に実行されており、過去7日間分のデータを蓄積している」
この情報は CMMotionActivityManager と CMMotionActivity を使って取得することができる。アクティビティの状態変化をリアルタイムに通知を受け取れることもできる。状態の種類は CMMotionActivityのプロパティで取得可能。
unknown
walking
running
automotive
stationary
その他、CMStepCounterで歩数計測の利用可能。

UIKeyCommand

UIKeyCommand を使うと外付けのキーボードの修飾キーのハンドリングが可能。あらかじめ扱いたいキーコンビネーションのパターンをUIKeyCommandで定義しておき(複数可)、それを UITextFieldや UITextView、UIViewControllerの新しいプロパティ keyCommands<NSArray>にセットするだけ。目的のキーコンビネーションが押されるとあらかじめUIKeyCommandに定義しておいたaction(@selector)が呼び出される。使う上ではいろいろと癖があるようで本章には細かい注意点が上げられている。利用する際は参考になる。


Appendix(加藤氏、高丘氏担当)


最後の補遺では各章に収まらなかったいくつかの変更点に関して取り上げられている。重要なTipsもあるのでここもチェックしておくといい。

・各種アイコンサイズ・形状の変化(デバイス x OSバージョン毎のアイコンサイズ表)
・ビューの前後方向への重なり #バージョンアップ困った問題トップのあれです
・ステータスバー表示/非表示の管理単位 #同上
・UIAlertViewへのサブビュー追加が無効化 #これは知らなかった。多分セキュリティ上の理由か
・バックグラウンドタスク持続時間の大幅短縮10分→3分 #なんと!
・64bit化(対応デバイス、注意点〜データ型サイズの違い、他注意点など)
・Apple LLVMコンパイラとiOS7 SDK(llvm-gcc除外、モジュールの導入→(参考)Objective-C に Modules がやってきた!、Auto Vectorization、静的アナライザの機能強化、などなど)
・ゲームコントローラ


- - - - - - - - - - - - - - - - - - - - - - - -
書評というよりまとめになってしまった。ただそのおかげでひと通り内容に目を通すことができた。iOS7 SDKはやっぱり面白い。
上で紹介したようにiOS7関連の技術情報が広く網羅されているので系統的に新機能を知るには現時点でベストな書籍といえる。iOS7のAPIをフル活用したい方には是非お勧めの書籍。新鮮なうちにどうぞ。




【書評】 iOSアプリ開発達人のレシピ100

このエントリーをはてなブックマークに追加

標準APIはもちろんオープンソースもフル活用してアプリ開発を加速させる実装レシピ集。


@shu223 さんより献本。これまた書評が大変遅くなりました(すみません。。)


アプリ開発の目標は人によって様々だが、少なくとも次の2点は共通するはず。
(1) 目的の機能の実現
(2) 機能を効率よく・短期間で実装すること

本書は (2)の効率化を最大化して、最終目標の (1)を短い時間で実現する為のレシピ=Tips/テクニック集である。レシピには標準APIの活用方法はもちろんのこと、それだけに限定されず積極的にオープンソースの活用を紹介している。前半はユーザインターフェイス、視覚効果、オーディオなどUI/UX関連が中心、後半はデバッグや開発ツールなどアプリ開発を効率化する上でのテクニックなどが掲載されている。1つ1つのレシピは簡潔で短めでやりたいことをピンポイントで解説しているので実用的。 視点を変えれば本書はiOSアプリで実現可能な表現と機能が多数掲載されているので、一種のカタログとしても使える。


目次
Chapter 1 アニメーション/演出
Chapter 2 画像処理/色処理
Chapter 3 オーディオ処理
Chapter 4 UI
Chapter 5 テキスト
Chapter 6 位置情報
Chapter 7 WEBサービス連携
Chapter 8 デバッグ
Chapter 9 開発ツール
Chapter 10 Xcode
Chapter 11 その他

このサイズの本にしては分厚くて(約370ページ)レシピ数がとにかく多い。この為、頭から読み進めるのではなくて目次から目的に合う記事を探すといった逆引き的な使い方が中心になる。問題を抱えている人はもちろん、今とりたてて問題を抱えていない場合でもひと通り目を通して自分の中にインデックスを作っておくのも悪くない。実際自分の場合、目を通してみると知らない内容もあったので「こんな事ができるのか」とか「こんな方法があるのか」とそこからの気付きも少なく無かった。


この本をおすすめする人としては ...
 ・開発を効率的に進めたい人
 ・UIの表現方法に幅を持たせたい人(将来使ってみたい表現が見つかるかも)
 ・実装方法の引き出しを増やしたい人
 ・iOSアプリの表現方法の可能性を広く浅く知っておきたい人(カタログ的利用)
など。

開発初心者で簡単なプログラムが組めるようになった人もいいかもしれない。プログラムを覚えた次のステップとして興味のあるレシピを試すとオープンソースの使い方やiOSアプリの表現力を覚えるのに役立ちそうではある。

逆に向いていない人としては ...
 ・API や Objective-C について系統だった知識を得たい人、それらを深く知りたい人(そういう本では無い)
 ・まったくの初心者(チュートリアル本ではない)
 ・基本的に自分で実装したい人(でも実装や表現のヒントにはなるかも)
 ・Tipsやオープンソースはネットの情報で十分な人
など。

この本の難点を上げてみると具体的なテクニックが中心なので応用範囲が限られること。それと旬なテクニックも多いので賞味期限が短くなりがちなこと。その為自分が抱えている課題・問題に合わなければ、本書は直接的にはあまり役に立たない可能性がある。ただ将来使う可能性のある知識を得ることでも十分メリットはあるのでそこは解釈しだいではあるが(カタログ的用途)。この点、標準APIやObjective-Cの基本を抑えてそれを応用するといった類の書籍とは性格が異なる。なお個人的にはこの本で解決した事例は今のところ無かったが、知らないことも多かったので実装知識の幅を広げる上では役に立った。

- - - -
昔は全部自前で実装するのが最高〜、という雰囲気もあった気がするけど、スピードと多様性が求められる今の時代はむしろ行き過ぎた自前主義は開発を遅らせる自己満足的な足かせでしかない(*1)。利用可能なTipsや優れたオープンソースライブラリが増えた今は積極的にそれらを活用して開発スピードを上げ、いかに素早くユーザへ届けられることの方が市場価値は相対的に高まる。あとアプリ/サービスを提供するという視点では使っている技術を誇るのではなく、ユーザに対して心地よい使いやすさや優れた機能をいかに素早く届けられるかがポイントだと思う。ユーザからの視点では基本的にプログラムやライブラリなりを誰が作ったかは関係ないわけで。また優れたユーザ体験を提供していく上で多様化し複雑化するUI/UXを個人/小グループだけで実装していくのには限界がある。そういう意味で時代に則した書籍と言える。

(*1) 自前主義を否定しているわけではなくて目的によってアプローチは基本的にケースバイケースということ。プログラミングや自前だけのモノ作りを楽しむのが目的というのもありなわけで。やっぱり時間がかかって遠回りしても自分の手でひとつひとつ作っていくのは楽しいよね。あと仕事であっても長期にわたる保守が必要な場合はオープンソースを使わずに自前実装する方が良いケースもある。あくまでもケースバイケースで。



では。

【書評】iPhoneアプリ開発エキスパートガイド iOS 6対応

このエントリーをはてなブックマークに追加

@hkato193 さんより献本をいただきました。今回はその書評。


今年春の発売後早い時期にいただいたにもかかわらず、iOS7全盛まっただ中の今ごろ書評を出すタイミングの最悪さといったら…すみません。売上には貢献できなさそうです(^^;

- - - -

さて、本書は iOS6で追加・改良されたAPIを解説した技術書である。iOS4の時から数えて今回がシリーズの3作目にあたり、毎回 iOSのバージョンアップに合わせその時々の最新トピックスを取り上げて解説している。単なる最新APIの紹介にとどまらず、それぞれのトピックについて細かい部分にも触れながらも網羅的に実際のプログラミングで使える実用的な情報を提供しているのが特徴である。また経験豊かな iOS開発者たちがそれぞれのトピック毎に章を受け持って解説する共著スタイルを取っているのもシリーズを通しての特徴の一つでもある。なお本書では Objective-C や UIKit といった基本的な解説は省かれていて iOSアプリ開発経験者を読者対象としている。この点が他のチュートリアル的な技術書と異なり題名に”エキスパートガイド”と謳っている所以でもある(たぶん)。

目次
Chapter 01 iOS 6の新機能
Chapter 02 UI Kitエッセンシャル
Chapter 03 Collection View実践
Chapter 04 Storyboardと状態保存
Chapter 05 Auto Layout詳解
Chapter 06 Passbook入門
Chapter 07 AVFoudation活用
Chapter 08 Bluetooth Smart実践
Chapter 09 iAd組み込みガイド
Chapter 10 プライバシー保護
Chapter 11 モダンObjective-C
iOS7がリリースされている今となっては新鮮味に欠けるが、どれも現役の技術でその重要性は iOS7時代でも変わらない。


以下にざっと内容を紹介する。

Chapter 01 iOS 6の新機能(加藤氏)

iOS6から導入された新機能についてのウォークスルー。Pass Kit フレームワークや NSAttributedString など新機能の他、Core Image, Core Audio, Core Bluetooth, Accesslerteフレームワーク, コンパイラ(LLVM)といった従来機能の大幅な強化が行われたのも iOS6から。


Chapter 02 UI Kitエッセンシャル(藤川氏、高丘氏、加藤氏)

新しく導入された “Base Internationalization”の仕組みを使って xibや stroyboardから表示文字列を分離して管理する方法について解説している。UIAppearance の解説ではカスタマイズ可能な各コントロール部品についてほぼすべてのコントロールについてその適用範囲や挙動について一つ一つ解説している。各コントロールのアピアランスでカスタマイズ可能な範囲を把握するのに役立つ。


Chapter 03 Collection View実践(西方氏)

本書の目玉の一つともいえる章。多データ表示ビューのポスト UITableViewとしてiOS6から用意された UICollectionView はそれまで縦方向の表示のみだった UITableView を徹底的に汎用化したコントロール。横方向スクロールのレイアウトはもちろん、レイアウトを自由にカスタマイズすることで様々な表現方法を可能にしてくれる。また UITableViewのDataSource/Delegateスタイルを踏襲しているので UITableView に慣れた人であればすぐに使い始められる使い勝手の良さもいい。

本章では、UICollectionView の基本概念より始まり、基礎的な使い方からカスタマイズに至るまでAPIの一つ一つをわかりやすく解説している。後半はカスタマイズしたレイアウトを使う UICollectionView を使ったアプリを実装していく。カスタムレイアウトの作成方法については UICollectionViewLayoutのサブクラス化を手始めにレイアウト属性の変更・拡張方法、アニメーション実装方法、セルの配置実装方法、そしてジェスチャーのハンドリング方法まで一つ一つステップを踏んで丁寧に解説されている。日本語で出ている UICollectionView 情報の中でも間違いなく1、2を争う詳しくてわかりやすい解説だと思われる。UICollectionView 初心者はもちろん、既に利用している人でもこれを応用して新しい表現に取り組んでみたい方にはおすすめ(個人的にはこの章のためだけに本を買うのはあり)。


Chapter 04 Storyboardと状態保存(吉田氏)

iOS6から導入されたコンテナビューと Segueの機能強化の解説。コンテナビューコントローラを使うことで UISplitViewControllerのような2ペインのビューコントローラを構成できるようになった。また Segureに Unwindが導入されて従来は面倒だった画面遷移を戻す方向の制御が Storyboard上で設計できるようになった。

本章ではイメージの湧きにくい SegueとUnwindを使った画面遷移を図を多用してわかりやすく解説している。またカスタム Segure と Core Animation を使い回転・拡大しながら表示されれる Modalアニメーションのカスタマイズ方法や、コードからカスタム Segueを利用する方法などが紹介されている。後半は iOS6から導入された UI State Preservation の使い方についての解説。UI State Preservation は強制終了後に起動した時に以前のアプリの状態を再現することを支援する仕組み。普通に作ると強制終了後はトップ画面に戻るわけだが、この仕組みをうまく活用することで終了直前の画面を復元・表示してユーザには強制終了を意識させず、直前の作業に復帰できる利便性の高い UI/UXを提供することも可能になる。本章では基本的な利用方法の他、ビューコントローラのスタックやビューの復元や、キー/バリュー方式のデータ保存・復元などが解説されている。UI State Preservation の日本語情報はほとんど見かけないのでこの章は貴重な存在かも。


Chapter 05 Auto Layout詳解(藤川氏)

iOS6以前は情報も少なく、またそのとっつきにくさ(難解さ)からあまり話題にならなかった Auto Layout だが、昨年からの4インチディスプレイ登場や今後の大画面化の流れから 今後の複数解像度へ対応する上では必須の技術になりつつある。使いづらかった最大の原因だった Interface Builder もXcode5では大幅に改良されて以前に比べると使いやすくなってきている(まだ難点はたくさんあるが)。Auto Layout の難解さはその高い汎用性を持つがゆえであるが、コツを掴めば非常に強力な道具になる。

本章では Auto Layout の概要説明から入り、前半は Interfce Builder / Storyboard エディタを利用した Auto Layout の使用方法についてスクリーンショットを使い細かく解説している。後半では NSLayoutConstraint を使ってプログラムからレイアウトを定義・制御する方法を解説している。またテキストベースで定義を指定できる Visual Format にも触れていている。Auto Layout に関する情報はネット上でもまだまだ十分とはいえないので、詳しく解説している本書は特に初めて取り組む場面では使えると思う。


Chapter 06 Passbook入門(関川氏)

本章では Passbookの概要や活用イメージの解説から始まり、前半はデータ構造の解説、証明書の取得から始まるパスの署名方法、そしてパスの配布方法などが解説されている。後半は Pass Kit フレームワークを使った実装方法、そして APNSとの連携や実用上の注意点などが書かれている。

Passbook に関する情報もまだまだ十分とは言えないので、実装と利用に必要なひと通りのノウハウがまとめられている本章はこれから利用を考えている方にとっては役立つと思う。


Chapter 07 AVFoudation活用(加藤氏)

導入部で AVFoundation の概念がわかりやすく解説されていて APIを使う上での基礎知識として参考になる。続いて iOS6から導入されたいくつかの機能についてサンプルコードを使いながらの説明。これもありがたい。
・暗い場所での撮影を支援する2つの機能(センサー感度のブースト、トーチの光量調整)
・リアルタイム顔認識とトラッキング(AVFoudationによるリアルタム顔認識、Core Imageによる顔トラッキング)
・手振れ補正機能

後半は Core Image を使った画像処理についての説明。UIAlertViewの背景ぼかすサンプルや、カメラで撮影中の画像に各種エフェクトを加える方法について実際のコードを使いながら解説している。本章で扱う内容は別途1冊の本にもできそうなくらいボリュームがあるところなので導入情報としては十分な内容か。


Chapter 08 Bluetooth Smart実践(関川氏)
BLE(Bluetooth Low Energy)を iOS から利用する上で必要な技術情報が網羅されている。iOS向けの Bluetooth を日本語で本にまとめた情報としては稀有の存在だと思われる。本章では BLE の基礎知識から始まり、フレームワーク Core Bluetooth を使った実地の開発手法までを解説している。

内容については門外漢があれこれ言うよりも目次を見てもらったほうが想像がつくと思うので掲載しておく。
  • Bluetooth Low Energyの概要
    • 今までの Bluetooth との関係
    • Bluetooth Smart/Bluetooth Smart Ready との関係
    • BLEに対応したApple製品
  • Bluetooth Low Energyの基礎
    • Central と Peripheral
    • Profile/Service/Characteristic
    • 通信プロトコル
    • Service の検索と接続
    • データの送受信
  • Core Bluetoothの基本的な使い方
    • iOSシミュレータを使う
    • Core Bluetoothの主要なクラス
    • iOS同士の通信
  • Core Bluetoothの応用
    • 接続済の Peripheral の UUIDの保存と読み出し他。


Chapter 09 iAd組み込みガイド(高丘氏)

iAdの概要から iOS6 での変更点、実際にアプリに埋め込む方法の解説など。コーディング方法の他、Provisioning Portal や iTunes Connect で必要な操作についても説明されている。


Chapter 10 プライバシー保護(高丘氏、関川氏)

iOS6 から整備されたプライバシー機能(アクセス制限)に関する解説。ここら辺への対応を怠るとリジェクトされることもあるので地味だが侮れない所でもある。

本章では、位置情報、連絡先、カレンダー/リマインダ、写真それぞれについてアクセス制限への対応方法が実際のコード付きで解説されている。後半は iOS6で利用可能な識別IDについての解説。idnetifierForVendor や advertisingIdentifier の紹介の他、ポスト UDID の対処など。


Chapter 11 モダンObjective-C(加藤氏、高丘氏)

Xcode 4.4から導入されたObjective-Cの新しい記法やその用法が丁寧に解説されている。内容は、オブジェクトのリテラル表記、添字アクセス、サブスクリプティングなど。またiOSプログラミングにおける基本トピック(非同期処理、データ保護、画像処理、音を鳴らす方法、アニメーション、フォトアルバムへのアクセス、ムービー再生など)の概要解説がある。その他 iOS5からの移植ポイントなど。iOS7時代から見ると古い情報に見えるが、大半は今も通用する内容なので概要をつかむにはいい内容。


なお本書に掲載しきれなかったChapter12からChapter14までを収めた PDFが インプレス社のホームページから無料でダウンロードできる。

ダウンロードページ
Chapter 12 Map Kitの新機能
Chapter 13 情報の共有
Chapter 14 新デバイス・新機能対応
こちらも抜かりなく(?)書かれているので合わせておすすめ。


- - - - -

あたりまえだけど今の技術はこれまでの技術の積み重ねなので、過去の技術を学ぶことが有用なこともある。iOSの場合はメジャーバージョンアップと同時に新規に導入されてよく使われる機能がある一方で数バージョンに渡る地味な改良を重ねることで使い物になっていく機能も多い。例えば前者は UICollectionView、後者だと StoryboardやAuto Layout など。UICollectionView にしても UITableView の成果が継承されていて過去の技術とまったくの無縁では無い。今使われ始めている新しい APIはそうした過去の改良の上に成り立っていることを考えると、その始まりや改良の経緯を知ることは技術を深く知る上で無駄ではないと思う。本書の位置づけは「iOS6」という古いOSの視点で見てしまうと役に立たない古い情報に思えてしまうが、ここで扱われている内容は iOS7 にも受け継がれ使われている現役の技術だし、ここで紹介された様々な フレームワークや API は今後も改良を重ねながら使われていくことは間違いない。それを考えると本書が現場で使われ、その価値を保ち続ける時期はまだまだ続くと思う。実際私自身今でも参考にさせてもらってます。そんな訳でiOSを開発する人は持っておいて損のない本だと思ってます。

なおこの本に限らず技術書は検索性がある方が使い勝手が良いので今後は是非電子書籍版の発売を期待したい。持ち歩くのは重いし...。あとiOSのメジャーバージョンアップ後の早い時期に出してもらえるとタイムリーだし助かります(それを言うなら書評をもっと早く書けとつっこまれそうですが)。これは次回作に期待したい。

と、この書評を書いていたら次回作らしき本が既に Amazonに予約受け付けが出ていた。仕事早いですね。12月発売予定とのことでこちらも期待。


では。