App Storeに登録できるiPhoneアプリを作るために

iPhoneが登場して半年が経った。iPhoneの魅力は、デバイスとしての機能だけでなく、同時に登場したApp Storeにもあるだろう。日々新しいiPhone向けアプリケーションが登場し、その数は1万5000本を突破した。

iPhone向けアプリを作成してApp Storeに登録してみたい、と考える開発者は多くいるだろう。だが、開発に関する情報は、特に日本語のものは、絶望的に少ないのが現状だ。アプリ開発の最初の一歩の解説を行う書籍は、ようやく登場し始めた。だが、そこから先の、実際にユーザに使ってもらうためのアプリを作ろうとなると、もっと実践的な情報が欲しくなる。

そこで、具体的なiPhoneアプリの開発を解説する連載を始めたいと思う。この連載では、カメラアプリや、RSSリーダアプリといった、本当に使い物になるアプリを作りながら、必要となる知識を解説していく。ここで紹介するアプリをベースにして機能を拡張すれば、App Storeに登録するものを作り上げる事もできるだろう。

対象となる読者としては、すでにiPhoneアプリ開発の基礎を理解している人を想定している。プログラミング言語であるObjective-Cや、開発環境であるXcode、基礎的なフレームワークであるFoundationの開発などは、省略する。これらは、書籍などを使って学んでほしい※1。また、ここで公開するソースコードの著作権は筆者に属するが、それを明記すればいかように再利用しても構わない。

※1 本誌特集『iPhoneアプリケーション開発入門』や、連載『ダイナミックObjective-C』でもiPhoneアプリの開発方法やObjective-Cについて解説している。参考にしてほしい。

では、早速始めよう。最初に取り上げるのは、カメラアプリの作り方だ。

カメラアプリを作る

カメラアプリは、iPhoneのカメラを使って写真をとり、その画像に様々なエフェクトを加えたりするアプリだ。iPhoneアプリでも人気分野の1つで、App Storeに多くの種類のカメラアプリが登録されている。

アプリの仕様を考えてみよう。まずアプリにツールバーを配置して、カメラボタンを用意しておく。このボタンを押して写真を撮ればいいのだが、カメラを使って目の前の写真を撮りたい事もあれば、前に撮っておいた写真を読み込んで表示したい事もあるだろう。そこで、カメラボタンを押したらアクションシートを表示し、カメラを使うか、画像を読み込むかを選択できるようにしよう。

カメラを選択した場合は、写真を撮るモードになる。画像読み込みの場合は、リストから画像を選択する。そうやって画像が取得できたら、それをアプリで表示する。さらに、エフェクトをかけて、標準のカメラでは得られない画像を作り出す。

このようなアプリを作ってみよう。

アクションシートの表示

まず、Xcodeを起動して、新規プロジェクトを作ろう。プロジェクトのテンプレートは、今回はView-Based Applicationを選択した。プロジェクト名は「Camera」としておく。アプリケーションコントローラと、ビューコントローラが1つずつ作られる事になる。主にいじるのは、ビューコントローラの方だ。

アプリにツールバーを追加しよう。CameraViewController.xibファイルを開き、Inteface Builderに移動する。このビューに、ライブラリパレットからツールバーをドラッグ&ドロップで追加する。

このバーに、カメラボタンを作ろう。バーボタンアイテムを追加して、インスペクタパネルを使い、Identifierとして「Camera」を指定する。これで、カメラのアイコンが表示されるはずだ。さらに、このボタンを真ん中に配置しておこう。両脇に、フレキシブルな空白を挿入する事で、真ん中に持っていく事ができる。

次に、このボタンを押したときに呼び出される、アクションを追加する。カメラで撮影するか、画像を取り込むかを選択するアクションだ。この選択は、アクションシートを使って行うようにしよう。アクションシートはUIActionSheetというクラスを使うのだが、これを呼び出すクラスはUIActionSheetDelegateプロトコルに準拠しておくと便利だ。これも対応しておこう。

CameraViewController.hを開き、次のように編集する。

CameraViewController.h

@interface CameraViewController : UIViewController <UIActionSheetDelegate>
{
}

// アクション
- (IBAction)showCameraSheet;

@end

ポイントは、2箇所だ。まず、クラスの定義のところで、UIActionSheetDelegateプロトコロに準拠している。これにより、アクションシートを閉じたときに処理を行う事ができる。

そして、アクションシートを表示するためのメソッドを用意している。showCameraSheetという名前にしてみた。これを、ツールバーのカメラボタンから呼び出せばいい。Interface Builderに戻って、カメラボタンからの接続を行っておいてほしい。

続いて、CaemeraViewController.mで実装を行おう。次のメソッドを追加する。

CameraViewController.m

- (IBAction)showCameraSheet
{
    // アクションシートを作る
    UIActionSheet*  sheet;
    sheet = [[UIActionSheet alloc]
            initWithTitle:@"Select Soruce Type"
            delegate:self
            cancelButtonTitle:@"Cancel"
                destructiveButtonTitle:nil
            otherButtonTitles:@"Photo Library", @"Camera", @"Saved Photos", nil];
    [sheet autorelease];

    // アクションシートを表示する
    [sheet showInView:self.view];
}

- (void)actionSheet:(UIActionSheet*)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex
{
}

showCameraSheetでは、アクションシートの表示を行っている。まず、UIActionSheetクラスのインスタンスを作る。初期化メソッドには多くの引数が必要だが、順に、シートのタイトル、デリゲート、キャンセルボタンのタイトル、削除などを行うボタンのタイトル(色が変わる)、他のボタンのタイトル、を指定する。最後の、他のボタンのタイトルは、可変長引数になっているので、カンマで区切りながら必要な数だけ渡す。最後にnilを付けるのを忘れないでほしい。

もう1つ実装しているactionSheet:clickedButtonAtIndex:メソッドは、UIActionSheetDelegateで定義されているメソッドだ。このメソッドは、アクションシートでボタンをクリックしたときに呼び出される。このメソッドの中身は、次回に取り上げる。

ここまでのアプリを動作させて、アクションシートを表示させると、次のようになる。

次回は、カメラを使って撮影するためのコードを紹介しよう。

ここまでのソースコード: Camera-1.zip