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 おすすめ平均 |
関連記事
-
[iPhone アプリマーケティング] Yappler.com に登録してみた
たまたま検索していて発見した、Yappler.com に試しに登録してみた。 iPhoneアプリ開発
-
MangaONEでARMS読み放題期間延長
MangaONE で2015/12/29まで皆川亮二氏の名作ARMSが読み放題、ということで暇をみ
-
iPhone開発のネタ帳: sonsongithub の PopupView を使ってみた
自作アプリで sonson 氏の PopupView を使わせていただいてます。 Softwar
-
[iPhone6plus] 買うかかなり悩み中
9/19 に発売されてからiPhone6Plusを買おうか、買うならいつ買おうか、キャリアは
-
派生クラスを変更し忘れて半日はまる
こんなコードを書いて半日はまっていた。 SettingViewController は UITa
-
Apple Special Event 2015
https://www.gizmodo.jp/2015/09/applelive_event_ip
-
[iOS SDK] iPhone/iPad はサイレントモードにしても音が鳴る
この前、iOS5 を入れた iPad2 で おんぷちゃん for iPad から音が鳴らない、ほかの
-
Xcode 13.3 アップデート
iPhone 11 Pro Max の iOSを15.4に上げてしまったため、Xcode 13.2
-
Wi-Fi体重計Withings WS-50 を買ったのでSDKを試してみる
奥さんからの要望でスマホと連携する体重計を検討していたが、いつの間にかWithingsのWS-50が
-
[iPhone SDK] 日時のローカライズ
自分でも何度か調べてしまったので記録しておく。 Objective-Cで日時を表示したい場合、単純