iPhone SDK勉強会
iPhone 開発の勉強会をしよう、ということになったので、それ向けにメモを書いてみる。
相手はいろいろな言語を使いこなしている強者なので、あまり懇切丁寧な説明は不要。なので、ざっとXcodeでサンプルプログラムを作ってみて、それを説明していけばよい気がする。しかしその場になるといろいろ忘れそうなので、ざっくり説明することをメモしてみる。
Objective-C
Objective-C はCにオブジェクト指向の考えを追加したもの。Smalltalkに影響を受けている。同様の言語にC++があるが、拡張の仕方が随分違う。
考え方に関しては、Wikipedia 日本語版 英語版が参考になると思われる。OKLabのObjective-C 入門 もよさそう。
Objective-Cでは[]が多用されており、はじめた当初は非常に読みづらかったが、だんだん慣れてくる。
Wikipediaには PosingとかiPhone開発では知らなくても良さそうなことも結構書いてある。説明時にうまく取捨選択する必要はありそうだ。
Apple Developer Connection のページは、ちょっと細かすぎて勉強会向きでは無さそう。
iPhone開発ではObjective-Cを全く使わないわけにはいかないが、しかしほとんどをCで書いたり、C++で書いたりすることは可能。
実際、iPhone Game Projects などの本を読むと、処理速度命のゲームではObjective-Cはなるべく使わないようにしているようだ。
また、マルチプラットフォームで展開するためにObjective-Cを極力避けると言うこともあるようだ。
ただ、パズルゲームなど、それほど処理速度が必要ない場合にはObjective-CというかCocoaを活用して作るという手もある。
Objective-CとC++はかなりちゃんぽんが可能で、本当に混ぜて使うことができる。そのあたりは、Objective-C逆引きハンドブックなどが詳しい。
iPhone & Android クロスプラットフォームアプリケーション開発 もC++を使った開発方法が紹介されている。
個人的にはObjective-CとC++を混ぜて使うとかなり頭が混乱するのでどっちかにしたいが。
iPhone開発をやっていると、自然と
@property (nonatomic, retain) NSString name;
などの記述が出てきてしまうので、ざっくりとこのあたりも説明したい。
プロパティへのnil代入がreleaseの代わりになる理由 が参考になる。
オブジェクトの管理は参照カウンタ(リテインカウンタ)方式で行われるが、これも説明したい。
- init, copy, などで始まるメソッドを使ったら、release をする必要があるが、それ以外の場合はautoreleaseが呼ばれているので、releaeseする必要がない。
- NSArrayなどコレクションクラスに入れたら、その際にカウンタが増やされるので、入れた後にreleaseする
などのことは伝えておこう。まだ全部は読んでいないが、混沌さんのページによくまとまっているように見える。
NSArrayやNSDictionaryなど、よく使うコレクションクラスや NSXMLなどよく使うクラスも説明しておきたい。
iPhone SDKではXMLパーサーはSAXであり、DOMは基本的にサポートされていない(ライブラリを持ってくれば使える)のもどこかで伝えたい。
Xcode
Xcodeで新規プロジェクトを作る場合、テンプレートがいろいろあって、それぞれ何のために存在するのかが分かりづらい。全部自分で作るなら、Window-Based Applicationや、View-Based Application を使って作ればよい。すでにUITableView と UINavigationController を使うことが決まっている、とかあればNavigation-Based Applicationを使えばよい。
まずはテンプレートを使ってプロジェクトを使って何かHello World的なものを作って、その際にいろいろと説明するのがよさそう。
- Xcode上のグループ構成。それぞれのグループに何が入っているか
- XIB とは何か
- info.plist とは何か
- File’s Owner
View-Based ApplicationからNavigation-Based Applicationに相当するものを作ってみせればかなり理解が深まると思うが意外に面倒ではある。
Xcode は個人的にはオールインワンのレイアウトが好みだが、デフォルトでは違うのでそういうところも説明したい。
- Command + Option + ↑ でヘッダと実装切替
- Control+. でマクロ展開(?)
- ESCで補完選択肢
- Control+/ で次のプレースフォルダ
- エディタを縦に分割できる
バージョン番号を変えたり、アプリ名を変えたりする info.plist も説明する。Bundle Identifierを変えないと実機転送できないので必須だ。
iPhone Simulator のTipsも紹介しておくと後で役に立ちそう
- Command+→で回転できる
- Option + Click でマルチタッチもできる
- Option + Shift + Click でマルチタッチで平行移動もできる
Interface Builder
IBOutletやIBActionを使って、Interface Builderと連携する方法を伝える。
Interface Builder 上のボタンとコードを結びつける方法が最初なかなか理解することができなかったが説明されればきっとすぐ分かるだろう。
慣れてくると段々Interface Builderは使わなくなる、という話をよく聞くが、本当にそうなのかと最初は思っていたが確かにそうだった。
ただ、Interface Builderを使った方が早いこともあるので使った場合何が起きるのかは知っておいた方がよいだろう。
UIKit
Interface Builderを説明する流れで、UIWindow, UIView, UIViewController, UIApplicationDelegate, を説明したい。UITableView、UINavigationController も説明する。Modal Dialogを表示するための、presentModalDialog の使い方や、UIAlertViewなどもそのうち使うと思うので興味があれば説明する。
UIViewController
- viewDidLoad
- viewWillAppear, viewDidAppear, etc.
- shouldAutorotateToInterfaceOrientation
UITableView
- numberOfSectionsInTableView
- numberOfRowsInSection
- cellForRowAtIndexPath
- didSelectRowAtIndexPath
iPad
iPad に対応するために特別に必要な事項を並べてみる。Developer NetworkでもうNDA表示がなくなったので書いても良くなったものと思われる。
- 解像度が1024×768。iPhoneアプリ(480×320)を動かすとその差に驚く
- 基本的に全方向への回転に対応することが推奨されている
- UIInterfaceOrientationPortrait
- UIInterfaceOrientationPortraitUpsideDown
- UIInterfaceOrientationLandscapeRight
- UIInterfaceOrientationLandscapeLeft
- 起動画面もPortraitとLandscapeに対応する必要があり、ファイルも2つ用意する必要がある (Default-Portrait.png, Default-Landscape.png)
- アプリアイコンの解像度が異なる(iPad用は48×48と72×72、iPhone用は57×57)
- UIPopoverControl や、UISplitView など、現状iPadでしか使えないUI部品がある
iPadとiPhone両方で動くユニバーサルバイナリを作ることも可能だが、面倒そうだったので自分は調べていない。
その他
- ローカライズの仕方
- ネットワーク関係のほわほわ表示
- デバッガの便利な使い方 (NSZombieEnabledなど)
- Instruments を使ってメモリ使用量やリークを調べる
- マルチタッチの扱い
- 参考になる書籍
などなど、いろいろ説明したいことはある。
しかしとりあえずこれくらい教えてもらったらいきなり立ち上がれそうだ。うらやましいことだ。
書き途中だがとりあえず失われると困るので公開。
追記
後から便利そうなページへのリンクをいろいろ追加してみたが、その際に発見した混沌のiPhoneアプリケーション工房 の iPhoneアプリケーション開発入門(cocoa touch,Objective-C関連)まとめ がすばらしい。
ここを読むといろいろなことが学習できそう。
各ページにある説明が改行がなくて読みづらいのが唯一の問題か。
詳解 Objective-C 2.0 | |
![]() |
ソフトバンククリエイティブ 2008-05-28 売り上げランキング : 6790 おすすめ平均 |
iPhone SDK アプリケーション開発ガイド | |
![]() |
近藤 誠 (監訳)
オライリージャパン 2009-09-07 おすすめ平均 |
Objective-C逆引きハンドブック | |
![]() |
シーアンドアール研究所 2010-02-26 売り上げランキング : 3990 by G-Tools |
iPhone&Androidクロスプラットフォームアプリケーション開発~スマートフォン用グラフィックスツール作成で学ぶ~ | |
![]() |
毎日コミュニケーションズ 2010-02-26 売り上げランキング : 102461 おすすめ平均 |
関連記事
-
-
WatchKitのAVSpeechSynthesizerで音が鳴らない
自作英単語学習アプリ EverLearn には watchOS用アプリがあり、iOS側でまちがった
-
-
新しい iPad の感想
昨日2012/03/16(金)は新しいiPadの発売日。 早速買って会社に持ってきた人がいたので、手
-
-
ITMS-90175 Legacy Language Designator
自分は自作アプリの非常に古いプロジェクトをいまだにメンテすることがあるので、ITMS-90
-
-
[iPhone 6 Plus] TUNEWEAR の iPhone 6 Plus 用ケースを買ってみた
iPhone 6 Plus 購入時に、とりあえず購入した Simplism のケースは、すぐ
-
-
Pebble E-Paper Watch のお届け先住所入力ページが用意された
4月にKickstarterで出資した、Pebble E-Paper Watch を作ってい
-
-
Application tried to present a nil modal view controller on target 問題
MFMailComposeViewController を使ってメール送信ダイアログを表示しようとし
-
-
[iOS SDK] Game Center の Leaderboard 機能を利用してみた
自分で作っている英単語学習アプリを自分でひたすらテストをしているのだけれども、実際やってみるとなかな
-
-
Jony Ive: The Genius Behind Apple’s Greatest Products
Jony Ive: The Genius Behind Apple's Greatest Produ
-
-
スマートフォン手袋を買ってみた 2011
去年買ったスマートフォン用手袋は石油くさくてかなりつらい思いをしながら使ってましたが、今年もこりず
-
-
論理思考は万能ではない 松丘 啓司
この本はいい。 元コンサルタントが、コンサルタントが思考のベースにしている論理思考の重度の依存や思い