Start Developing iOS Apps Today(sup.8)〜アプリ設計の注意

2012. 12. 30
iOSアプリの開発に不慣れな場合、アプリ開発の行程の開始は不思議に思うかもしれません。
アプリに向けて最初のアイディアを考案したら、アプリに実装するためのアクション計画にアイディアを反映させる必要があります。
設計の観点から、アイディアを実現するために最善となる行動の行程について、いくつかの高レベルな決定を行う必要があります。
それからアプリ開発を勧めることができます。

iOSアプリケーションプログラミングガイド』には、この記事で言及している多くの概念、アーキテクチャ、そして技術の詳細が説明されています。



●初期設計を行う

アプリの設計には多くの方法がありますが、最良のアプローチの多くはコードの記述と関係ありません。
優秀なアプリは優秀なアイディアから始まり、それからより完全な機能を備えた製品の説明に展開します。
設計の早い段階では、貴方がアプリで何を行いたいのかを正しく理解するのに役立ちます。
貴方のアイディアを実装するために必要となる、高レベルな機能の設定を書き留めます。
ユーザが必要と思われるものに基づいて、それらの機能に優先順位を付けます。
その機能を理解し、貴方の目標を達成するために使用することができる可能性を探るため、iOS自身を少し研究します。
貴方のアプリがどのように見えるかを視覚化するために、大まかなインターフェイスの設計を紙の上にいくつかスケッチします。

初期設計の目標は、貴方のアプリについていくつかの非常に重要な質問に答えることです。
機能の設定とインターフェイスの大まかなデザインは、コードを書き始めた後に必要となるものについて考えるのに役立ちます。
いくつかの時点では、データオブジェクトのセットに貴方のアプリによって表示される情報を翻訳する必要があります。
同様に貴方のアプリの外観は、ユーザインターフェイスのコードを実装する際にしなければならない選択に圧倒的な影響力を持っています。
(コンピュータ上よりもむしろ)紙の上で初期設計を行うと、制限されず容易に答えを導くための自由度が得られます。

もちろん最も重要なことは、設計を始める前に『iOSヒューマンインターフェイスガイドライン』を読むことです。
このドキュメントは、初期設計を行うためのいくつかの戦略を説明しています。
またiOSで正しくアプリを生成する方法についてのヒントやガイダンスを提供しています。

iOS技術の概要』は、iOSの機能と、それらの機能をどのように使用して設計目標を達成するかについて説明しています。



●アクション計画に初期設計を翻訳

iOSは全てのアプリがモデル-ビュー-コントローラデザインパターンを使用して構築されていることを前提にしています。
したがって、この目的の達成に向けて取ることができる最初の行程は、アプリの一部であるデータとビューのためのアプローチを選択することです。

  • データモデルのための基本的なアプローチの選択

    • 既存のデータモデルのコード
      既にCベースの言語で記述されたデータモデルのコードを持っている場合、iOSアプリに直接コードを統合することができます。
      iOSアプリはObjective-Cで記述されているので、他のCベースの言語で記述されたコードが問題無く動作します。
      もちろんObjective-Cではない任意のコードのために、Objective-Cのラッパーで記述する利点もあります。

    • カスタムオブジェクトのデータモデル
      通常カスタムオブジェクトは、データの管理と一貫性を確保するために必要なビジネスロジックを伴う(文字列や数値、日付、URL等の)いくつかの単純なデータの組み合わせです。
      カスタムオブジェクトは、スカラー値と他のオブジェクトへのポインタの組み合わせを格納することができます。
      例えばFoundationフレームワークは、多くの単純なデータ型と他のオブジェクトのコレクションを格納するためのクラスを定義しています。
      これらのクラスは独自のカスタムオブジェクトを定義するよりも遥かに簡単です。

    • 構造化されたデータモデル
      貴方のデータが高度に構造化されている(つまりデータベース内のストレージを利用できる)場合、データの格納にCore Data(またはSQLite)を使用します。
      Core Dataは、構造化されたデータの管理に単純なオブジェクト指向のモデルを提供します。
      またアンドゥやiCloudのようないくつかの高度な機能のサポートを組み込みで提供しています。
      (SQLiteファイルはiCloudと連携して使用することはできません。)

  • ドキュメントのサポートを必要とするかどうかの決定

    ドキュメントの仕事はアプリのメモリ内のデータモデルオブジェクトを管理し、ディスク上の対応するファイル(またはファイルのセット)のデータのストレージを調整することです。
    ドキュメントは通常ユーザが生成したファイルを意味しますが、アプリがユーザ向けではないファイルの管理にドキュメントを使用することもできます。
    ドキュメントを使用する大きな利点の1つは、UIDocumentクラスがiCloudとローカルファイルシステムとの相互通信をとても簡単に作成するということです。
    コンテンツの格納にCore Dataを使用するアプリでは、UIManagedDocumentクラスが同様のサポートを提供します。

  • ユーザインターフェイスのためのアプローチの選択

    • 構成要素アプローチ
      ユーザインターフェイスを生成する最も簡単な方法は、既存のビューオブジェクトを使用して組み立てることです。
      ビューはテーブルやボタン、テキストフィールドなどの視覚的要素を表します。
      多くのビューはそのまま使用しますが、貴方のニーズを満たすために必要に応じて標準のビューの外観や動作をカスタマイズすることもできます。
      またカスタムビューを使用して新しい視覚的要素を実装し、貴方のインターフェイスにそれらのビューと標準のビューを自由に混在させることもできます。
      ビューの利点は一貫したユーザ体験を提供し、迅速かつ比較的少ないコードで複雑なインターフェイスを定義できることです。

    • OpenGL ESベースのアプローチ
      貴方のアプリが頻繁な画面の更新または精巧なレンダリングを必要とする場合は、おそらくOpenGL ESを使用して直接コンテンツを描画する必要があります。
      OpenGL ESの主な用途は、可能な限り最高のパフォーマンスを必要とするゲームや、精巧なグラフィックスに大きく依存するアプリです。


●アプリ制作行程の開始

アクション計画を考案した後は、コーディングを開始する時間です。
iOSアプリの記述に不慣れな場合、開発用に提供されている最初のXcodeのテンプレートを調べるために、時間をかけるのは良いことです。
これらのテンプレートは貴方の作業を大幅に簡素化し、数分でアプリの起動と実行を可能にします。
また、これらのテンプレートは貴方の特有のニーズをより正確にサポートするために、貴方の初期プロジェクトをカスタマイズすることができます。
そのためXcodeプロジェクトを生成する場合には、以下の質問に対する答えを既に持っている必要があります。

  • 貴方のアプリの基本的なインターフェイスのスタイルは何ですか?
    アプリの種類が異なれば、必要となる初期のビューやビューコントローラの設定も異なります。
    どのようなユーザインターフェイスの構成を計画しているかを認識することで、貴方のニーズに最も適した初期のプロジェクトテンプレートを選択することができます。
    ユーザインターフェイスは後からいつでも変更することができますが、最初に最も適切なテンプレートを選択することで、プロジェクトを遥かに容易に開始することができます。

  • ユニバーサルアプリ、あるいはiPadまたはiPhoneのいずれかを特定のターゲットとして作成しますか?
    ユニバーサルアプリを作成では、iPadとiPhone用にビューとビューコントローラで異なる設定し、実行時に適切な設定を動的に選択する指定を行う必要があります。
    ユニバーサルアプリはより多くのiOSデバイスをサポートするため好ましいですが、各プラットフォーム用により良いコード考慮する必要があります。

  • 貴方のアプリはストーリーボードを使用しますか?
    ストーリーボードはユーザインターフェイスのビューとビューコントローラの両方、およびそれらの間の遷移を表示することによって、設計行程を簡素化します。
    ストーリーボードはiOS 5以降でサポートされ、新規プロジェクトではデフォルトで有効になっています。
    それより前のiOSバージョンでアプリを実行する必要がある場合は、ストーリーボードを使用することができず、nibファイルを継続して使用する必要があります。

  • データモデルにCore Dataを使用しますか?
    アプリの種類によっては構造化されたデータモデルをそのまま使用する方が向いていますが、Core Dataを使用するための理想的な候補になる場合もあります。

Xcodeをインストールした後、貴方のiOS開発チームを構成し、Xcodeでアプリのプロジェクトを生成して、アプリの開発を始めることができます。
以下のアプリ開発の段階は共通しています。

  1. アプリの主要なコードの記述を開始

    新規アプリでは、おそらく最初にアプリのデータモデルに関連付けされたクラスの生成から始まります。
    通常これらのクラスは、アプリの他の部分に依存すること無く、最初に取り組むことができるはずです。
    またメインのストーリーボードあるいはnibファイルにビューを追加することによって、ユーザインターフェイスの設計に思案を巡らせ始める場合もあります。
    またこれらのビューから、インターフェイスに関連付けされた変化に応答する必要があるコードの場所を識別を始めることもできます。
    貴方のアプリがiCloudをサポートする場合、早い段階で貴方のクラスにiCloudのサポートを組み込む必要があります。

  2. アプリの状態変化のサポートを追加

    iOSでは、アプリの状態はその時に何が実行できるかによって決定されます。
    アプリの状態は貴方のアプリの高レベルのオブジェクトによって管理されますが、同様に多くの他のオブジェクトに影響を及ぼす可能性もあり、したがって現在のアプリの状態が貴方のデータモデルとビューコードにどのような影響を及ぼすかを検討し、適切にコードを更新する必要があります。

  3. アプリをサポートするために必要なリソースの生成

    App Storeに提出するアプリは、全体的なユーザ体験をより良いものにするために、アイコンや起動画像などの特定のリソースを持つことを期待されています。
    また適切に組み込まれたアプリはコードを維持するために、操作しているコードのデータから、多用しているリソースファイルを分離しています。
    この組み込み方法はアプリのローカライズをはるかに簡単に行うことができ、外観の微調整や、任意のコードを書き換えること無く他のタスクを実行します。

  4. 必要に応じて、適切なアプリ固有の動作をアプリに実装

    アプリの起動やシステムとの相互通信の方法を変更するには、多くの方法があります。
    例えば特定の機能のためにローカル通知を実装することができます。

  5. 唯一のアプリを作成する高度な機能の追加

    iOSにはマルチメディアの管理や高度なレンダリング、ゲームコンテンツ、地図、連絡先、位置追跡など、他にも多くの高度な機能を含むフレームワークが大量にあります。
    iOS技術の概要』では、貴方のアプリに組み込むことができるフレームワークや機能の概要を説明しています。

  6. アプリのためのいくつかの基本的なパフォーマンスチューニング

    全てのiOSアプリは可能な限り最高のパフォーマンスを得るためにチューニングする必要があります
    チューニングされたアプリは高速で実行できるだけではなく、メモリやバッテリ寿命などのシステムリソースをより効率的に使用します。

  7. 反復適用

    アプリ開発は反復的な行程です。
    新しい機能を追加する場合、既存のコードの調整に、前述の行程のいくつか、あるいは全てを再検討する必要があります。



参考文献

Apple/Start Developing iOS Apps Today

Apple/Design Your App with Care

0 CommentsPosted in 資料





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