iOSアプリケーション開発室(2013年改訂版)
~~最近の主な更新点~~
長らく私がiOSアプリ開発を開始するために、とりあえず資料をかき集めて翻訳しただけの内容でしたが、 ようやく、実開発を経て得た情報を元に大幅に書き換えました。
しかし、内容は相変わらず「無保証」なので、怪しいと思ったら、必ず自己責任で再確認してください。 それが出来ない者はここを読んではいけません。
また、今となってはかなり古い情報のはずですが、残しておきます。
古い部分をばっさり、ほぼ全て削除しました
説明順を一部入れ替えました
今まで使ったことがなく、今後も使うとは思えない部分を削除します
GCCのObject-Cに関する記述を全て削除し、Xcode/Objective-Cのみに限定しました
Macに関する/Macでのみ有効な記述を基本的に削除し、iOSにより特化しました
UIKitでInterfaceBuilder(IB)で設定出来る項目(プロパティ)について、プログラム中で設定変更することがほとんどないものは、ほぼ全て削除しました
Xcode4.6に合わせました
文字コードをUTF-8に変換しました
ここは何?
ここは、私がiOSアプリケーション開発のために勉強したObjective-C 2.0やCocoa Touch等の情報をまとめた場所です。 Appleの資料を意訳した部分と自作の部分、それに世間にあった資料をまとめた部分が混在しています。
あくまで「自己解釈」なので、世間一般とは異なるかもしれません。 一応実際のアプリ開発を何本かこなした結果によって書き換えましたが、 まだ理解不足で間違っている所もあるでしょう。 これから先も随時修正/追記/変更される可能性はあります。
最先端のiOSの使い方に関する情報を求めにここに来ても無駄です。 正直「どうして他の人はこんなすごい物を作れるのだろう」と関することしきりで、 自分の才能のなさにはほとほとあきれかえっている状態です。
ここを読むには前提として「C言語は習熟している」必要があります。本で読んだ程度ではなく、実開発をかなりこなしたレベルです。 私が基本「Cで考える人」なので、Cの動作に置き換えて理解しようとしている部分が多々あります。
「C言語はマスターしているけどオブジェクト指向言語はさっぱりだ」という人には合っているかと思います。
私のCの書き方は「我流」の部分があり、私が覚える以上Objective-Cにもそれは「継承」していくので、 「普通の書き方とは違う」部分があることを承知おきください。 基本的にこのページは「自分用」ですので、変える気はありません。
なお、
内容については一切保証しません
。「無責任文章」です。 一応、実開発で得た経験や情報を元に全面的に書き換えましたが、 怪しいと思ったら、必ず「自己責任」で再確認してください。 この意味が分からない人は、絶対に読んではいけません。
追加情報は「
うたブログ~情報編
」に掲載してます。 まれにこちらにもフィードバックします。
~~目次~~
Objective-C 2.0の勉強
Cocoa Foundationクラス(等)の勉強
Cocoa Touch UIKitクラス(等)の勉強
プログラミングガイドの勉強
アプリケーション実装の勉強
アプリケーションの販売
その他情報
参考リンク
Objective-C 2.0の勉強
まずは、Objective-Cそのものに関する勉強。または、Cocoa Touch特有だけど、 一般的概念に関する部分の勉強。
基本
メソッドの宣言
クラスの宣言
メソッド実体実装
super
インスタンスの確保/初期化/解放とAutorelease Pool
オブジェクトの所有権
id型よりクラス名 *の方が安全
メンバーの公開範囲
Class型
セレクタ
メソッドのポインタ
カテゴリ
プロトコル
デリゲート
ターゲット-アクション、アウトレット
KVO : Key-Value Observe
プロパティ
列挙子/高速列挙;NSEnumerator
ファイル所有者オブジェクト
モデル・ビュー・コントローラー
例外処理
並行動作制限
とりあえず、Objective-Cは「ソースの見た目」はともかく、言語としての拡張され方はC++に比べ 明らかに美しく、習得しやすいと思う。言語動作や構造的にも興味を引かれる部分が多々ある。
一方、C++はもはや「仕様を覚えること自体に興奮を覚えるフェチ言語」になってきているので覚えようとは思えない。 マイクロソフトですらC#とか作って逃げ出そうとしているくらいだ。
それはともかく、Objective-C習得における課題は、私も含め頭が「C」的な設計をするようになっている人には、 それをオブジェクト指向で設計するようにすることの方であろう。 こればっかりを数をこなして理解していくしかないのかもしれない。
Cocoa Foundationクラスライブラリの勉強
Objective-Cの基本的なところは理解できたと思う。しかし、効率よくプログラムを組む、 もしくはiPad/iPod touch上でユーザーインターフェースを構築するためるためには、 開発環境であるCocoa Touchに存在するクラスライブラリの使い方を覚えていく必要がある。
X68上の開発では、最強のマニュアルプロテクトと言われたXCの「ライブラリマニュアル」を読破・・・ までは必要なくても、必要な機能がどの辺にあるか位は知っていかねばならなかったのと同じである。
細かい仕様は都度仕様書を見ればいいが、だいたいの使い方は把握していかねばならない。
その中でも、まずはハードにあまり依存しないFoundationクラスから勉強する。
なお、クラスの全機能を書けているわけではない。基本形だけで、派生のクラスについても多くは省略してる。 それについてはアップルのドキュメントを見ると言うことで。
(等)とあるのは、実は「クラスでない物」も含まれているからである。まあ、関数であろうが型であろうが、 関係あるものは一緒に勉強。
追記:unichar=unsigned shortである。
NSクラスを使うために
ルートクラス;NSObject
文字列;NSString/NSMutableString
配列;NSArray/NSMutableArray
バイナリデータ;NSData/NSMutableData
辞書;NSDictionary/NSMutableDictionary
数値クラス;NSNumber、範囲構造体:NSMakeRange/NSIntersectionRange、数値型:NSInterger、NSNumberFormatter
型変換;NSValue
ファイル操作;NSFileManager/NSFileHandle
URL操作;NSURL/NSURLConnection/NSURLRequest/NSURLResponse
バンドル;NSBundle、リソースプログラミング(ちょっとだけ)
デフォルト設定;NSUserDefaults
日時;NSDate/NSDateFormatter/NSLocale/NSTimeZone/NSCalender/NSDateComponents
タイマー;NSTimer/NSTimeInterval/NSInvocation/NSMethodSignature
並行動作;NSRunLoop
通知;NSNotification/NSNotificationCenter
エラー処理;NSError
例外処理;NSException
セット(重複排除配列);NSSet/NSMutableSet/NSCountedSet
インデックスパス;NSIndexPath
インデックスセット;NSIndexSet/NSMutableIndexSet
属性付き文字列;NSAttributedString/NSMutableAttributedString
文字列内スキャン;NSScanner/NSCharacterSet
Cocoa Touch UIKitクラス(等)の勉強
次はユーザーインターフェース部分のクラス「UIKit」である。
iOSはv5.0以降を対象とする。
操作用語集
プログラム用語集、もしくは翻訳凡例
画面構成
画面向き
UIKitクラス階層構造
UIViewController
UIView
UIWindow
UIImageView
UIPopoverController
分割表示;UISplitViewController
UINavigationController
UINavigationBar/UINavigationItem
UIControl
UILabel
UIButton
UIBarButtonItem
UISwitch
UISegmentedControl
UISlider
UIPickerView
UIDatePicker
UIWebView
テキスト表示;UITextView
テキスト編集;UITextField
UIImage
UIScrollView
UIActivityIndicatorView
進行度計;UIProgressView
UIPageControl
画像取得・選択;UIImagePickerController
UISearchBar
UITabBar
UITabBarController
UIToolBar
UIAlertView
UIActionSheet
UITableView
UITableViewCell
UITableViewController
UIResponder
UIApplication
UILocalNotification
UIDocumentInteractionController
デバイス情報;UIDevice
画面サイズ;UIScreen
フォント;UIFont
色;UIColor
モーション;CMMotionManager
コンパス;CLLocationManager/CLLocation/CLHeading/CLRegion
地図表示;MKMapView/MKUserLocation/MKUserLocation
地図注釈;MKAnnotationView/MKPinAnnotationView/MKShape
地図オーバーレイ;MKOverlayView
余談だが、アップルの英文仕様書は「非常に」読みにくい。 関係代名詞とか"of"とか"to"とか多すぎ。技術以外の造語(というか俗語?)も多いし。 技術英語というより物語のような感じの言い回しも結構ある。
日本語に直接対応する用語がないこともあるので、それらをよく知る人が意訳してくれなければ、判らない。 英語の技術仕様書はかなり読んだ経験があるが、ここまでわかりにくいのは初めて。
「日本語は曖昧になるから英語で仕様書を作る」などと某P社が言ってたが、 「曖昧かどうかは言語によるのではなく、結局書いた人間の素養というか性格による」というのがよく解った。
プログラミングガイドの勉強
ここは、Foundationクラスや、UIKitを使ったプログラムを組む上で利用するガイド書を意訳して手入れしたものである。
概念中心なので、多少わかりにくいところもあるが、それは「私の訳がつたない」から、だけではない。 たぶん(^_^;)
なお本文中
青字
で書かれている部分は私の「意見」である。
集合
「集合」(collection)
「集合」の概要
配列:順序だった集合
辞書:キーと値の集合
セット:順序立てられてないオブジェクトの集合
インデックスセット: 配列に要素番号を格納すること
インデックスパス:入れ子になった配列を通したパスを格納する
集合のコピー
列挙:集合の要素を横断する
メモリ管理
メモリ管理規則
オブジェクトの所有権と処分
実際のメモリ管理
自動開放プール
アクセサメソッド
オブジェクトコピーの実装
Nibオブジェクトのメモリ管理
文字列
文字列
文字列オブジェクトの生成と変換
フォーマット文字列オブジェクト
文字列フォーマット記述子
ファイルやURLから文字列を読み込んだり書き込んだりする
文字列の検索、比較、ソート
改段落と改行
文字と書記素集団
文字セット
スキャン
ファイルパスの文字列表現
参照
リソースプログラミング(必要な部分のみ)
文字列リソース
国際化プログラミング
概要
国際化とローカライズ
国際化のサポート
言語とロケール指定
国際化のためのガイドライン
現在の言語とロケールを得る
ローカライズのためのNibファイルの準備
文字列リソースのローカライズ化
国際化している他のリソース
参照
アプリケーション内での購入(In App Purchase)の追加仕方
「アプリケーション内での購入」の追加仕方
アプリケーション実装の勉強
アップルの「iPad Programming Guide」には、以下のように書かれていた(ちょっと意訳)。
アプリは高速に起動&終了されることが期待されている
セキュリティ目的アプリケーションはサンドボックス環境で実行する。
サンドボックスは特定用途向けファイルと優先権のための空間を含む。これはユーザーのコンピュータにバックアップされる。
デバイスの他のアプリケーションとの対話は、システムが提供したインターフェースによってだけである。
それぞれのアプリケーションは固有の仮想メモリ空間で走る。ただしそのメモリ空間は実メモリ量によって制約を受け、 ディスクを使ったメモリ待避などはない。
カスタムのプラグインやフレームワークはサポートされない
また、アプリケーション内部については以下のように指示されている。
アプリは全ての方向と回転をサポートしなければならない
アプリは主としてObjective-Cで記述するが、CおよびC++を含んでも良い
iPhoneで使えるクラスはiPadで全て使える(カメラは?)。逆は真ならず
メモリは
retain/releaseモデル
で管理される→ユーザーが手動管理せよと言うこと
アプリは必要に応じて新規のスレッドを生成しても良い。
しかし、ビューの操作と多くのグラフィック処理はメインスレッドで実行しなければならない
iPadヒューマンインターフェースガイドライン
序文
重要な iPad の機能 と特徴
iPhoneアプリケーションから iPad アプリケーションへ
iPad ユーザー 体験ガイドライン
iPad UI 要素ガイドライン
アプリケーションの販売
契約と税金と銀行情報(「iTunes Connect Developer Guide」より)
契約と税金と銀行情報
「アプリ審査基準」(App Store Review Guidelines)
概要
契約条件
機能性
メタデータ、評価とランキング
位置情報
プッシュ通知
Game Center
広告
商標と トレードドレス
メディア内容
ユーザーインターフェース
購買と通貨
かき集めと寄せ集め
デバイスへのダメージ
個人攻撃
暴力
好ましくない内容
プライバシー
ポルノ
宗教、文化と民族性
コンテスト、賞金レース、宝くじと抽選券
慈善団体と寄付金
法的要求
パスブック(Passbook)
生きている文書
その他情報
iPad/iPhoneのアプリケーションアイコンの一覧
コンパイラのビルトインマクロ(定義済み定数)を調べる
NSLog()/printf()をDistribute版に残しておいても良いのか
組み込み機器で開発していた技能はiOS上で役に立つか
参考リンク;今も生きているかどうかは確認していません
iPhoneアプリ開発虎の巻
iPhoneアプリケーション開発入門(cocoa touch,Objective-C関連)まとめ
実際にアプリを作っている方のサイト。わかりやすい。
Cocoa Touchの日本語リファレンス
高専生の方が書いておられるようです(クラブだと思うけど)。がんばって。
iPhoneアプリの作り方(連載)
サルにもできる
メモリリークのチェック仕方
Google Objective-Cスタイルガイド日本語訳
インデントはTAB使うなとか、引数間はスペースであけるなとか書いてあるなぁ。Xcode上ではそうなるのだろうから、とりあえず無視。
releaseじゃなくautorelease使えとか、Appleの指導と反する部分もあるので、あまり意識しない。
Apple純正のObjective-C解説
総本山。「量が莫大」「やたら詳しすぎる」「用語がいきなり」なので障壁は高い。頭が暴走しそう。 PDFもあるので(フォントがちょっとおかしいけど)、iPadに入れて読むのが良い。
Objective-Cに関する長期連載
内容は初心者向けではない、というか熟練者向けだ。いやいや、これはObjective-Cのための記事じゃなくてCocoaを Objective-Cから使うためのものだ。難しいけど、実動作を知ると理解も早まるので時々見る。
The comp.lang.objective-C FAQ listing 日本語訳
Objective-Cの解説書。
Hi-farm blog
の中のiPhoneの記事部分。結構難しいことをやられているので情報源として。
Cocoa APIとか
Mac関連のプログラミング
Repeating Motif Wonderland
Cocoaによるプログラムの実例。
HMDT Logic and Intuition
Cocoaを使った、実践的な処理の仕方が書いてある。全体のプログラムが設計できれば、 細かい処理は全てここで探し出せばいいような気もする。
ただし、基本Mac用もしくはかなり古いiPhone用なので、最新の情報と照らし合わせて確認する必要がある。 少なくとも、最新iOSとは全く違うので注意。
Apple Cocoa Touch(日本語版)
アップルのCocoa Touch紹介サイト。でも紹介だけ。
この部屋の参照回数: