【たのしいCocoa】01_開発環境の設定と、アプリケーションのプログラミング

iPhone アプリを作りたい!
どんなに素晴らしいアイデアがあっても、それを誰かが拾ってくれて形にしてくれる訳ではないのですよね。実際に自分で形にして、それを流通させてこそのアイデアなのです。
「たのしいCocoaプログラミング[Leopard対応版]」を元に、要約メモしておきたいと思います。
開発環境のインストール
まずはこちらの手順にしたがって、XcodeやiPhone SDKなどの開発環境をインストールしておきます。
»目指せ!iPhoneアプリ開発エキスパート:第2回 iPhone SDKの入手と設定|gihyo.jp … 技術評論社
「Developer > Applications」にある Xcode と Interface Builder が特に重要なアプリ。
「アプリケーション > ユーティリティ > ターミナル」から打ち込む命令のことをコマンドと呼ぶ。これもアプリケーションの一種で、コマンドアプリケーション、またはコマンドラインアプリケーションと呼ばれる。コマンドの場合は、コマンドの操作にもその結果の表示にもテキストを使うことになる。これを、GUI(グラフィカルユーザインタフェース)に対して CUI(キャラクタユーザインタフェース)と呼ぶ。
アプリケーションとフレームワーク
Mac OS X のフレームワーク
■ フレームワークの在所
「/システム/ライブラリ/Frameworks」にある .Framework という拡張子をもったフォルダが、フレームワークの実体。
Carbon は OS 9 で動いていたアプリケーションを OS X でも動くように用意されたフレームワークで、Cocoa は OS X から新しく登場したフレームワーク。Carbon と Cocoa はお互いに排他的ではなく、それぞれ得意な分野がある。メインは Cocoa アプリケーションで、必要に応じて Carbon を利用するという使い方もできる。しかし、OS X の新技術は Cocoa アプリケーションから使用されることを前提としているものが多いので、Cocoa の方が有利。また、Carbon フレームワークはどんどん整理が進められているので、推奨されない部分はいずれ切り捨てられる恐れがある。
Cocoa と Objective-C
フレームワークとプログラミング言語
■ API(アプリケーション・プログラミング・インタフェース)
Cocoa に限らずフレームワークにはその機能を呼び出すための窓口がついている。アプリケーションはその窓口を経由してフレームワークを操作する。この窓口のことを API(アプリケーション・プログラミング・インタフェース)と呼ぶ。フレームワークを学ぶというのは API の使い方を学ぶということ。フレームワークの善し悪しも、API がいいかどうかで決まる。
Cocoa の API は Objective-C で提供されているが、ブリッジを経由して Cocoa を操作することもできる。Ruby、Python からも Cocoa を操作できるが、予想外の問題が起こったりするデメリットもある。
開発用アプリケーション
開発のためのアプリケーションと作業の流れ
■ アプリケーションを作る材料
- ソースコード
電卓を作るなら計算の処理、RSSリーダならRSSの読み込みとその解釈などの処理。 - ユーザインタフェースのレイアウト
Cocoa の開発では、ユーザインタフェースをデザインするためのアプリケーション、Interface Builder がある。 - 画像リソース
アプリケーションアイコンや書類ファイルのアイコン、ツールバーボタンのアイコンなど。「このアプリケーションについて」メニューから表示できるアバウト画面の画像など。こういった、ソースコード以外で必要になるファイルのことをリソースと呼ぶ。 - アプリケーションの設定
アプリケーションの名前や著作権情報、バージョン番号など。こういった情報は設定ファイルに記述する。この設定ファイルはプロパティリストという特別なフォーマットになる。これを編集するためのアプリケーションが、Xcodeに含まれる Property List Editor。
■ ビルドの手順
ソースコードや画像リソースなどからアプリケーションを作り上げることをビルドと呼ぶ。
- コンパイル
コンパイルは翻訳の意味。ソースコードをコンピュータに分かるように翻訳すること。コンパイルするとコンピュータが理解できるファイルができあがる。0と1が並んでいるファイルになるから、バイナリファイルと呼ぶ。.o という拡張子がつく。 - リンク
コンパイルすると、ソースコードの数だけバイナリファイルができあがることになる。これらをまとめて1つのプログラムファイルに仕上げる処理のことをリンクと呼ぶ。リンクするときは使用しているフレームワークの情報も付け加えておく。これにより、プログラムを実行したときにフレームワークが自動的に読み込まれるようになる。リンクしてできあがったものは実行ファイルと呼ぶ。 - バンドル
実行ファイルと、画像リソースやユーザインタフェースのレイアウトやアプリケーションの情報などをまとめあげることをバンドルと呼ぶ。このファイルには .app の拡張子がつく。
■ gcc
GNU C Compiler の頭文字で、オープンソースのコンパイラ。実体はコマンドラインのアプリケーション。gcc を使ったコンパイル、リンクをいった手順をまとめて管理してくれるアプリケーションが Xcode。
Xcode
■ 統合開発環境 Xcode の機能
- ソースコードエディタ
ソースコードを書くためのエディタ。プログラミングに便利な機能がついている。 - ソースコードやリソースファイルの管理
ソースコードや画像リソースなどのファイルを管理してくれる。管理はプロジェクトという単位で行われる(.xcodeproj という拡張子)。 - ビルド
必要なファイルをそろえたらビルドを行う。コンパイル、リンク、バンドルといった手順をまとめてコマンド一発でやってくれる。 - デバッグ
アプリケーションのテスト作業を行える。
Xcode のようなアプリケーションのことを総合開発環境または IDE(Integrated Development Environment)と呼ぶ。
■ プロジェクトウィンドウ
iTunesのような構造で、左側にグループとファイル。それを選択すると右側の詳細表示領域に表示される。レイアウトの変更は「環境設定 > 全般 > レイアウト」から変更できる。
テキストエディタは、.h や .m のファイルをダブルクリックするか、プロジェクトウィンドウの右下のハンドラをドラッグして3ペインで表示させる。ウィンドウのツールバーの下にあるポップアップメニューは、左がファイルの履歴、右がこのソースに含まれる関数、メソッドの一覧。このメニューから素早くアクセスできる。
テキストエディタ上で esc キーを押すことでコードの補完ができる。この候補を表示するタイミングは「環境設定 > コード入力補助」で設定できる。
エンコード、改行コードの変更は、「表示 > テキスト」のファイルエンコーディング、行末コードで行う。「環境設定 > テキスト編集」から、ファイルを開く時に使用する設定を変更できる。
エンコーディングは UTF-8、改行コードは LF が無難。
■ デベロッパマニュアル
フレームワークが提供するすべての機能を辞書のように調べることができるドキュメントを API リファレンスと呼ぶ。Xcodeには「ヘルプ > 製品ドキュメント」にデベロッパマニュアルがある。
Interface Builder
ユーザインタフェースのレイアウトを行うデザイナソフトウェア。すべてのデザインを WYSIWYG できる。
その他のツール
■ FileMerge
2つのファイルの差分を比較するためのツール。
■ Icon Composer
アイコンファイルを作成するためのアプリケーション。OS X ではアイコンは .icns という拡張子をもつ。
■ Property List Editor
OS X ではアプリケーションのさまざまな情報をプロパティリストというフォーマットで記述する。その専用エディタ。
■ PackageMaker
インストーラ作成のためのツール。
オブジェクト指向
オブジェクト指向の5つの用語
■ クラス
設計図のこと。アプリケーションを起動するとウィンドウが表示されるが、それはウィンドウクラスという設計図から作られる。ウィンドウ上のボタンはボタンクラスという設計図から作られる。このように、プログラミングで使うウィンドウやボタンといったもののために、クラスという設計図を作っておく、これがオブジェクト指向の考え方。
■ インスタンス
設計図をもとに作り出したものがインスタンス。具体的なものという意味で、クラスという設計図を具体化したもの。実際に動いているのは、ボタンクラスから作られたボタンインスタンス。動作させるには、クラスからインスタンスを作り出す必要がある。クラスからインスタンスを作り出すことをインスタンス化と呼ぶ。
■ インスタンス変数
ボタンに表示させるタイトルやウィンドウ上でのボタンの位置とか、これらの値をインスタンスごとにそれぞれ管理する。これをインスタンス変数と呼ぶ。インスタンス変数は設計図であるクラスで定義される。そしてインスタンス化すると、インスタンスごとにインスタンス変数を確保する。インスタンスは、インスタンス変数をまとめておくための入れ物。
■ メソッド
インスタンス変数を確保できたら、次はそれを操作する手段が必要。ボタンにタイトルを設定する、ボタンを動かす、ボタンを押したときに行う処理などといった操作。こういった処理を行うものをメソッドと呼ぶ。メソッドには2種類ある。インスタンス変数の値を設定したりなど、インスタンスに対して処理を行うものをインスタンスメソッド、クラス全体に対する処理を行うものはクラスメソッドと呼ぶ。代表的なクラスメソッドは、インスタンス化を行うメソッド。
■ 継承
何かを基にしてそれを拡張するというイメージで、実際にはクラスを継承する。通常のテキストフィールドからセキュアテキストフィールドや検索フィールドを作成するためなどに、あるクラスの機能を継承して新しいクラスを作ること。基になったクラスを親クラスやスーパークラス、新しいクラスをサブクラスと呼ぶ。独自のインスタンス変数をメソッドを追加することができ、親クラスのメソッドを上書きすることもできる。
■ 用語の関連図
[クラス [クラスメソッド] クラス]
これをインスタンス化すると、
[インスタンス [インスタンス変数] [インスタンスメソッド] インスタンス]
■ オブジェクトは?
Objective-C でのオブジェクトを定義するなら、クラスとオブジェクトの両方を指すものとなる。本書では、クラスオブジェクトとインスタンスオブジェクトと区別して呼ぶ。
Cocoa での実例
■ ウィンドウ上にボタンを配置
- クラスを確認する
Cocoa にはあらかじめ NSButon というクラスがあるので、それを使う。 - インスタンス化してインスタンスを作成する
ボタンを作るには、クラスをインスタンス化する必要があるので、まずは NSButton クラスのインスタンスを作る。この手順は Interface Builder で行う。 - インスタンスメソッドを呼び出して、タイトルを設定する
ボタンには、タイトルを表すインスタンス変数がある。これをインスタンスメソッドを使って設定する。NSButton クラスの、タイトルを設定するためのインスタンスメソッドは setTitle: 。
これを呼び出すことでタイトルを設定できる(setTitle:@"Push Me!")。または、Interface Builder でその設定を行うことができる。
■ テキストフィールドの継承
Cocoa では、テキストフィールドを表す NSTextField というクラスが提供されている。そのサブクラスもいくつかある。パスワード入力に使われる NSSecureTextField クラス、検索フィールドである NSSearchField、コンボボックスである NSComboBox、トークン分割ができる NSTokenField 。NSTextField も他のクラスを継承している。こういう継承の連なりを、クラス階層と呼ぶ。クラス階層をたどっていくと、必ず大元のクラスにたどりつく。このクラスのことをルートクラスと呼ぶ。Cocoa の場合、ルートクラスは NSObject というクラス。
外部リンク
- »連載:目指せ!iPhoneアプリ開発エキスパート|gihyo.jp … 技術評論社
- »iPhoneネイティブアプリ開発の必読リンク5本 | iPhone 3G Wiki blog
- »【特集】iPhoneアプリケーション開発入門 | エンタープライズ | マイコミジャーナル
- »自作アプリをApp Storeで世界に向けて販売できる!! iPhone SDKプログラミング大全
こちらの関連記事もあわせてどうぞ
- »【たのしいCocoa】02_Hello World!: はじめてのCocoaアプリケーション
- »【たのしいCocoa】08_コレクション
- »【たのしいCocoa】05_RSSリーダ
- »【たのしいCocoa】07_文字列
- »【たのしいCocoa】04_Objective-Cの文法
- »【たのしいCocoa】06_メモリ管理
- »【たのしいCocoa】03_C言語の文法
- »iPhoneアプリケーション
- »【iPhone】プロビジョニングプロファイルを削除する方法
- »【iPhone】着信拒否設定する方法
