イマサラナガラで恐縮なのですが。
俺、IOSのプログラム殆ど知らねぇや( ゚д゚ )
今までC++で9、8割書いていたのでほぼ知らない。
ネイティブのみでかけぇい! と言われたら即日本古来より伝われし伝説の存在、土下座をするハメになりそうなので、
ココらへんでいっちょ様々なリファレンスを読んでいこうかなと思います。
※此処から先はただのメモ書きになります。
僕が特別気になったことのみを抜粋して書いていく(`・ω・´)
興味ない方は今すぐパソコン or 携帯をぶっ壊しましょう!
まずはIOSのプログラミングってなに? って疑問から解消するためにも
初歩のリファレンスをぬるりと読んでいく。
日本語に訳してくれた勇士に感謝を述べますm(_ _)m
===========【 IOS テクノロジーの概要 】===========
IOSは、iPhone, ipod touch, ipadで稼働する物全てを管理するシステムです。
IOS SDK には、独自のアプリケーション開発に必要なツールが含まれています。
フレームワークとObjective-c言語で構築され、IOS上で実行されます。
※フレームワークとは
開発に必要なライブラリや画像等を一纏めに持っているもの。
必要なライブラリがあった場合、それをまとめているフレームワークを読み込む。
◎IOSのアーキテクチャ
基本的に、IOSはCPU、GPU、メモリ、カメラ等のハードウェアとアプリケーションの仲介役を担っています。
開発者は基本的にハードウェアと直接やり取りしません。
代わりにIOSから提供された機能を介してやり取りするので、安全で、かつデバイスの能力が変わっても気にすることなくアプリケーションを簡単に作成できます。
IOSは図1-2に示すようなレイヤの塊でアプリを表現します。

上位レベルのフレームワークと、下位レベルのフレームワークがあり、開発者はできるだけ上位レベルのフレームワークを使用して開発するべきです。
上位レベルの方が簡単に開発できるようになっており、安全です。記述するコード量も減ります。
下位レベルの方を利用して開発もできます。こちらの方しか公開されていないフレームワークもあり、柔軟性もあります。しかし、多少難解になります。
各レイヤのテクノロジーとフレームワークは後で説明します。
◎IOS SDKの構成要素
・XCode - コードの編集、コンパイル、実行およびデバッグを行う総合開発環境です。
・IOSシュミレーター - Mac上でiPhoneアプリをテストできます。
・IOS Developer Library - IOSのライブラリや開発に関するヘルプを纏めた文書です。
シュミレーターでアプリのテストはできますが、加速度センサーやGPS等は実機を利用してデバッグしなければなりません。
実機でテストしながら開発するにはAppleの有料IOSデベロッパプログラムに参加しなければなりません【 (URL) IOS Dev Center 】の IOS Developer Program を参照してください。
IOS SDK のインストール方法、およびアプリ制作のための使用方法については【 (URL) IOS App Developer Workflow Guide 】を参照してください。
◎Developer Libraryの使い方
IOS Developer Library には、サンプルコード、チュートリアル、ライブラリに関するヘルプが含まれています。
※特にサンプルコードは眺めるだけでも指南代わりになるので見るべし!
入門書から下位レベルの情報まで様々あります。
起動方法
1 : 【 (URL)Apple Developer Webサイト 】にアクセス。
2 : XCode の 「ヘルプ」 -> 「Developer Documentation 」 を選びます。
この中から調べたい情報を探します。
ドキュメントと素早く検索できる Quick Help ウィンドウの使い方の詳細については【( URL)Xcode4 User Guide 】を参照してください。
◎ Cocoa Touch レイヤ
Cocoa Touchには、アプリを作成するための主要なフレームワークが含まれています。
基本的な機能から、タッチイベントやプッシュ通知機能、上位レベルの多くの機能を提供しています。
開発者はまずはこのレイヤのテクノロジーを調べるべきです。
----- ストーリーボード -----
IOS5で導入されたアプリを視覚的に設計する方法です。
以前はnibファイルというもので代わりに設計できていましたが、こちらは1つのシーンに対し1つ作成しなければなりませんでした。
しかしストーリーボードは全てのシーンを1つで管理、開発することが可能になりました。
ストーリーボードで重要なことは、画面遷移が視覚的、容易に開発できることです。
プログラム上からはUIKitフレームワークを使用しストーリーボードにアクセスできます。
【 (URL) XCode 4 User Guide 】を、参照してください。
プログラム上からストーリーボードにアクセスする方法については、
【 (URL) UIStoryboard Class Reference 】を参照してください。
----- Gesture Recognizer -----
アプリのViewに付加するオブジェクトで、スワイプや拡大縮小のタッチの動きを感知して指定した関数を実行してくれます。
これがなければ複雑なタッチの動きを開発者自身が検出するプログラムを書かなければなりません。
詳細については【(URL)Event Handling Guide for IOS 】を参照してください。
----- ピアツーピアサービス -----
BlueTooth経由でピアツーピア接続を提供します。
※ピアツーピア : 端末同士をネットワークで接続してデータを送受信する通信方式。
直接相手と繋ぐのでオンラインゲームが可能になる。
ファイル共有などが有名。
【(URL)Game Kit Programming Guide 】を参照してください。
----- 標準システムView Controller -----
Cocoa Touchレイヤのフレームワークには様々な機能に応じた標準のインターフェイスが提供されています。
以下のいずれかを実行する場合は、対応するView Controller を使用すると開発しやすいです。
・連絡先情報の表示または編集 - Address Book UI フレームワークの View Controller
・カレンダーイベントの作成または編集 - Event Kit UI フレームワークのView Controller
・電子メールまたはSMSメッセージの作成 - Message UI フレームワークの View Controller
・ファイルの内容を開く、またはプレビューする - UIKitフレームワークの UIDocumentIntractionControllerクラス
・写真を撮る、またはユーザのフォトライブラリから写真を選ぶ - UIKitフレームワークの UIImagePickerControllerクラス
・ビデオクリップの撮影 - UIKitフレームワークのUIImagePickerController クラス
【(URL) View Controller Programming Guide for IOS 】を参照してください。
特定のViewControllerについては、該当するフレームワークのリファレンスを参照してください。
◎ Cocoa Touch フレームワーク
以下ではCocoa Touchレイヤのフレームワークおよび、機能を説明します
----- Address Book UIフレームワーク -----
新規の連絡先を作成したり、既存の連絡先を編集、選択できます。
【(URL)Address Book Programming Guide for IOS】及び、
【(URL) Address Book UI Framework Reference for IOS】を参照してください。
----- Event Kit UIフレームワーク -----
カレンダー関連の編集及び表示を簡易に行えます。
【(URL)Event Kit UI Framework Reference】を参照してください。
及び【(URL)カレンダーとリマインダーのプログラミングガイド】を参照してください。
----- Game Kitフレームワーク -----
アプリにピアツーピア通信機能を追加できます。
【(URL)Game Kit Programming Guide】 及び、【(URL)Game Kit Framework Reference 】を参照してください。
----- iAdフレームワーク -----
アプリに広告を配信できます。
広告のロードと表示、タッチしたときの操作全てを自動的に処理します。
【(URL)iAd Programming Guide 】を参照してください。
----- Map Kitフレームワーク -----
スクロール可能なマップインターフェイスをアプリに組み込めます。
【(URL)Location Awareness Programming Guide 】を参照してください。
----- Message UIフレームワーク -----
メールの送信と受信、作成を支援します。
【(URL)Message UI Framework Reference】を参照してください。
----- Twitterフレームワーク -----
ツイッターを編集、送信する機能を追加できます。
【(URL)Twitter Framework Reference 】を参照してください。
----- UIKitフレームワーク -----
IOSにグラフィックなイベント駆動型( タッチがあった時、加速度センサが反応した時などに指定したイベントを実行する )アプリを提供します。
アプリに含まれる機能のほとんどをこいつが提供しています。
他にもデバイス固有機能である、
・加速度センサ ・内蔵カメラ ・フォトライブラリ ・デバイス名およびモデル情報
・バッテリー状態情報 ・近接センサ ・接続されたヘッドセットからのリモートコントロール情報
なども管理している。
ここをまず見て機能を調べたらいいと思います。
【(URL) UIKit Framework Reference 】を参照してください。
◎Media レイヤ
グラフィックス、オーディオ、及びビデオのテクノロジーが含まれています。
見た目もサウンドも素晴らしく簡単に作成できます。
----- グラフィックステクノロジー -----
最も簡単で綺麗に出す方法は予め描画済みの画像をViewに貼り付けておいてそれをIOSに管理、描画させることですが、拡張性もなく大量のアニメーションに対して不十分でゲームには余り向きません。
そのような場合に以下のテクノロジーを使用できます。
・CoreGraphics( 別名Quartz ) - IOS独自の描画サポート。大体はこれで解決する!
・CoreAnimation - Viewやコンテンツのアニメ-ションサポート
・CoreImage - ビデオ画像や静止画像を操作するためのサポート
・OpenGL ESおよび GLKit - GPUを使用して高速な2D, 3Dを描画できます。
・CoreText - テキストのレイアウトと描画を処理します。
・Image I/O - ほとんどの画像形式を読み込み、書き込みを行える
・Assets Library - フォトライブラリの写真やビデオにアクセスする手段をサポート
グラフィック関連のフレームワークに関する詳細については、後述します。
----- オーディオテクノロジー -----
高品質オーディオの再生、録音機能、バイブレーションのトリガ機能が含まれています。
以下は上位フレームワークから下位フレームワークの順に並んでいます。
・Media Playerフレームワーク - iTunesに簡単にアクセスでき、再生を支援します。
・AV Foundationフレームワーク - オーディオの再生と録音を管理します。後はカメラ等も。
AR等のリアルタイム画像処理アプリを作成したい場合はこれを調べるといいです。
【(URL)AV Foundation】
・OpenAL - 定位オーディオ( 左右だけではなく奥行き、方向も感じられる )を提供するクロスプラットフォーム( 様々なOSで開発できる )対応のインターフェイスを提供します。
・Core Audioフレームワーク - 再生と録音をシンプルで洗練したインターフェイス。
警告音、バイブレーション、ストリーミングの再生の管理を行えます。
IOSのオーディオテクノロジーは以下のフォーマットに対応しています。
・AAC ・Apple Lossless( ALAC ) ・A-law ・IMA/ADPCA(IMA4) ・リニアPCM
・u-law ・DVI/Intel IMA ADPCM ・Microsoft GSM 6.10 ・AES3-2003
----- ビデオテクノロジー -----
アプリからムービーファイルを再生する場合のテクノロジーです。
ビデオをキャプチャしたり、アプリにビデオを組み込んだりできます。
こちらも上位から下位に並んでおり、容易に機能を対応させるためにもできるだけ上位を使用するべきです。
・UIKitのUIImagePickerControllerクラス - ビデオ録画のための標準インターフェイスを提供します。
・Media Playerフレームワーク - アプリから全画面 or 一部にビデオを再生するための簡単に使えるインターフェイスを提供します。
・AV Foundation - 再生とキャプチャを管理します。
・Core Media - より下位レベルに近いデータ型の操作を提供します。
IOSでは .mov, .mp4, .m4v, .3gp 形式に対応しており、以下の圧縮規格ファイルの再生を支援します。
・H-264ビデオ ・MPEG-4 ・先ほど紹介した複数のオーディオフォーマット
UIImagePickerController クラスの使い方については、
【 (URL)Camera Programming Topics for IOS】を参照してください。
◎Mediaレイヤのフレームワーク
Mediaレイヤのフレームワークが提供するサービスについて説明します。
------ Assert Libraryフレームワーク ------
デバイスから写真やビデオを取得できます。ユーザーが保存したフォトアルバムに含まれている写真やビデオにアクセスできます。
【(URL)Assets Library Framework Reference】を参照してください。
------ AV Foundationフレームワーク ------
オーディオコンテンツを再生するためのクラスが含まれます。
ファイルやメモリから任意の長さのサウンドを再生できたり、複数の同時再生、エフェクトを制御できます。録音も可能です。
・メディアの管理、編集 ・ムービーのキャプチャ ・ムービーの再生 ・トラックの管理
も可能です。
メディアアイテムの操作と管理を上位レベルのフレームワークよりはるかに洗練された方法で支援します。
【(URL)AV Foundation Framework Reference】を参照してください。
------ Core Audio フレームワーク ------
アプリ内でオーディオの生成、録音、ミキシング、再生を行うことができます。
またバイブレーション機能をトリガできます。

【(URL)Core Audio Overview】を参照してください。
Audio Tookboxフレームワークは【(URL)Audio Queue Services Programming Guide】及び、【(URL)Audio Toolbox Framework Reference】を参照してください。
------ Core Graphics フレームワーク ------
Quartz 2D描画APIのインターフェイスが含まれています。
Quartzは、MacOSXで使用されているものと同じ描画エンジンです。
ジオメトリの描画、アンチエイリアス化、グラデーション、画像、色、座標空間の変換、PDFの作成、表示、解析をサポートします。
ゲームアプリもこれを使用して開発できます。
【(URL)Quartz 2D Programming Guide】及び
【(URL)Core Graphics Framework Reference 】を参照してください。
------ Core Image フレームワーク ------
ビデオや静止画像を操作します。顔面認識、特徴認識も可能です。
CPUやGPUを使い、高速で処理をします。
【(URL)Core Image Reference Collection】を参照してください。
------ Core MIDI フレームワーク ------
キーボードやシンセサイザなどのMIDIデバイスと通信する機能を提供します。
MIDIメッセージの送受信、Dockコネクタやネットワークを駆使してデバイスに接続されたMIDI機器とやり取りをします
※MIDI(ミディ)とは電子機器をコントロールして音を鳴らせたりするもの。
【(URL)Core MIDI Framework Reference 】を参照してください。
------ Core Test フレームワーク ------
テキストのレイアウトとフォントの処理を行う機能を提供します。
画面上のテキストの配置管理や様々なフォントや描画設定も行えます。
単純な文字入力はUIKitフレームワークのテキストクラスで十分ですが、ワードアプリなど高度なテキスト処理を必要ならばご使用ください。
【(URL)Core Text Programming Guide】及び
【(URL)Core Text Reference Collection 】を参照してください。
------ Image I/O フレームワーク ------
画像データ、画像メタデータの読み込みと書き込みを提供します。
Core Graphicsデータ型、及びCore Graphics関数を使用し、IOSで利用できる標準的な種類の画像を処理します。
【(URL)Image I/O Reference Collection】を参照してください。
------ GLKit フレームワーク ------
OpenGL ES2.0アプリのサポートライブラリです。
・GLKViewクラス、GLKViewConllectionクラス - OpenGL ESの生成、描画等の標準的な実装を代わりに引き受けます。
開発者はここに処理を書くだけで済みます。
・GLKTextureLoaderクラス - 画像変換、読み込みの処理を行います。
・GLKフレームワーク - ベクトル、行列、四元数等の関数、オブジェクトが用意されています。
・GLK...Effect - よく使用されるシェーダーを記述してあるファイルです。
【(URL)GLKit Framework Reference】を参照してください。
------ Media Player フレームワーク ------
オーディオ、ビデオを再生するための機能を提供します。
iTunes音楽ライブラリにアクセスして様々な機能を行えます。
【(URL)Media Player FrameWork Reference】を参照してください。
iTunesライブラリにアクセスする方法の詳細については
【(URL)iPod Library Access Programming Guide】を参照してください。
------ OpenAL フレームワーク ------
定位オーディオを提供できます。
これで高品質で高性能のオーディオを実現できます。
------ OpenGL ESフレームワーク ------
2D、及び3Dを高速に描画するツールが用意されています。
高品質なシェーダーも使用可能です。
【(URL)OpenGL ES Programming Guide for IOS】及び、
【(URL)OpenGL ES Framework Reference 】を参照してください。
------ Quartz Coreフレームワーク ------
CoreAnimationインターフェイスが含まれています。様々な形式のコンテンツに対して複雑なアニメーションを簡易に実装できます。
【(URL)Core Animation Programming Guide】及び
【(URL)Core Animation Reference Collection】を参照してください。
◎Core Servicesレイヤ
すべてのアプリケーションで使用する基本的なサービスが含まれています。
直接使用せずとも、ほとんどの部品はこの上に構築されています。
------ iCloudストレージ ------
アプリは文章やデータをオンラインストレージに上げることが出来るようになります。
これにより、他のPCやデバイスからでもデータにアクセス可能です。
他にも環境設定など複数のデバイスで共有するデータを置くことにより自動的にデバイスの設定を統一化できたり、設定を保存できたりします。
【(URL)IOS App Programming Guide】を参照してください。

------ 自動参照カウント ------
ARC( Automatic Reference Countingu )はObjective-Cのオブジェクトのメモリ管理を自動的にコンパイラレベルで行う機能です。
ARCがオブジェクトのメモリを自動的に破棄する処理を記述します。
既存のプロジェクトをARCに移行する手順については
【(URL)XCode New Features User Guide】を、またARCそのものについては、
【(URL)Programming With ARC Release Notes】を参照してください。
◎Core Services フレームワーク
Core Servicesの機能を説明します。
------- Accountsフレームワーク -------
ユーザーアカウントにログインするための機能を提供します。
アプリが起動するたびに認証処理が必要な時でも問い合わせをなくせることができます。
Twitterフレームワークと併用することで、Twitterアカウントにアクセスできます。
【(URL)Accounts Framework Reference】を参照してください。
------- Core Dataフレームワーク -------
Model-View-Contorollerアプリのデータ・モデルを管理します。
プログラムでデータ構造を定義する代わりにこれを使用してデータ構造を作成できます。
CoreDaraを通してデータモデルの実態の生成、管理、使用を行われます。
これを使用することにより、必要なコード量を大幅に削減できます。
アプリ開発において、CoreDataの使用をおすすめします。
【(URL)Core Data プログラミングガイド】または
【(URL)Core Data Tutorial for IOS】を参照してください。または
【(URL)Core Data Framework Reference】を参照してください。
------- Core Foundationフレームワーク -------
IOSのデータ管理およびサービス機能を提供します。
・配列 ・バンドル(データに付属) ・文字列管理 ・日付と時刻の管理
・未加工データブロック管理 ・環境設定管理 ・URL及びストリーム操作
・スレッド及び実行ループ ・ポート及びソケット通信
Core FoundationフレームワークはFoundationフレームワークと密接に関係しており、
双方は、どちらの関数でも同じように使用することが可能です。
【(URL)Core Foundation Framework Reference】を参照してください。
------- Core Locationフレームワーク -------
位置と方角の情報をアプリに提供します。
近隣の施設を検索する際にこの情報を利用できます。
磁気センサーでの方角サポート、位置変化を追跡するため携帯電話の基地局を使用する、低消費電力の位置監視サービスのサポートが導入されました。
【(URL)Location Awareness Programming Guide】を参照してください
------- Core Mediaフレームワーク -------
ほとんど使われませんが、オーディオとビデオの作成と表示においてより正確な制御を必要とする開発者に提供されます。
【(URL)Core Media Framework Reference】を参照してください。
------- Event Kitフレームワーク -------
デバイス上のカレンダーにアクセスするためのインターフェイスを提供します。
使用することで、既存のイベントを取得できたり、ユーザーのカレンダーに新規のEventを追加できたりします。アラームを含めることもできます。
【(URL)Event Kit Framework Reference】を参照してください。
Event Kit UIも参照してください。
------- Foundationフレームワーク -------
Core Foundationの機能の多くをObjective-cの形で提供します。
【(URL)Foundation Framework Reference】を参照してください。
◎Core OS レイヤ
他のテクノロジーの土台となる下位レベルの機能が含まれています。
使用していなくてもたいてい他のフレームワークの土台になっています。
セキュリティ、外部のハードウェアアクセサリとの通信を明示的に行う必要がある状況では、このレイヤのフレームワークを使用します。
------ Accelerateフレームワーク ------
DSP(デジタル信号処理)、線形代数、画像処理の計算を実行するためのインターフェイスが含まれています。
【(URL)Accelerate Framework Reference】を参照してください。
------ Core Bluetooth ------
Bluetooth対応アクセサリを活用できます。
Bluetoothの登録、接続/切断処理などできます。
------ External Accessoryフレームワーク ------
接続されているハードウェアアクセサリと通信をします。
デバイスのピンDockコネクタを使用して接続するか、Bluetoothを使用してワイヤレスに接続します。
このフレームワークは接続されている個々のアクセサリについての情報を取得し、通信のための初期化方法を提出します。その後コマンドでアクセサリを直接自由に操作できます。
【(URL)External Accessory Programming Topics】を参照してください。
------ Generic Security Servicesフレームワーク ------
セキュリティ関係の標準的なサービスをアプリに組み込めます。
------ Securityフレームワーク ------
アプリで管理するデータのセキュリティを保証します。
証明書、公開鍵、非公開鍵を管理します。
キーチェーンへの証明書、暗号鍵の保存もサポートします。
【(URL)Security Framework Reference】及び、
【(URL)KeyChain Services Programming】を参照してください。
以上。疲れた
※一部省いております!
最後の方は余り使用しないと踏んだので大幅カットしてます!! 下位レベルの情報を全て知りたい方はpdfを参照くださいm(_ _)m
このpdfはIOSの機能の一覧みたいですな。
ここから自分の欲しい機能を保持しているフレームワークを見つけて、そこを調べていくと...
見た感じなんですが、
取り敢えず UIKit を調べる事。 次に View Controller関係。
ゲームを作成したい方はゲームの内容に合わせて
UIKit → Core Graphics → OpenGL ES + GLKit と調べていくといいのではないかな。
Core Graphics ではどれくらいの速度を得られるのだろうか?
3Dを使わずにゲームを作っていく上で OpenGL ES と変わらない速度を得られるのであれば無理にクロスプラットフォームのOpenGL ESではなく、ネイティブなCore Graphicsを使用したほうがいいと思う。
シェーダみたいな機能は使用できないっぽ。
まぁ、しかしこれだけじゃ意味わからんな(マジで)
取り敢えずまずは UIKit系の中身が半端無く広そうなので、早めに勉強終えて Core Graphics でゲーム作ってみる( `ト´)
OpenGL ES に関してはすでに作ってあるので速度の違いを試してみたい。
しかし・・・・
この記事書くだけで3日かかったんだけど( ゚д゚ )
何やってんだか・・・(´Д`)