推薦の言葉
2008年7月11日は私たちにとって忘れられない日になりました。
iPhone 3Gがついに日本で発売された日です。
その1か月前、この本の監訳者である近藤誠さんと私の2人は、遠くサンフランシスコにいました。
WWDC。その名も世界開発者会議、そしてその開幕を飾る、最も刺激的なセレモニーが、AppleのCEO、スティーブ・ジョブズによるキーノートスピーチです。
世界中から集まった開発者たちが、固唾を飲んで見守るそのイベントで、iPhone 3Gが発表され、iPhoneがそれまでの商圏を一気に全世界へ広げ、アプリケーションの提供と地球規模の流通を可能にするAppStoreの発表、それから、実際にiPhone 3Gがどの国で発売されるのか、世界地図が次々と塗りつぶされて行きます。
オランダ、フランス、リヒテンシュタイン、ギニア…アメリカから西へ向って次々と国の名前が呼ばれ、それに呼応するように、会場に詰めかけた各国の開発者たしがあらん限りの歓喜の絶叫。それはとてもエキサイティングな体験でした。
そして一番最後に呼ばれたのは、日本。
私もあらん限りの声を振り絞って、その場にいたすべての日本人開発者とともに、全身の血液が沸騰するような興奮に体を震わせながら絶叫していたのです。
それから一年が経ちました。
本書はiPhoneにおけるプログラミングの入門書ではなく、中級者向けの実践的な参考書です。
いま、世の中はiPhoneブーム一色。そのプログラミング入門書は無数に存在する中で、本当に知りたい情報はなかなか載っていないものも多くあります。
一通りのiPhoneの開発手法を覚え、さあ、もっと何ができるだろう? と考えた時に、本書は良いとっかかりになるでしょう。本書は単に原著を忠実に翻訳するだけでなく、日本版で独自に追記されたより具体的な記事が収録され、一冊の本としての完成度は非常に高くなっていると思います。
この本の監訳者である近藤誠さんは、大学在学中に私の会社UEIの主力製品の1つであるiPhone 向けアウトラインプロセッサ「Zeptoliner」や、2009年のお正月に日本の AppStore でダウンロード数1位となった「i 書道」の開発者であり、iPhone におけるプログラミングに関してはまだ SDK が公開されるよりも前からiPhone について深く研究をしてきました。
近藤さんはいまは大学を飛び級して大学院に通っていますが、いつも新しいプログラムをこしらえては周囲の友だちを驚かせたり、斬新なアイデアで人を楽しませたりする、明るい好青年です。この本の監修の話が来たと相談された時、まだ若すぎる、とも思ったのですが、しかし、よくよく考えてみれば今、彼ほど iPhoneに青春を賭け、実際に活躍している若者もいないのです。
武舎さんという大ベテランの翻訳者の胸を借りて、近藤さん、永野さんという一線級の開発者が独自の章を加筆した本書は、単なる翻訳書に留まらず、本当に有用な情報を提供するものになっています。
本書が、読者の皆さまの道標となり、皆さまの開発した素晴らしいiPhoneアプリがApp Storeに並ぶ日を待ち遠しく思っています。
2009 年 8 月
株式会社ユビキタスエンターテインメント
清水 亮
監訳者まえがき
初代iPhoneが発売され、もう2年が経ってしまいました。当初はWebアプリケーションしか認めておらず、ネイティブで動くアプリケーションはAppleがプリインストールしたもののみに限られていました。その当時は、この夢のような機能を持ったデバイスを前にしながらも、開発者たちは何もできずに我慢していたのです。
2008年の初頭にAppleがiPhone SDKを正式にリリースするということ、そしてそれと同時にアプ リケーションを一元的に管理するAppStoreを公開するという宣言がなされたときには、非常に胸が高鳴ったのを覚えています。このさまざまな機能を装備したデバイスで、自分の独自のアプリケーションを作成して実行できるということが現実に可能になり、しかも作ったアプリケーションはとても簡単に世界中に販売することができるのです。これほど興奮するプラットフォームは滅多にないでしょう。
そのiPhone SDKが公式にリリースされて、早くも1年が経ちました。そのたった1年間の間に、iPhone OSはバージョン2.0から2.1、2.2、2.2.1と進化を遂げ、そして2009年の6月についに3.0のメジャーバージョンアップをするに至りました。iPhone OS 3.0では、かねてからの要望であったコピー&ペーストが追加され、かつて一度はサポートされたものの取り消されてしまったプッシュ通知(Push Notification)の復活、ほかにもSpotlightによる検索やBluetoothによる通信、音楽ライブラリへのアクセス、Map Kitなども同様に追加されました。
この進化により、iPhoneはますます実用的なデバイスへと成長し、そしてアプリケーションの多様性の拡大にも拍車がかかると予想されます。
iPhone OSは非常によく練られたフレームワークを持っており、特にUI Kitなどはその典型で、UI KitのおかげでiPhoneらしいアプリケーションを非常に短時間で作ることができます。ほかにもCore GraphicsやQuartz Coreなどのグラフィックスフレームワークや、Audio Toolboxを始めとするオーディオフレームワークなどなど、20を超える多様なフレームワークが用意されています。
これらひとつひとつを使いこなしていくことが、iPhoneアプリケーション作成には非常に重要な要素となっており、SDKがリリースされ、ある程度のノウハウがたまりつつある今だからこそ、もう一度これらの機能それぞれを振り返って細かく見ていく必要性が高まっています。
本書ではそれらのフレームワークに焦点を当て、ひとつひとつ紹介するという形式をとっているため、一度も利用したことのないフレームワークを使うときには、そのフレームワークの大枠を知る手がかりになるでしょう。学習を進める際には、まずその章を読み概要について把握した上で、自分でそのフレームワークを利用したコードを書いてみるという方式を採用するとより効率よく学ぶことができるのでぜひ参考にしていただければと思います。
2009年7月
近藤 誠
はじめに
私は長いことiPhoneのハッキングをしてきたので、よくiPhone SDKをどう思うかと聞かれます。 この本を買ってくださった皆さんには、この場を借りて、その質問にお答えしましょう。手短に言うと、AppleのiPhone SDKを使えば、おそろしく厄介であったはずの作業を簡素化してくれる高レベルの非常に快適な機能性が得られます。SDKの快適な枕の下には支離滅裂で設計もお粗末なフレームワーク群があるのですが、こうした代物の中に、SDKの不得意な場面で大いに機能を発揮したものがあります。AppStore用に高品質、高機能のアプリケーションを作るには、もちろんSDKで十分です(そうでなければ、SDKについて私が本を書くこともありません)。SDKのインタフェースは、有能な開発者ならほとんどの人が質のよいソフトウェアを設計できる程度にうまく書かれていますが、ほとんどの人はSDKでは使えなくなってしまっている機能には気づいていません。オープンソースの世界で経験を積んだ開発者にとっては、iPhone SDKは今なお論争の種なのです。
SDKをめぐる論争をご存じない方のために紹介しておきますが、開発者用インタフェースが2つあるのです。SDKのインタフェースと、Appleが使っているインタフェースです。一致している部分もいくらかありますが、私は拙著“iPhone Open Application Development”(O'Reilly)で、皆さんが聞いたこともないクラスやフレームワークの数々を紹介しました。皆さんが聞いたこともないのは、SDKで使えないからです。私たち初期のiPhoneハッカーの多くは、iPhoneのOSに直接入り込むことによって、そうしたクラスやフレームワークを発見しました。何週間にもわたって、シンボルテーブルやクラスをダンプしたり試行錯誤の実験をしたりして、iPhoneのユーザーインタフェースキットや、今では非公開となっているほかの多くのフレームワークを解明したのです。オープンソースツールでiPhoneのソフトウェアを構築するときに開発者が使うのはこうした低レベルのAPIであり、Apple製アプリケーションの多くが、SDKの許可していないことをやるための低レベルのAPIを利用しているのです。
こうした低レベルのAPIのおかげで、オープンツールチェーン開発者はSDK開発者より優位な立場におり、私が見る限り、AppleのSDKよりもよい開発用フレームワークを提供しています。iPhone上のそうしたフレームワークの多くは個人用としてひっそりと使われているため、AppStoreのアプリケーションを使っている開発者はその機能を使えません。こうした機能の多くが、自社が提供するアプリケーションと競合するとAppleがみなしているらしいアプリケーションを構築する上で不可欠だと思われることは偶然の一致ではありません。Appleの最悪の妨害は、Core Surfaceフレームワークを制限してしまったことです。そうでなければ、SDK開発者は未加工のピクセルをスクリーンレイヤに直接置き、グラフィックスアクセラレータを使った機能を組み込むことができたでしょう。このフレームワークが使えないと、自作のムービープレーヤーやビデオレコーダー、高性能の2Dゲーム(たとえば私が持っている任天堂の無料ゲームエミュレータ)のように2Dレンダリングが必要なアプリケーションを動かそうとして苦労することになります。また、これはFlashやJavaなどのアプリケーションを十分なパフォーマンスを持つように書く上で重要なフレームワークでもあります。もうひとつ、SDKで使えないAPI群がありますが、それはiTunesの音楽を扱うためのインタフェース機能です。このために、Nate TrueのSDK用Tap Tap RevolutionがiTunesのライブラリから歌を取ってこられなくなってしまいましたし、(持ち主の足の運びのリズムに合わせて音楽を演奏する)SynchStepのようなシャレた音楽アプリケーションがApple非公認の場所でしか見られなくなってしまいました。バックグラウンドで動作する、あるいはステータスバーのアイコンを表示するといった単純な機能でさえ、AppStoreから締め出されるAPIを使っているときしか使えません。言うまでもなく、オープンソースのiPhoneコンパイラを使えば、SDKでできない多くのことができ、これはAppleがiPhoneのソフトウェア市場で永遠に優位を保つためだと見る向きもあります。
逆にSDKでも、オープンソース側がなかなか実現できなかったことが実現されています。それは 「大容量のキャッシュ」です。開発者にしてみれば、iTunesに負けないくらい多くのユーザーから入る、いやらしいほど巨額の利益を思うと、Appleのポリシーに対する嫌悪感もぐっと我慢できるようです。AppStoreは、従順な開発者には資金面で報います。AppStoreのSDKを使えば金儲けができるという見込みは、オープンソースを使う場合の収入の見込みよりかなり大きいのです。たとえ、できあがったアプリケーションに多少機能の不足があるとしても。
技術的な観点のみから見れば、オープンソースのコンパイラではアプリケーションを構築するのに、SDKのインタフェースを使うことも、低レベルのプライベートなインタフェースを使うこともできます(ヘッダを使い分けるだけの話です)。Xcodeについても同じことが言えます。正しいヘッダをSDKに提示しさえすれば、プライベートの、マニュアルに記載されていないインタフェースを容易にインポートできるのです。アプリケーションの開発用に4つの組み合わせが使えるわけです。
つまり、こういうことです −「AppStoreのアプリケーションを使おうとするならAppleのルールに従わなければならない」。Appleは個人が作ったインタフェースやフレームワークを使うアプリケーションを受け入れません。Appleのルールに従わず厚かましくもディスプレイの明るさを自分流に調節しようとしたフラッシュライトのアプリケーションをAppleは拒否したとのことです。営利目的の開発者や、自分用にソフトウェアを設計している開発者がとるべき道はただひとつ。それは、この本で解説した、Appleお墨付きのAPIを使うというものです。しかし、今、この本を読んでくださっている方がオープンソースを熱烈に支持しているのであれば、そして自分のプログラムはむしろ芸術的なものなのだと考えているのであれば、手かせ足かせをはめられることなく、自分の書きたいように自由にソフトウェアを書きたいのではないでしょうか。その場合は、この本でご紹介したAPIの使用を検討するだけでな く、マニュアルに記載されていない API やフレームワークの数々についての知識をさらに充実させることをお勧めします。iPhone 用に、パブリックなコンパイラと、無線のオンラインコミュニティソフトウェアの宝庫を最初に造り出したのはオープンソースの開発者たちで、こうした開発者はフル機能のすばらしいアプリケーションを歓迎します。
iPhone 開発の世界は目下、分裂の苦しみを味わっています。どちらの側も勢力を拡大しているものの、分極化が進んでいるのです。多くの開発者が、SDK に加えられたさまざまな制限に幻滅し、(GPLなど)一般的なオープンソースライセンスとの互換性がないとこぼしたり、Apple が iPhone をオープンにしてくれさえすればハッキングの必要がなくなるのにと嘆いたりしています。私が望んでいるのは、Apple が SDK に対して今のように警戒心に満ちた独占的とも思えるような制限を加えることをせずに、iPhone の OS を完全に公開することです。iPhone は全体として見れば歴史上でも最高に革新的なモバイル機器ですが、Apple は市場支配の欲望に駆られて、開発者にも消費者にも悪影響を及ぼす危険を冒しています。iPhone を1 台買うより拳銃を何丁か買うほうがよっぽど容易だという事実だけをとってみても、Apple がいかに市場支配にとらわれているかがよくわかります。この意固地な態度こそが、驚異的なプラットフォームであるiPhone のためにソフトウェアを設計しようとしている多くの開発者たちを困らせているのです。
知的な開発者の創造性と革新性がデバイスメーカーの気まぐれな欲望に支配されるようなことがあってはならないと私は思います。プログラムは多くの人々にとって自己表現の一形態なのですから、そうした表現の自由に対して検閲を行うということは、Apple の外で生まれてきた革新技術を処罰しようとすることにほかなりません。
以上のようなことがあってもなお、私は Apple 製品のすばらしさに畏敬の念を抱き続け、Apple の革新性を賞賛し続けるでしょう。SDK は非常に考え抜かれた製品ですし、Apple の Objective-C の最新版は、私がこれまでに見た中でもとりわけ優雅で開発者指向の言語なのですから。Apple には美しいものを作る能力があり、iPhone はほとんどあらゆることが非常に美しいのです。私が望んでいるのは、Apple が他勢力の革新性を押しつぶすことによってではなく、最高に創造的であることによって、これからも成功し続けてほしい、ということだけです。
2009 年 1 月
Jonathan Zdziarski
まえがき
2008年3月、AppleがSDKを正式発表すると、企業アプリケーションを構築する世界中の開発者が 喝采の声を上げました。待望の開発環境がようやく公開され、iPhoneの商用アプリケーションを設計 できるようになり、開発したアプリケーションを世界中のiPhoneユーザーに配信するチャネルが提供 されたのです。この本では、AppStore用のアプリケーションを開発するためのAppleお墨付きのSDK とAPIを紹介します。
Apple SDKの登場によって、モバイルソフトウェアの開発は大きく前進し、本物の「一夜大尽」が誕 生するすばらしい機会が生まれました。読者の皆さんはSDK開発者として自作のアプリケーションを 何百万というエンドユーザーに配信するチャネルを得て、エンドユーザーは皆さんの作ったアプリケー ションを瞬時にして手に入れる機会を得ました。AppleがようやくNDA(秘密保持契約)を廃止した ことで、このすばらしいデバイスと、そのビジネスモデルの開発熱はいっそう高まりました。iPhone SDKによって、新機軸の登場と利益拡大のすばらしい機会が間違いなく生まれたのです。
とはいえ、現実を見据えて、こうした期待と興奮はほどほどに抑えなければなりません。皆さんは iPhone開発者として、まだまだ全体的に閉鎖的なデバイスだとみなされているプラットフォームで設計 を行うことになります。できあがったアプリケーションは特定のタイプのアクセスを防ぐための制限付き の「サンドボックス」内で動作しますし、AppleはiPhone上にあるより強力なリソースにアクセスできる プライベートなAPIの使用を制限しています。開発環境に加えられているこうした制約をきちんと把握 し、実現不可能な動作をさせようとして時間を浪費するような事態を避ける必要があります。
SDKにはゆるめの手かせ足かせがはめられている、とこぼす人は大勢いますが、質のよいゲームや アプリケーションを書くには十分強力なプラットフォームであることに間違いはありません。SDKでは、iPhoneのより複雑な低レベルのフレームワークを「カバー」する使いやすいクラスが導入されてい ます。おかげで、ユーザーインタフェースやGPS関連の機能、さらにはバンドルの設定といった事柄 に関連したプログラミングが、ほかの開発環境で行うよりはるかに短時間でできます。ですから開発者 はプロジェクトのもっと重要な側面に焦点を絞ることができます。わずか数行で、種々のユーザーイン タフェースを作ったり、3Dアニメーションを表示したり、サウンドを加えたりすることができるのです。 この本では、iPhone用のアプリケーションの開発方法を紹介し、iPhone用に高機能のソフトウェアを設計・開発するために重要な役割を果たす各種フレームワークについて紹介します。
対象読者
この本の対象は、初心者も経験者も含めて iPhone のアプリケーションを作成する開発者です。この 本を読むにはプログラミングの基礎知識が必要です。iPhone の開発環境で使うのは Objective-C で、 これについてはこの本の1 章で解説しています。うれしいのは、C とC++ も使えるので、すでにC と C++ を知っている人は Objective-C に関する知識を少し追加するだけでアプリケーションが作れるよう になるでしょう。この本は Objective-C の完全な解説本ではありませんが、完全なプログラム例がいく つも掲載された、ちょっとした入門書としてもお役に立つでしょう。
この本を読むときには、iPhone について、この本では触れていない側面があるという点を覚えて おいてください。低レベルのオブジェクトとフレームワークの多くが SDK では使用を禁止されてい るのですが、iPhone のハッキングを行ってきた人々の間では利用されてきました。こうした Apple に 禁止されているAPI はこの本では扱っていません。少数の例外はありますが、読者の皆さんが混同 しないように、はっきりマークを付けてあります。社内で使うアプリケーションをSDK で書く場合 や、iPhone のより低レベルの機能を理解したい場合は、“iPhone Open Application Development, Second Edition”(O'Reilly)で補ってください。この本とあわせて読めば、皆さんにできることだけで なく、できないこともわかりますし、ハッカーたちが書いたアプリケーションと競合するような機能に ついても知ることができます。
本書の構成
1 章 iPhone
SDK の概要
iPhone SDK のインストールや起動方法、それにサンプルアプリケーションをビルド(作成) しインストールする方法について解説します。
2 章 Interface Builder の概要
iPhone ユーザーインタフェースを設計するのに使うWYSIWYG のツールであるInterface Builder について紹介します。
3 章 UI Kit 入門
UI Kit フレームワークと、それを用いてユーザーインタフェースの基本要素を設計する方法を紹介します。
4 章 マルチタッチイベントとジオメトリ
イベント処理と画面上の点や領域などの処理について解説します。
5章 Quartz Coreを使ったレイヤの処理
Core GraphicsとQuartz Coreを使ったレイヤ処理方法を解説します。
6章 iPhoneのサウンド−Audio ToolboxとAVFoundation
AVFoundationを使ってサウンドファイルをミックスしたり再生したりする方法と、Audio Toolboxフレームワークを使ってデジタルサウンドストリームを録音、再生する方法を解説し
ます。
7章 CFNetworkを用いたネットワークプログラミング
CFNetworkフレームワークを使ったネットワークプログラミングの例を示します。
8章 位置情報の取得−Core Location
Core Locationフレームワークについて解説し、iPhoneのGPSの利用方法を紹介します。
9章 アドレス帳のフレームワーク
Address Book APIについて解説し、連絡先の参照や表示の方法を紹介します。
10章 高度なUI Kitデザイン
3章で紹介したUI Kitについて、より高度な機能を実現するためのクラスを解説します。
11章 アプリケーションの環境設定
アプリケーションの環境設定の読み込みと保存の方法、およびプロパティリストの処理方法を解説します。
12章 カバーフロー
カバーフローと似たようなインタフェースを実現する方法について解説します。
13章 ページのフリック
本のページを繰るような効果を持つ「フリック」機能の実現方法を説明します。
14章 Media Playerフレームワーク
自分のアプリケーションでムービープレーヤーの機能を実現する方法を解説します。
付録A Core Graphicsフレームワーク
この本の監訳者による日本語版オリジナルの記事です。原著では取り上げられていないCore Graphicsフレームワークの使い方について独自のUIパーツ(マルチタッチのハンドリングやアニメーション)を作成しながら解説します。
付録B オーディオセッションとオーディオユニット
永野哲久氏による日本語版オリジナルの記事です。原著では取り上げられていないオーディオセッションとオーディオユニットについてサンプルをあげながら解説します。
謝辞
スゴい発見について教えてくれたLayton Duncan氏やBrian Whitman氏らに感謝します。また、 技術面のレビューをしてこの本を改善してくれたJonathan Hohle、Dallas Brown、Brad O’Hearne、 John Draperの各氏にも感謝の言葉をささげます。最後に、この本の執筆に夢中になっていた私を、眠っている間に殺さないでくれた妻に対してありがとう。