プログラミング経験者向けiPhone開発ガイド

プロのための iPhone プログラミング速習マニュアル « maclalala2さんのところで紹介されていた↓を見て(ありがとうございます。Trackbackアドレスが見当たりませんでした。。)、
Original version: iPhone Development Emergency Guide - Matt Gemmell
Thanks Matt for writing pretty consice and to the point guide!

iPhoneアプリの開発にちょうど興味を持っていたので、勉強もかねて元ブログのMattさんに日本語にして良い?とメールしたら快諾してもらえたので訳してみました。
まだラフですが巧遅よりも拙速ということで公開します。

一部の文は文意を損なわない範囲で飛ばしたところがあったり、意訳をしたところがあります。
たとえば「俺に聞くな」とかは「私に聞かないでくださいね」といったニュアンス違いの可能性があるのですが、ネイティブ感がわからないので違っているかもしれません。

うまく訳せなかった・わからなかったところは、iPhoneアプリ開発の勉強をしていくうちに肉付けしていこう。

はじめに

すぐにでもiPhoneアプリの開発をしたいと思っているけれど、どうしたらよいかわからない、優秀な開発者のためのiPhoneアプリ開発のためのガイドです。

初心者向けではないので、アプリ開発の経験のない方は本でも読んでください。
初心者向けではありませんが、ドキュメントを読んだり、調査したり、IDE、SDKなどを使うことに自信がある開発者の方は、これを読めばすぐにでもiPhoneアプリ開発に入れます。

余計な文章や、哲学、くだらない話はしません。これはあなたのようなプロだと自覚を持っているけれど時間に追われている、そういう方のために書きました。悩んでいてもしょうがないのでさっさとはじめましょう。

すぐに理解できるように、事実とちょっとしたコツを箇条書きにして、いくつかの章にわけました。ざっと読めば、すぐにコーディングに入れます。

ハード

  • iPhoneアプリ開発にはIntel Macが必要。
  • iPhone SDKが必要。これはAppleのサイトで登録すればタダで手に入る。
  • iPhoneiPod touchがあると良いが、別になくてもSDKにシミュレータが付いてるので開発ははじめられる。
  • でかいモニタか、二つのモニタを並べて開発するのがオススメ。IDEのXcodeは、やたら多くのウィンドウを開くから。

開発環境

  • IDEはXcode。使いたければ他のエディタでもできる。
  • APIドキュメントとヘルプもついてる。
  • Research Assistant機能
    • Option/Alt+ダブルクリックでクラスやメソッドのドキュメントを引ける。
    • Apple/Command+ダブルクリックでクラスやメソッドの定義に飛べる。
    • Escで自動補完。
    • GDBのUIが付いてる。Instrumentsと呼ばれるパフォーマンスプロファイラとアナライザが付いてる。
    • バージョン管理用のGUIは、SVNCVS、Perforceも対応している。

プログラミング言語

  • Objective-Cを使う必要がある。
  • 単なるCで、若干拡張がされている。(実態はプリプロセッサでごにょごにょしてるC)
  • Objective-Cはなんか気持ち悪い文法に見えるけど、見た目が違うだけ。
  • メソッド名と、引数をいくつかに分割してるので冗長だが、普通の文章のように読めるので読みやすい。
  • Cベースなので、ポインタを使う必要がある。大抵は単に*を変数やクラス名につけるだけ。
  • ただ、本当に詳細な動作を把握するのはけっこう大変で、Cのポインタについては知っておいた方が良い。
  • int、みたいな変数はintだと思ってOK。単にCなだけ。
  • .で変数にアクセスしたければできる。"property"の宣言のときにインスタンス変数を先にすればできる。詳しくはドキュメント読んで。
  • propertiesのアクセスは、Getter/Setterが自動で作られるのでそれを呼ぶだけ。オーバライドもできる。
  • 他に知っておいた方が良いことは下記の通り。
    • super経由でsuperclassのメソッドを呼べる。
    • selfはJavaのthisと同じ。
    • ??selectorメソッドは、_cmdをつけると呼べる。
  • String型は、NSStringをほぼ間違いなく使う。""に@をつける。@"this"みたいに。そういうものだと思って@つけておけば大体問題なく動く。

フレームワーク

  • UIKitとFoundationという二つのフレームワークがある。
  • Macのデスクトップアプリで使っていたCocoaとは違う。でもすごい似てる。ネットでドキュメント探すときには、Cocoa向けじゃないことを確認したほうがよい。
  • ウィンドウとかボタンとか視覚的なエフェクトなんかのClassesは、"UI"で始まる。"UIButton"みたいな感じ。
  • 視覚的な効果を伴わないClassesは、"NS"で始まる。NSStringとか、NSArrayとか。
  • データ構造の制約として、デフォルトで変更不可能になってることがある。変更したいときは、NSMutableArrayなんかの変更ができるsubclassが大抵あるのでそっちを使う。mutableCopyを使えば、変更可能なコピーを変更不可能なものから作れる。使うときにはメモリ管理に注意が必要。

Saving and Loading

  • 設定なんかを保存したいときには、NSUserDefaultsを見てみる。
  • ファイルを保存したいときには、NSDictionaryのXML読み書き機能か、NSDataを使う。

メモリ管理

  • GCはないので、自分でメモリ管理をする必要がある。
  • 単純なルールと制約があるので、それを守れば例外はない。
  • ドキュメントのメモリ管理のところを読むだけで良い。チュートリアルにもなってるから。

GUIでの開発

  • GUIは、Xcodeに付いてるInterface Builderで開発する。IB、って呼ばれることが多い。
  • プログラムでもGUI開発はできる。どっちでも好きな方を使えばいい。
  • IBで作るファイルは、"nibs"と呼ばれる。実際の拡張子は"xib"なんだけど、"nib"でもOK。"xib"って言うのはiPhoneから。
  • コードとIBで作ったGUIを関連づけするには、"outlets"を使えばできる。ドキュメント読んで。
  • IBで作ったGUIは、"actions"でcodeと関連づけできる。idを引数にして、戻り値がIBActionのメソッドを作ればよい。ドキュメント読んで。
  • 関連づけをするには、クラスのインスタンスをnibに作る必要がある。もしなかったら、GUIで、パーツをドラッグしてInspectorを使うとできる。
  • IBで右クリックしてドラッグすると関連づけができる。
  • nibのUIはテンプレとか仕様じゃない。コード生成はしない。実際のインスタンス。ファイルに書きだして読み出すこともできる。
  • 最初のmainのnibは、UIApplicationクラスで読み込まれる。名前はプロジェクト名になる。

デバッグ

  • XcodegdbGUIが付いてる。
  • NSlog()でCowboyデバッグもできる。NSLog(@"Hello World!");こんな感じ。
  • printfデバッグもできる。NSLog(@"You are %d years old", age);
  • オブジェクトも、%@フォーマット指定すれば出力できる。配列やハッシュも出力できる。
  • JavaのtoString()に対応するのは、-(NSString *)description。UIkitや、基底クラスは実装している。
  • コンソール出力は、Xcode内で行われる。

iPhone Simulator

  • SDKについてる。
  • パフォーマンスは正確ではない。実機よりも快適に動く。
  • HWはシミュレートしてくれない。加速度センサみたいなのは使えない。
  • 実機で試してないのにApp storeに投稿すんな。
  • キーボードとかマウスで入力ができる。二本指を使った入力は、Option/Altキーを教えてマウスを使うとできる。
  • 画面の回転もできる。

実機で動かすには

  • certificateを入手しないといけない。
  • App storeに投稿するには必須。
  • 一年99ドル。

App Store

  • すぐにはできない。時間がかかる。
  • 契約書やらいろいろ入力が必要。料金の30%はAppleの取り分。
  • 書類の作成は最低でも1週間見ておく。
  • Appleの承認が降りるまでに2週間ぐらい。
  • アプリの更新をしたときでも承認には同じ時間がかかる。
  • 実際に人間がアプリを試している。
  • 承認されないときには、理由を教えてくれるので、対応して再投稿する。

さらに深く

困ったときにできること。

  • ドキュメント読もう。Getting Started guidesは良くできてる。
  • サンプルコード読んでみよう。
  • フォーラムで聞いてみよう。
  • Google先生に聞いてみる。
  • 本を買う。

助けを求める前に当たり前のことをやっておくこと。

  • 俺に聞くな
  • 聞く前に調べろ。
  • 正確に。他のプラットフォームに慣れてるときは、どのプラットフォームで経験があるか書け。用語が違ったりする。
  • 簡潔に。
  • 礼儀正しく。礼儀正しくて損することはない。

最後に

新しいプラットフォームで開発するときには、ストレスがあるのはしょうがない。以下の2点を忘れずに。

  • 開発環境の設計が悪いわけじゃなくて、慣れていないだけだよ。
  • 君の頭が悪い分けじゃなくて、経験が浅いだけだよ。

Keep those in mind. Now go get started.