ぽんぽこ日記

プログラミング、読書、日々の生活

iPhone開発についてのFAQ

職場の技術発表会でiOS開発関連で発表したところ、Objective-Cでの開発に対して高いハードルを感じている人が多いようだったので、少しでもiOS開発に興味を持ってもらえるようFAQを書いてみました。

Workspace Essentials
Original Update by nickcastonguay

Q. 何が必要?

XcodeというIDEを使って開発するので、Xcodeの動作環境となるMacOSXが動作するMacは必要になっちゃいます。ちなみにMacの現行機種ならどれでも快適に開発できると思います。使いでが良さそうなものを選びましょう。
あと、実機で動作確認したり、全世界でアプリを売るために、iOS Developer
Programに加入する必要があります。これは年会費8400円で加入できます。(価格は2012年6月19日現在)

Q. C言語の知識ないとダメ?

さすがにゼロだと厳しいと思いますが、Objective-Cでは、特にiOS5以降ではARCとよばれる仕組みによって、C言語で難関と呼ばれるメモリ管理の部分が半自動化されていたり、コレクションや文字列、ファイルIOなどアプリケーションを書く上で基本的なものはクラス化されていたりするので、あまりポインタの概念を把握していなくても、一からC言語のプログラムを書くよりはLL的な感覚でプログラミング出来ると思います。

個人的にはC言語はプログラマにとって習得する時間をかける価値がある言語だと思うので、覚えるに越したことは無いですが(もちろん、エンジニアとしての方向性よりけりですが)、まずはiOSプログラミングのためにObjective-Cから入っていって、おいおいC言語について知っていくっていうアプローチもありかもしれませんね。

Q. C言語は知ってるつもりけど、Objective-Cを覚えるのって大変?

C++に比べると、C言語から拡張されている部分が少ないので、そんなに大変じゃ無いです。C言語を知っていたら半日程度でマスターできます。

余談ですが、Javaになれている人は、nil(他の言語で言うところのNULL,None,undefinedみたいな値)に対してメッセージを送って(メソッドを起動)も例外が投げられず、単にスルーしてそのまま処理が続くということに注意です。

Q.どんな方法で覚えたらいい?

私がiOSプログラミングを始めた頃、まだあまり本が出回ってなかった頃だったので、私は、SDK添付のサンプルを動かしまくって、自分の作りたいアプリに近い機能、画面をもつものを探して、ソースを読みつつ、分からないところは添付の各種ドキュメントを読んで行くって進め方でした。サンプルが多いのは助かりました。

ある程度アプリが作れるようになってから何冊か本がでてきて、

あたりは良さそうだと思いました。

補足:
技術的な解説は必要に応じて調べていけば良いと思います。何かアプリを作りたいと思ったら、まず最初に基本を押さえたユーザインタフェースを設計・実現するために、「iOS Human Interface Guidelines」や

を読んでほしい気がします。

Q. せっかくアプリを作ってもAppleの審査に落ちちゃうことがあるって本当?

本当です。が、一般に思われているほど頻繁ではないようです。私も1度落とされたことがありますが、このときは動作確認不足で、iPadで起動しないという不具合を見つけられたためでした。問題を解決して再提出したら、すんなり通過しました。

Appleの審査に関しては、どちらかという技術的な瑕疵とかよりサービスモデル、ビジネスモデルがNGとか、コンテンツが倫理的にまずいとかいう理由で落とされることをよく聞きます。
こういう内容のものは通せないですよ、ということが明確にドキュメントに書いてある条件もあるで、アイデアの段階でそういうのに抵触しそうなのは避けた方が良いでしょうね。

Q.Appleに提出してからリリースされるまでにどのくらいかかるの?

ものによりますが、私の場合はたいてい5〜6営業日くらいです。たまにAppleからメールで質問が来ることがありますので、メールは要チェックです。以前の案件で、なかなかリリースされないなと思ったら質問メールに気づかず、保留されていたということがありました。

Q.実機がないと開発できないの?

最低1台は必要でしょうね。ただ、iOS開発の場合、iPhone/iPadシミュレータが実機をかなり忠実に再現してくれくれるので、トリッキーなことをしなければあまりたくさんの実機を用意する必要は無いと思います。私の場合、主に初代iPadとiPhone4Sをつかって確認しています。画面解像度の異なる新しいiPadや、iPhone3G/3GSはシミュレータのみで確認しています。実機確認が重要なのは主にメモリの限界とパフォーマンスを知ることです。シミュレータで動作しても実機ではメモリ不足でアプリが強制終了させられたり、遅くて使い物にならなかったりすることはよくあるので、リリース前の最終確認は実機で行いましょう。

Q.開発する上で役立つサイトを教えて!

Cocoa Controls

http://www.cocoacontrols.com/

iOS開発のためのいろいろなライブラリを紹介するサイトです。便利ライブラリを活用すると開発がはかどるかもです。他人のソースを読むのも勉強になると思います。ライセンスには気をつけて下さいね。

Q.一番大変なことを教えて

開発そのものより、構成管理・ビルド管理では無いかと思います。
中でも一番よくあるトラブルが、デバッグ用の実機にアプリをインストール出来ないというものです。
iOSアプリの配布の流れでは、実行形式バイナリをデジタル署名することで、アプリの改ざんを防ぐ仕組みを用いています。
SSLやVPNなど、PKI(公開鍵認証基盤)を用いた仕組みについての基本的な知識があるとトラブルが起きたときに原因を解決しやすかったり、チームで開発するときのルールを決めたりするときに役立つと思います。