iphone develop for beginner

22
iPhoneアプリ開発入門 ~簡単なiPhoneアプリを作ってみよう~ 13317日日曜日 iPhoneアプリ開発の入門ということで勉強会を開催させていただくことになりました。 3時間という短い時間ですが、よろしくお願いいたします。

Upload: sachiko-kajishima

Post on 28-Jul-2015

635 views

Category:

Documents


2 download

TRANSCRIPT

iPhoneアプリ開発入門

~簡単なiPhoneアプリを作ってみよう~

13年3月17日日曜日

iPhoneアプリ開発の入門ということで勉強会を開催させていただくことになりました。3時間という短い時間ですが、よろしくお願いいたします。

今日の目標

iPhoneアプリ開発の楽しさを知っていただく

iPhoneアプリの本を読めるようになる好評だったらシリーズ化(できたらいいな・・・)

13年3月17日日曜日

本日の目標は、iPhoneアプリ開発の楽しさを知っていただくこととiPhoneアプリの本が抵抗なく読めるようになることです。iPhoneアプリ開発に興味はあるけれど、いまいち取っ付きにくいと感じているのではないでしょうか。本日一緒に勉強することで少しでも抵抗がなくなればと思います。好評だったらシリーズ化したいなと思っています。。。

アジェンダ

iPhoneアプリ開発に必要なもの

お決まりのHelloWorld

簡単なアプリを作ってみる

13年3月17日日曜日

本日は、まずiPhoneアプリ開発に必要な環境や知識を少し説明し、HelloWorldアプリを作成しながら、基本的なXCodeの使い方、実機転送の仕方の説明をいたします。実際に手を動かしながら行うのが一番身に付くので、一緒に手を動かしましょう。Macが人数分なくて申し訳ないのですが、交代で使ってください。

どうやって開発しているの?

Objective-Cという言語とXcodeというIDEを使用して開発

言語的な敷居が高いので、Unity,Titaniumなど他の言語で開発できるフレームワークもある(ここではObjective-Cで開発する前提です)

13年3月17日日曜日

iPhoneアプリをどうやって開発しているのかを説明いたします。iPhoneアプリはObjective-Cという言語とXcodeというIDEを使って開発します。Javaとかに慣れ親しんでいる開発者にとってはObjective-Cという言語は敷居が高いので(今はARCがあるのでメモリ管理が楽になりましたが、Javaのようなガーベジコレクションがないのです)UnityとかTitaniumといったほかの言語(JavaScript)で開発できるフレームワークもあります。ですが、せっかくなのでここではObjective-Cで開発します。

Objective-Cって何者?

C言語をベースにSmalltalk型のオブジェクト指向機能を持たせた上位互換言語(Wikipediaより)→そもそもMac向け

C言語はそのまま使用することが出来る

構文など実践的なことは後ほどやりますので、ご安心を・・。

13年3月17日日曜日

ちょっと敷居が高いといわれているObjective-Cが何者かということについて軽く説明いたします。Objective-CはC言語をベースにして、オブジェクト指向機能を持たせたものです。こういうとC++と変わらないような気もしますが、Mac向けに特化しているのが特徴です。C言語をベースにしているということもあり、中でそのままC言語を使うことができます。

必要なもの

Mac

Xcode(Macにインストールしてますか?)

実機転送およびAppStoreへの登録をするには、AppleDeveloperへの登録(年間99ドル)が必要

13年3月17日日曜日

開発に必要なものを説明します。開発にはMacを使います。なので、本格的に開発するというのであればMacを用意してください。Mac上でXcodeというIDEを使います。Xcode自体はフリーでダウンロードできますが、AppleDeveloperに登録して年間99ドルを払うと、β版を入手できます。あと、実機転送やAppStoreへの登録(公開する)ためにはAppleDeveloperへの登録が必要なので、注意してください。本日は私が登録しているIDを使って実機転送をしてみます。

では、お決まりの・・・

HelloWorldを作成してみます。

13年3月17日日曜日

あまりぐだぐだと説明しても退屈なので、お決まりのHelloWorldを作成してみましょう。

Xcodeを起動して、新規プロジェクトを作成する(ここではSingleViewApplicationを選択してください)

13年3月17日日曜日

まず、Xcodeを起動してください。FinderのアプリケーションというところにXcodeと書かれているアイコンがあるので、クリックしてください。起動したら、「Create new Xcode Project」をクリックして新しいプロジェクトを作成しましょう。いくつか種類があるのですが、ここでは「Simple View Applications」を選択してください。

プロジェクト名を記載して、Createをクリックしてください。

Devices:iPhone,iPad,Universalの3つから選ぶ(ここではiPhone)UseStoryboards:StoryBoardをつかうかどうか(ここではチェックを入れる)Use AutomaticReferenceCounting:ARCをつかうかどうか(ここではチェックを入れる)

13年3月17日日曜日

次の画面でプロダクト名などを記載しますProduct Name : アプリ名です。好きな名前を入力してください。Organization Name:作成者の名前です。Company Identifier:会社名などの組織名です。これも好きなものを入力してください。BundleName:Company Identifier+ProductNameでできた、iPhoneアプリを一意に決めるものです。プッシュ通信を受けるときなどに使います。Class Prefix:クラス名の前に付加される文字列です。ここでは入力しなくてもかまいません。Devices:対象となるデバイスです。iPhone・iPadを選択するとiPhone用、iPad用のアプリを作成できます。Universalを選ぶとiPhoneのときはiPhone向け、iPadのときはiPad向けの表示ができます。(一つのアプリで使い分けられます)UseStoryBoard:パーツの配置を行う際に、StoryBoardを使うかどうかを選択できます。StoryBoardはiOS5から入った機能なので、古いOSをサポートする場合は使いません。ここでチェックを入れないとxibファイルというファイルが作成されます。(古い本だと書かれていないかもです)Use Automatic Reference Counting:リファレンスカウンタを自動的に行うかどうかを選択できます。これもIOS5から入った機能です。これにチェックを入れないと、確保したメモリを自分で解放することになります。(解放しないと、メモリリークが発生します)ここでは、チェックを入れます。Include Unit Tests:UnitTestを行うことができます。とりあえずここでは使いません。

このような画面が表示されたでしょうか?

ファイル名を表示するファイルの内容を表示

する

13年3月17日日曜日

プロジェクトを作成するとこのような画面が表示されます。EclipseとかのIDEを使っていればだいたいにたようなものだと思います。左側にファイル名、真ん中にファイルの内容が表示されます。

右側はソースコードを編集しているときにはあまり使わないのですが、StoryBoardで部品の情報を編集するのに使います。

だいたいイメージがつかめるかと思いますが、上の部分にあるRunというアイコンをクリックするとソースコードの実行を行うことができます。

いったんこの状態で「Run」をクリックしてみましょう

こんな風に何もない画面が表示されましたか?

13年3月17日日曜日

では、この状態で実行してみましょう。iPhoneシミュレータが起動されて、真っ白な画面が表示されたと思います。XcodeにはiPhone/iPadむけシミュレータが用意されており、Mac上で挙動を確認することができます。ただし、シミュレータでは確認できない機能(電話とか、カメラとか)もありますし、当然ながらiPhone端末よりもMacの方がスペックが高いので、最終的な確認は実機で行うようにしましょう。シミュレータではさくさく動いていたのに、実機に転送してみたらもっさりしていたなんてことはよくあります。

さすがにそれだとつまらないので、

ボタンを押したらHelloWorldを表示させるようにします。

MainStoryBoard.storyboardを選択してください。

StoryBoardでパーツの配置ができます。

13年3月17日日曜日

さすがに何も表示されないアプリではつまらないので、ボタンを表示したらHelloWorldを表示させるようにしましょう。ONボタンを押したらHelloWorldを表示し、OFFボタンを押したら表示を消すという単純なアプリを作ってみることにします。左のWindowからMainStoryBoard.storyboardというファイルを選択してください。ラベルとボタンの配置を行います。右側のWindowから配置するパーツを選択し、ドラッグします。ここではUILabelというパーツとUIButtonというパーツを選択して真ん中のWindowにドラッグしてください。

右側のwindowにオブジェクトが記載されているので、配置してみましょう

13年3月17日日曜日

UILabelを配置したらLabelという表記を削除しましょう。ここではボタンを押したら表記を変更するようにします。UIButtonを2つ配置し、Buttonと記載されている箇所を変更します。片方をON、片方をOFFにしてみましょう。

配置したら、ソースコードに反映します。

13年3月17日日曜日

パーツを作成したら、ソースコードを編集します。Objective-Cは拡張子が.hのヘッダファイルと.mののファイル(C言語でいう.c)があります。ヘッダファイルには変数やマクロを記載し、実際の処理を.mファイルに記載します。StoryBoardに配置した部品とソースコードをひもづけていきましょう。部品を選択して、Controlボタンをおしながらヘッダファイルにドラッグしましょう。そうすると、ウインドウが表示されるので、変数名などを記載します。labelを選択→Controlボタンを押しながらヘッダファイルにドラッグします。ConnectionはOutletを選択してください。Nameの箇所に好きな変数名を記載します。あとはそのままの状態にしてConnectボタンを押してください。buttonを選択→Controlボタンを押しながらヘッダファイルにドラッグします。ConnectionはIBActionを選択してください。Nameの箇所に好きなメソッド名を記載します。あとはそのままの状態にしてConnectボタンを押してください。

ヘッダファイルの内容がこのようになったでしょうか。@interface ViewController : UIViewController@property (weak, nonatomic) IBOutlet UILabel *label;- (IBAction)displayOff:(id)sender;- (IBAction)displayOn:(id)sender;@end

ヘッダファイルの書き方は以下の通りです。@interface クラス名:スーパークラス名{インスタンス変数の定義}プロパティ名、メソッド名の定義@end

13年3月17日日曜日

ヘッダファイルの内容について説明いたします。@interface ViewController:UIViewControllerという箇所でViewControllerというクラス名を定義しています。ViewControllerの隣に書いてあるUIViewControllerというのは親クラスで、このViewControllerというのはUIViewControllerというiOSのクラスを継承しています。@property(weak,nonatomic)IBOutlet UILabel *label;という箇所でlabelという変数を定義しています。@propertyとすることでコンパイラが勝手にsetterとgetterを作ってくれます。ヘッダファイルに記載した変数はpublicではないので、アクセスする場合はsetterとgetterが必要なのですIBOutletと記載したことでInterfaceBuiderで定義した部品と結びつけることが出来ます。-(IBAction)displayOff:(id)sender;という箇所でボタンが押されたときに呼び出されるメソッドを定義しています。IBActionと記載したことでInterface Builderでこのメソッドをactionとして認識できるようになります。ちなみにコンパイラないでIBActionはvoidに書き換えられますので、リターン値は特にありません。

メソッド名の記載の仕方は以下の通りです。

(リターン値の型)メソッド名:(引数の型)引数名(NSString*)hoge(NSString*)moge

引数が二つ以上の場合は以下のように記載することが多いです。(リターン値の型)メソッド名:(引数の型)引数名 メッセージキーワード:(引数の型)引数名

(NSString*)hoge2:(NSString*)moge moge1(NSString*)moge2

13年3月17日日曜日

メソッド名の定義方法について説明します。例では- (IBAction)displayOff:(id)senderと記載していましたが、(リターン値の型)メソッド名:(引数の型)引数名と定義するのが基本です。引数が2つ以上の場合、メッセージキーワードを記載するのが普通です。無くてもエラーにはなりません。

では、ソースコードを変更していきましょう。このようになっているでしょうか。#import "ViewController.h"@interface ViewController ()@end@implementation ViewController- (void)viewDidLoad{ [super viewDidLoad];}- (void)didReceiveMemoryWarning{[super didReceiveMemoryWarning];}- (IBAction)displayOff:(id)sender {}- (IBAction)displayOn:(id)sender {}@end

13年3月17日日曜日

今度はViewController.mファイルを変更していきます。このように記載されているかと思います。viewDidLoadというメソッドとdidReceiveMemoryWarningというメソッドはUIViewControllerでていぎされているもので、ここではオーバーライドしています。独自に実装したい処理がある場合はここで定義します。ちなみに、viewDidLoadというメソッドはView(画面)が初期化されるときに呼び出されるメソッドで、didReceiveMemoryWarningというメソッドはメモリ不足になったときに呼び出されるメソッドです。定義したメソッドの内容を実装していきましょう。

メソッドを以下のように変更してラベルを変更しましょう。- (IBAction)displayOn:(id)sender {[self.label setText:@”Hello World”];//この書き方でも問題ありません。self.label.text = @”Hello World”;}

メソッドの呼び出し方法(メッセージングという)

[オブジェクト名 メソッド名:引数名 メッセージキーワード:引数名]例[hoge setHoge:moge moge2:moge2];

13年3月17日日曜日

Onボタンが押されたときに、ラベルの内容を変更します。[self.label setText:@”Hello World”];と記載することでlabelという変数のテキスト内容を変更することができます。setTextというのはtextというプライベート変数に対するセッターです。ただし、Objective-Cでは self.label.textというようにJavaのような記載をすることも出来ます。メソッドを呼び出すには [オブジェクト名 メソッド:引数名 メッセージキーワード:引数名]のように記載します。Objective-Cではオブジェクトに対して 「メソッド名」のメッセージを送るという処理を行います。

では、Runボタンをクリックして実行してみましょう。こんな感じになったでしょうか。

13年3月17日日曜日

こんな感じでHelloWorldすることが出来ました。

それではもうちょっとかっこいいアプリを作ってみましょう。

13年3月17日日曜日

おすすめ本などを紹介

Appleのサンプルコードhttps://developer.apple.com/library/ios/navigation/index.html?section=Resource+Types&topic=Sample+Code

入門書はこれが好きです(英語です)Beginning iOS6 Development(Dave Mark)http://www.apress.com/9781430245124

Objective-Cについては以下の本が詳しいです(入門書ではありません)詳解Objective-C2.0 第3版 萩原剛志

13年3月17日日曜日

最後におすすめの本などを詳解します。参考書を既に持っているという方はそれを使っていただいてかまいません。まず、AppleのDeveloperサイトにはサンプルコードがあります。使いたい機能を見つけてダウンロードしてみてください。

入門書はいろいろあるのですが、個人的にはApressのBegininngiOSシリーズが好きです。何がいいかというと情報が早いのです。アルファプログラムではありますが、iOS6に対応しています。英語ですが、それほど難しい表現はありません。Objective-Cそのものについては 詳解Objective-C2.0 第3版 をお勧めします。決して入門書ではないので、あるていど出来るようになってから使ったほうがいいです。

本日はありがとうございました。

13年3月17日日曜日