Start Developing iOS Apps Today(3)~アプリ開発の工程

2014. 02. 03
●アプリ開発の工程

アプリの開発作業は困難に思えるかもしれませんが、その工程はいくつかの理解し易い手順に分けることができます。
貴方が最初のアプリを開発するものとして、始めるのに役立ち、正しい方向へ案内する手順を以下に示します。

setup_2x.png



●コンセプトの定義

全ての素晴らしいアプリはコンセプトから始まります。

そのコンセプトを捻出する最良の方法は、貴方のアプリで解決したい問題を熟慮することです。
素晴らしいアプリは単一の明確な問題を解決します。
例えばSettingsアプリは、ユーザがデバイス上の全ての設定を調整をすることができます。
関連したタスクの配置を達成するため、ユーザのために単一のインターフェイスを提供します。

コンセプトを捻出する際に考慮すべき、いくつかの重要な質問を以下に示します。

視聴者は誰か?
アプリのコンテンツや体験は、子供用ゲームか、ToDoリストアプリなのか、または自身が学習するためのアプリとして記述しているのかによって異なります。

アプリの目的は何か?
明確に定義された目的を持つアプリであることが重要です。
目的の定義のひとつは、ユーザがアプリを使用する動機となるものを理解することです。

アプリで解決しようとしている問題は何か?
アプリは複数の異なる問題の解決策を提供しようとするのではなく、単一の問題を解決する必要があります。
貴方のアプリが関連の無い問題を解決しようとしていることが判明した場合、複数のアプリを記述することを検討してください。

どのようなコンテンツを組み込むのか?
コンテンツのタイプは、どのようにアプリがユーザに提示し対話するか検討してください。
アプリで提示するコンテンツのタイプを補完するために、ユーザインターフェイスを設計します。

アプリのコンセプトは完全に洗練したり、アプリの開発開始時に完了している必要はありません。
ですが、どのような方向性で何をする必要があるのかのアイデアを持つために役立ちます。



●ユーザインターフェイスの設計

アプリのコンセプトが決まった後は、優れたユーザインターフェイスを設計することが、成功するアプリを作成するための次の段階です。
ユーザには、できる限り最も簡単な方法でアプリのインターフェイスと対話できるようにする必要があります。
ユーザとのインターフェイスの設計は、効率的かつ明確で理解し易くすることを心掛けます。

おそらくユーザインターフェイスの構築で最も挑戦的なことは、設計にコンセプトを翻訳し、その設計を実装することです。
この工程の簡素化には、ストーリーボードの使用が役立ちます。
ストーリーボードでグラフィカルな環境を使用して、単一の工程でインターフェイスを設計し実装してみます。
構築していく過程で、その構築が正確かを確認し、動作しているかどうかについて即時にフィードバックを取得し、インターフェイスの視覚的な変更を行うことができます。

ストーリーボードでインターフェイスを構築する時は、ビューで作業します。
ビューはユーザにコンテンツを表示します。
チュートリアル:基礎」ではストーリーボードのシーンに単一のビューを使用して、ToDoListアプリのユーザインターフェイスを定義するために始めました。
より複雑なアプリを開発する際には、より多くのシーンやビューのインターフェイスを作成することになります。

チュートリアル:ストーリーボード」では別のコンテンツのタイプを表示するために、いくつかの異なるビューを使用して、ToDoListアプリのユーザインターフェイスを構築して完成させます。
ユーザインターフェイスの設計」でユーザインターフェイスの設計や作成で、ビューやストーリーボードでの作業についての詳細を学びます。



●インタラクションの定義

ユーザインターフェイスは、それを後援するロジック無しではほとんど何もしません。
インターフェイスを作成した後、インターフェイスでのユーザのアクションに応答するコードを記述することによって、表示するものとユーザと対話する方法を定義します。

インターフェイスの動作を追加することについて考え始める前に、iOSアプリはイベント駆動プログラミングを基板にしていることを理解することが重要です。
イベント駆動プログラミングでは、アプリの流れはイベント(システムイベントまたはユーザのアクション)によって決定されます。
ユーザはインターフェイスでアクションを実行することで、アプリ内部のイベントをトリガします。
これらのイベントはアプリのロジックの実行と、そのデータの操作となります。
ユーザのアクションへのアプリの応答は、インターフェイスに戻り反映されます。

ユーザがインターフェイスと対話することができる方法を定義するように、イベント駆動プログラミングの維持を心掛けてください。
なぜなら
開発者というよりユーザにとってはアプリのコードの特定の部分が実行された時の制御であるため、ユーザが実行できるアクションと何がそれらのアクションに応答して発生するかを正確に識別したいでしょう。

貴方はビューコントローラでのイベント駆動ロジックの大部分を定義します。
インタラクションの定義」でビューコントローラの処理についての詳細を学びます。
その後「チュートリアル:ストーリーボード」でToDoListアプリに機能とインタラクティビティを追加するために、これらのコンセプトを適用します。



●動作の実装

ユーザがアプリで実行することができるアクションを定義した後は、コードを記述して動作を実装します。

iOSアプリのコードを記述する時、ほとんどの時間はObjective-Cプログラミング言語での記述に費やされます。
3つ目のモジュールでObjective-Cについての詳細を学びますが、今のところは言語の語彙でいくつかの基本的な知識を持つと役立ちます。

Objective-CはCプログラミング言語の上に構築され、オブジェクト指向の機能と動的ランタイムを提供します。
プリミティブ型(int、floatなど)、構造体、関数、ポインタ、制御フロー構造(while、if...else、for文)など、一般的な要素を全て扱えます。
またstdlib.hやstdio.hで宣言されているような標準Cライブラリのルーチンへもアクセスできます。


オブジェクトはアプリの構成要素

iOSアプリを構築する時、ほとんどの時間はオブジェクトの操作に費やされます。

オブジェクトは関連付けされた動作とデータをパッケージします。
アプリは視覚的インターフェイスの表示や、ユーザの入力への応答、または情報の格納など、特定の問題を解決するために相互通信する相互連結されたオブジェクトの大きなエコシステムとして考えることができます。

貴方はアプリを構築するために、文字列や配列などのデータオブジェクトに加え、ボタンやラベルなどのインターフェイス要素に至るまで、多くの様々な種類のオブジェクトを使用します。


クラスはオブジェクトの青写真

クラスはオブジェクトの特定のタイプに共通する動作や特性を記述しています。

同じ方法で同じ青写真から構築された複数の建物は構造が一致しているように、クラスの全てのインスタンスはそのクラスの他の全てのインスタンスと同じプロパティと動作を共有しています。
貴方は独自のクラスを記述したり、貴方のために定義されたフレームワークのクラスを使用することができます。

貴方は特定のクラスのインスタンスを作成することによってオブジェクトを作ります。
貴方はそれを割り当て、許容可能なデフォルト値で初期化します。
オブジェクトを割り当てる時、オブジェクトのために十分なメモリを確保し、全てのインスタンス変数をゼロに設定します。
初期化はオブジェクトの初期状態(つまりインスタンス変数やプロパティ)を妥当な値に設定し、オブジェクトを返します。
初期化の目的は使用可能なオブジェクトを返すことです。
オブジェクトを使用可能にするには、割り当てと初期化の両方が必要です。

Objective-Cプログラミングの基本的な概念の一つはクラスの継承で、クラスは親クラスから動作を継承するという考えです。
あるクラスが別のクラスから継承している場合、子(またはサブクラス)は親によって定義された全ての動作やプロパティを継承します。
サブクラスは独自の追加動作やプロパティを定義したり、また親の動作をオーバーライドすることができます。
これは既存の動作を複製すること無く、クラスの動作を拡張する機能を提供します。


オブジェクトはメッセージを介して通信する

オブジェクトは実行時に互いにメッセージを送信することによって相互作用します。
Objective-Cの観点では、あるオブジェクトがそのオブジェクトのメソッドを呼び出すことによって、別のオブジェクトにメッセージを送信します。

Objective-Cでは、オブジェクト間でメッセージを送信するにはいくつかの方法がありますが、最も一般的なものは角括弧を使用した基本的な構文です。
クラスPersonのオブジェクトsomePersonがある場合、以下のようにsayHelloメッセージを送信することができます。

[somePerson sayHello];

左辺のsomePersonはメッセージのレシーバです。
右辺のsayHelloメッセージはレシーバを呼び出すメソッド名です。
言い換えると、上記のコード行が実行された時、somePersonはsayHelloメッセージを送信します。

programflow1_2x.png


プロトコルはメッセージの協約を定義する

プロトコルは指定された状況でのオブジェクトの予想される動作のセットを定義します。
プロトコルは任意のクラスの実装を選択することができるプログラムインターフェイスの形式で提供されます。
プロトコルを使用すると、XMLコードの構文解析やオブジェクトのコピーなど、継承によって離れて関連付けされた2つのクラスで特定の目的を達成するために相互に通信することができます。

protocol_2x_2014012613210513d.png

他のクラスに有用な動作を提供することができる任意のクラスは、匿名で動作を販売するためのプログラムインターフェイスを宣言することができます。
他のクラスはプロトコルを採用するか選択することができ、そのメソッドを1つ以上実装して動作を利用します。


データの組み込み

アプリの動作を実装した後、アプリのインターフェイスをサポートするためにデータモデルを作成します。
アプリのデータモデルは、アプリ内のデータを保持する方法を定義します。
データモデルは、オブジェクトの基本的な辞書から複雑なデータベースまで扱えます。

アプリのデータモデルは、アプリのコンテンツと目的を反映する必要があります。
たとえユーザが直接データをやり取りしなくても、インターフェイスとデータ間に明確な相互関係がある必要があります。

良いデータモデルは、アプリのための強固な基盤を作成するのに不可欠です。
それはスケーラブルなアプリの構築や機能性の向上、機能を変更を容易にします。
データの組み込み」で独自のデータモデルの定義についての詳細を学びます。


適切なリソースを使用する

デザインパターンは、アプリの一般的な問題を解決するためのベストプラクティスです。
アプリの残りの部分で、データモデルの構造とその相互作用を定義を支援するためにデザインパターンを使用してください。
貴方がデザインパターンを正しく理解し使用すると、単純で効率的なアプリをより簡単に作成することができます。
デザインパターンの使用」でデザインパターンについての詳細を学びます。

モデルの実装を開始した際と同様に、ゼロから全てを実装する必要は無いことを覚えておいてください。
構築するために既存の機能を提供するフレームワークがいくつかあります。
例えばFoundationフレームワークは(文字列や数字など)基本的なデータ型だけでなく、他のオブジェクトを格納するためのコレクションクラスを表すクラスが含まれています。
可能な場合、機能の再実装を試みる代わりに既存のフレームワーククラス(または独自のアプリ機能の追加するためにサブクラス)を使用することを推奨します。
このようにして効率的かつ機能的で洗練されたアプリを作成することができます。
Foundationでの処理」でFoundationフレームワークの機能についての詳細を学びます。

多くの場合、貴方はデータモデルの一部として独自のカスタムクラスを記述します。
カスタムクラスを記述することで、アプリの内部構造を整理する方法を細かく制御することができます。
カスタムクラスの記述」でカスタムクラスの作成について学びます。


実際のデータを組み込む

データモデルを最初にテストする時、静的または偽のデータを使用したいと思うでしょう。
この方法では、モデルが組み立てられて正確に接続されていることを知っているので、実際のデータを提供することについて心配することはありません。
正確に動作するデータモデルを定義した後、アプリに実際のデータを取り込みます。

このガイドの残りの部分では、これらの手順をより詳細に説明します。
アプリの開発工程を通して不可欠となる概念的な素材を学び、その後チュートリアルで使用していきます。



参考文献

Apple/Start Developing iOS Apps Today

0 CommentsPosted in 資料





Bose SoundSport wireless headphones
0 Comments
Leave a comment
管理者にだけ表示を許可する
Top
0 Trackbacks
Top
Calendar
02 | 2017/03 | 03
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 31 -
Recent Articles
iTunes


Swift
Categories
Tips
WACOM


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
BOSE

Bose SoundSport wireless headphones
ARC
Technical Q&A
情報プロパティリストキー
Start Developing iOS Apps Today
SQLite
OpenGL ES
Amazon


Monthly Archives
Recent Comments
Recent TrackBacks
RSS Link
Profile

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

QR Code
QR
Visitors