Hello World

2010. 08. 03
はじめてのiPhoneプログラミング』最初のお題はプログラマーにはおなじみのHello Worldです。

まっさらなビューにラベルを貼り付けるだけのシンプルなものです。


●サンプルコードのダウンロード

先の『はじめてのiPhoneプログラミング』を始めてみた』でも説明しましたが、本書のサンプルコードの置き場として原書の出版元であるApress社のBeginning iPhone Development: Exploring the iPhone SDKのページへのリンクが紹介されているのですが、実際のサンプルコードの置き場は著者による原書のサポートページらしき所に飛ぶようになっており、ダウンロードするにはフォーラムに参加しなければならないそうです。

が、新版の原書のページを見るとApress社のサイト内にサンプルコードが置かれていますので、そちらを利用させていただきます。

ダウンロードすると『Beginning iPhone Development Projects Oct 12 2009』というフォルダになり、今回の内容は『02 Hello World』になります。


●サンプルコードの内容

『02 Hello World』フォルダ内の『Hello World.xcodeproj』を開くとターゲットが『Base SDK Missing』となっていますのでそこから修正します。

603

Xcodeの『プロジェクト』メニューから『プロジェクト設定を編集』を開きます。

604

『ビルド』タブの『設定』で、『アーキテクチャ』欄の『ベースSDK』の項が『iPhone シミュレータ 3.1.2 (見つかりません)』となっていますので、『iPhone シミュレータ 4.0』にします。

605

するとターゲットのメニューが変わるので、『Simulator』を選択します。

606

これで『ビルドと実行』をすると、iPhone Simulatorで動かすことができます。

607

前述の通り、まっさらなビューにラベルで『Hello, World!』と表示するだけです。

この章では、プロジェクトの新規作成とInterface Builderでのラベルの貼付け、アプリケーションアイコンの設定の仕方が説明されています。


●プロジェクトの新規作成

基礎からのiPhone SDK 改訂版』では新規プロジェクトのテンプレートとして『Window-based Application』を選択してきましたが、本書では『View-based Application』を使用していますので、両者を比較してみたいと思います。


・テンプレートの選択

新規プロジェクトを作成する際のテンプレートの選択です。

608

・Window-based Application
このテンプレートは全てのアプリケーションの出発点です。
アプリケーションのデリゲートとウィンドウを提供します。

610

・View-based Application
このテンプレートは一つのビューを使用するアプリケーションの出発点です。
ビューを管理するビューコントローラと、ビューを含むnibファイルを提供します。


・ファイルリスト

生成直後のグループとファイルです。

609

Window-based Applicationには必要最小限のものしかありません。

Classesには自動的にアプリケーションデリゲートのヘッダファイルとソースファイル『~AppDelegate.*』が生成され、小規模の場合はここにコードを記述します。

Other Sourcesにはプリコンパイルヘッダファイル『~_Prefix.pch』と、アプリケーションのメイン関数『main.m』が生成されますが、今の所気にしなくてもいいです。

Redourcesにはウィンドウのnibファイル『MainWindow.xib』と、アプリケーションの情報を記述するプロパティリスト『~-Info.plist』があります。

611

View-based Applicationには、Window-based Applicationに以下のファイルが追加されています。

Classesにはビューの制御を行うクラス『~ViewController.*』が追加され、メインのコードはこちらに記述し、デリゲートでの処理は『~AppDelegate.*』にと使い分けします。

Resourcesにもビュー用のnibファイル『~ViewController.xib』が追加されています。


・~AppDelegate.h

612

Window-based Applicationのアプリケーションデリゲートのクラス宣言ではNSObjectを継承し、ウィンドウのインスタンス変数の宣言と、アウトレットとしてウィンドウのプロトタイプ宣言を行っています。

613

View-based ApplicationはWindow-based Applicationの内容に、ビューコントローラクラスのインスタンス変数の宣言と、ビューのアウトレットのプロトタイプ宣言が追加されています。


・~AppDelegate.m

614

Window-based Applicationのアプリケーションデリゲートのクラス実装ではプロパティの実装と、各種UIApplicationDelegateプロトコルが並んでいます。

詳細は『UIApplicationDelegateプロトコル』を参照してください。
(iOS 4.0で追加されたapplicationDidEnterBackground:とapplicationWillEnterForeground:については記述していません)

最後にdeallocでウィンドウのインスタンスを解放しています。

615

View-based ApplicationはWindow-based Applicationの内容に、ビューコントローラのプロパティの実装とdeallocでのビューのインスタンスの解放、application:didFinishLaunchingWithOptions:内でウィンドウの可視化に加えてビューの追加を行っています。


・~ViewController

616

~ViewControllerクラスのヘッダファイルではUIViewControllerを継承したクラス宣言を行っています。

617

ソースファイルでは、ビューの読み込み前後で行う処理についてはコメントアウトされていて、必要に応じて随時記述する形になっています。

実装されているのは、メモリ不足時の対応『didReceiveMemoryWarning』とビューが読み込みできなかった場合の対応『viewDidUnload』です。


・MainWindow.xibと~ViewController.xib

同名のnibファイルですが内容が異なります。

618

619

Window-based ApplicationのMainWindow.xibには、唯一のウィンドウが存在するだけですが、

620

621

View-based Applicationにはビューコントローラが追加されています。

622

623

実際のビューのユーザインターフェイス構築には、~ViewController.xibを使用します。


・プロジェクト名について

テンプレートを選択してプロジェクト名を入力する際に『Hello World』とスペースを含んだ入力をすると、フォルダ名はそのまま『Hello World』となりますが、ソースやリソースなどのファイル名は『Hello_World』とスペースの代わりにLow Lineが入ります。

差異が気になる人は、スペースを使わずに『HelloWorld』とするといいかもです。


●背景とラベルの設定

まずビューの画面を作成します。

Resources下の『Hello_WorldViewController.xib』をダブルクリックして、Interface Builderで開きます。

624

背景がグレイなのでDefaultの白にします。

625

LibraryウィンドウからViewウィンドウにLabelをドラッグ&ドロップし、Textに『Hello, World!』と入力、サイズや位置を適当に調整して保存します。

626


●アプリケーションアイコンの変更

アプリケーションのアイコンを設定しない状態では、ホーム画面でのアプリケーションアイコンはただの白い四角になります。

628

アプリケーションアイコンは57x57ピクセルのPNG形式で、名前をicon.pngとしてResourcesに登録するだけで反映されます。

ダウンロードしたサンプルコードの『Beginning iPhone Development Projects Oct 12 2009』フォルダ下の『02 Hello World』フォルダから、アイコンの画像ファイルicon.pngを自身のプロジェクトフォルダにコピーし、Resourcesに追加します。

627

629


●バンドル識別子の設定

バンドル識別子は、アプリケーションバンドル(アプリケーションの実体はフォルダ内にコードやリソースファイルを含んだフォルダで、それをひとまとまりとした形をバンドルと呼びます)をシステムが他のアプリケーションと区別するのに必要なもので、App Store登録時には必須且つ他と被らないような固有の名前を付ける必要があります。

本書ではHello_World-Info.plistの『Bundle identifier』KeyのValue値を編集して、バンドル識別子(バンドルID)の設定を行っていますが、ここでは端折ります。

(あまり詳しくない詳細は『Xcodeのプロパティリストエディタ』を参照してください)

『ビルドと実行』を行うと設定したビューが表示されます。

607



参考文献

はじめてのiPhone3プログラミングはじめてのiPhone3プログラミング
(2009/12/17)
Dave Mark、Jeff LaMarche 他

商品詳細を見る






Bose QuietComfort 20
0 Comments
Leave a comment
管理者にだけ表示を許可する
Top
0 Trackbacks
Top
Calendar
08 | 2017/09 | 10
Sun Mon Tue Wed Thu Fri Sat
- - - - - 1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
Recent Articles
iTunes


Swift
Categories
Tips
Profile

水月杏香

Author:水月杏香
永遠の初心者プログラマ。

Wish List
WACOM


ARC
Technical Q&A
情報プロパティリストキー
Start Developing iOS Apps Today
BOSE

Bose QuietComfort 20
Reference
NSApplicationDelegateプロトコル
NSArrayクラス
NSAutoreleasePoolクラス
NSBundleクラス
NSBundle UIKit追加分
NSCalendarクラス
NSCoderクラス
NSCodingプロトコル
NSCopyingプロトコル
NSDataクラス
NSDateクラス
NSDateFormatterクラス
NSDictionaryクラス
NSEntityDescriptionクラス
NSEnumeratorクラス
NSErrorクラス
NSExceptionクラス
NSFetchRequestクラス
NSFileHandleクラス
NSFileManagerクラス
NSIndexPathクラス
NSIndexPath UIKit追加分
NSKeyedArchiverクラス
NSKeyedUnarchiverクラス
NSKeyValueCodingプロトコル
NSLocaleクラス
NSManagedObjectクラス
NSManagedObjectContextクラス
NSManagedObjectModelクラス
NSMutableArrayクラス
NSMutableCopyingプロトコル
NSMutableDictionaryクラス
NSMutableSetクラス
NSNotificationクラス
NSNotificationCenterクラス
NSNullクラス
NSNumberクラス
NSObjectクラス
NSObject UIKit追加分
NSObjectプロトコル
NSPersistentStoreクラス
NSPersistentStoreCoordinatorクラス
NSPredicateクラス
NSPropertyListSerializationクラス
NSRunLoopクラス
NSSetクラス
NSStringクラス
NSString UIKit追加分
NSTimerクラス
NSTimeZoneクラス
NSURLクラス
NSURLProtectionSpaceクラス
NSURLRequestクラス
NSUserDefaultsクラス
NSValueクラス

UIActionSheetクラス
UIActionSheetDelegateプロトコル
UIActivityIndicatorViewクラス
UIAlertViewクラス
UIAlertViewDelegateプロトコル
UIApplicationクラス
UIApplicationDelegateプロトコル
UIBarButtonItemクラス
UIBarItemクラス
UIButtonクラス
UIColorクラス
UIControlクラス
UIDatePickerクラス
UIDeviceクラス
UIEventクラス
UIFontクラス
UIGestureRecognizerクラス
UIImageクラス
UIImageViewクラス
UIKit Function
UILabelクラス
UINavigationControllerクラス
UINavigationItemクラス
UIPickerViewクラス
UIPickerViewDataSourceプロトコル
UIPickerViewDelegateプロトコル
UIPinchGestureRecognizerクラス
UIResponderクラス
UIScreenクラス
UIScrollViewクラス
UISearchBarクラス
UISearchBarDelegateプロトコル
UISegmentedControlクラス
UISliderクラス
UISwipeGestureRecognizerクラス
UISwitchクラス
UITableViewクラス
UITableViewCellクラス
UITableViewControllerクラス
UITableViewDataSourceプロトコル
UITableViewDelegateプロトコル
UITapGestureRecognizerクラス
UITextFieldクラス
UITextFieldDelegateプロトコル
UITextInputTraitsプロトコル
UITextViewクラス
UITextViewDelegateプロトコル
UIToolbarクラス
UITouchクラス
UIViewクラス
UIViewControllerクラス
UIWebViewクラス
UIWebViewDelegateプロトコル
UIWindowクラス

AVAudioPlayerクラス
AVAudioPlayerDelegateプロトコル

CADisplayLinkクラス
CAEAGLLayerクラス
CALayerクラス

CGAffineTransform
CGBitmapContext
CGColor
CGColorSpace
CGContext
CGGeometry
CGImage
CGPath

EAGLContextクラス
EAGLDrawableプロトコル

Foundation Constants
Foundation Data Types
Foundation Functions

MPMediaItemクラス
MPMediaItemArtworkクラス
MPMediaPlaylistクラス
MPMediaPropertyPredicateクラス
MPMediaQueryクラス
MPMusicPlayerControllerクラス

Randomization Services

System Sound Services
Amazon


OpenGL ES
SQLite
Monthly Archives
Recent Comments
Recent TrackBacks
RSS Link
Visitors
QR Code
QR