その後のその後

iOSエンジニア 堤 修一のブログ github.com/shu223

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

加藤さんをはじめとする豪華執筆陣による名シリーズの最新刊です。


上を目指すプログラマーのためのiPhoneアプリ開発テクニック iOS 7編
加藤 寛人 西方 夏子 藤川 宏之 鈴木 晃 高丘 知央
インプレスジャパン
売り上げランキング: 1,885


このシリーズは毎回買っていて、iOS5プログラミングブックに関しては紙の書籍を持っていたにも関わらず、そのあと達人出版会で電子版が販売されているのを発見してさらに買い直した、というぐらいお世話になっています。


今回はありがたいことに @hkato193さんより献本いただきましたので、気合い入れてレビュー記事を書きたいと思います。


ちなみに本日より発売です。一部大型書店などでは昨日から並んでいるようです。


(隣に並んでいる達人のナントカという本も脱初級者〜中級者向けにオススメです)


# 余談ですが、紀伊国屋新宿本店ではiOS技術本の著者が自らPOPを書かせてくださいと名乗り出るというムーブメントが起きつつあります。

勉強になった項目

どこが参考になった、みたいな話は個人の興味とか今現在やってる仕事とかに依存するのであまり普遍性のない情報かもしれませんが、以下個人的に勉強になった項目です。

1-1. iOS7の概要

一見、「そのあたりは知ってるからもういいか」と読み飛ばしそうになるのですが、よく読むと、非常に細かいレベルで新機能が紹介されています。たとえば、『1-1-9 カメラと画像処理』のカスタムコンポジタの話や、現状できることとできないことの話、音楽データのアプリ間通信の話などなど。


また、OpenGL ES 3.0についても初めて知りました。現状ではA7プロセッサを搭載した iPhone5s / iPad Air / iPad mini retina の3機種でのみ利用可能とのことです *1

3-2. UIKit Dynamicsの応用

おもしろいけど使い道が。。」という声もチラホラ聞くUIKit Dynamicsですが、ここでは「UIKit Dynamicsを利用したCollection Viewレイアウト」や「UIKit Dynamicsを利用した画面遷移」といったUIのレイアウトや動きに物理演算を利用する事例が示されています。『Chaptor 02 画面遷移』の内容も関連するので、iOS7の新機能をまとめて学べて1粒で2度おいしいサンプルだなと思いました。

4-3. 高度なテキスト表現

気になった項目:

  • 非表示領域を設定することでテキストの回り込みを細かく調整する
    • 非表示領域に画像を埋め込める=画像に対する回り込みも細かく調整できる
  • マルチカラムレイアウト
  • テキストへのエフェクト
5-1-3. Background Fetchの実行タイミング

Fetch実行のタイミングはシステムに委ねられているので、実際にいつ実行されるか、というのはブラックボックスです。


この項では、実際に動作させてFetch実行トリガやFetchが実行されないケースなどが具体的に検証されており、非常に参考になります。

5-3. Multipeer Connectivity

Multipeer Connectivityはググればいくつか実装情報が見つかりますし、iOS7 Samplerにもサンプルが入っていますが、この本ではMultipeer Connectivityだけで27ページも割かれています。


この機能が入ることで従来のP2Pの役割を担っていたGameKitのGKSession等はDeprecatedになったという点でも重要な新機能だし、これだけの詳細情報は貴重かと思います。

6-3-6. SKCropNode

しばらくゲームをつくる予定がないのでSpriteKitはまるっと飛ばしそうになったのですが、この項の図を見てページをめくる手が止まりました。


マスク用画像の不透明領域の形状に応じてノードを切り抜いてくれるクラスのようです。もしかしてCoreGraphicsかUIKitにもこういう挙動をするクラスもしくは設定値があるんでしょうか?あとで調べてみようと思います。

7-2. Core Bluetooth

iOSデバイス同士のBLE通信の実装方法。iOS6までのAPIでの実装方法はサンプルや解説記事がありますが、本書ではiOS7の新しいAPIを用いる方法が示されているので、参考になります。

7-3-1. マップカメラ

iOS7 Samplerでは地図を3D表示するサンプルを示しましたが、この項では地図の3Dビューにおけるカメラを制御する方法が示されています。

A-1. 旧バージョンからの移行ポイント

iOS7でステータスバーを非表示にしたかったら Info.plist で [View controller-based status bar appearance] をNOにする、ぐらいの認識しかなくあまり深く考えたことがなかったのですが、「図8-3. ステータスバーの管理方法」という図を見て、なるほど、こういうロジックで各設定がステータスバーの表示/非表示を決定していたのか、と初めて知りました。


また「UIAlertViewへのサブビュー無効化」「バックグラウンドタスク持続時間の大幅短縮」もここで知りました。

A-2. 64bit対応 / A-3. Apple LLVMコンパイラとiOS7 SDK

まとまった情報ありがたいです。


とくにアーキテクチャやコンパイラ関連は(ドキュメント読んでもよくわからなかったりするので、)こうして日本語で平易に書いてくれると助かります。

全体的な感想

このシリーズはiOS7やiOS6と、iOSのバージョン番号がタイトルにつくので誤解されてる方も多い気がするのですが *2、現バージョンにだけ役立つ一過性の情報ではなく、他の書籍やwebでは得難い、ずっと役立つ貴重な詳細情報が得られるシリーズです。


たとえば、つい先日も『iOSの動画処理について学べる日本語書籍のまとめ』という記事を書きましたが、結局動画処理について入門から一歩踏み込んだ情報を扱っているのはこのシリーズの本ばかりでした。


このあたりは、執筆を陣頭されている加藤さんも記事に書かれています。

畑さんが陣頭だったiOS4本のときから、最新iOS SDKの優れた(&長く使える)機能を深く掘り下げて説明するのをポリシーに書いてきました。それぞれ白紙の状態から始め、その折々で内容を厳選しているので、シリーズで重複して説明している箇所はほとんどないのが特長です。
つまり、


「iOS5本を持っているからiOS6本は差分程度しか得るものはないでしょ」


なんてことや、


「iOS6本を買ったからiOS5本とかもういいや」


なんてことはないわけです、はい。


(中略)


ご覧のとおり、シリーズを通して様々な技術が、重複も少なく説明されているのが見て取れます。また、他書籍ではあまり紹介されていない技術(Collection Viewやプライバシー保護、Core Motion、ムービー編集、などなど)なんかもてんこ盛りになっていますね。iOS4本(図中)もiOS5本も、まだまだ役立つ情報がたくさんあることも分かります。

http://katokichisoft.tumblr.com/post/48918145810/iphone-ios


というわけで、本書を含むシリーズ全部オススメです。


上を目指すプログラマーのためのiPhoneアプリ開発テクニック iOS 7編
加藤 寛人 西方 夏子 藤川 宏之 鈴木 晃 高丘 知央
インプレスジャパン
売り上げランキング: 1,885


iPhoneアプリ開発エキスパートガイド iOS 6対応
加藤 寛人 藤川 宏之 高丘 知央 西方 夏子 吉田 悠一 関川 雄介
インプレスジャパン
売り上げランキング: 16,950


iOS5プログラミングブック
インプレスジャパン (2012-08-23)
売り上げランキング: 25,214


iOS4プログラミングブック
畑 圭輔 加藤 寛人 坂本 一樹 藤川 宏之 高橋 啓治郎 沖田 知彦 柳澤 昇
インプレスジャパン
売り上げランキング: 85,081

*1:120fps動画撮影(SLO-MO)やM7等、こういう一部のデバイスだけで使える特別な機能は個人的にwktkしてしまいます。

*2:だからiOSxプログラミングブックという名前をやめたのかなと。覚えやすくて好きだったのですが。。