iPhone SDK勉強会

公開日: : 最終更新日:2011/09/07 iPad, iPhone, , ,

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する

などのことは伝えておこう。まだ全部は読んでいないが、混沌さんのページによくまとまっているように見える。

NSArrayNSDictionaryなど、よく使うコレクションクラスや 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, を説明したい。UITableViewUINavigationController も説明する。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
詳解 Objective-C 2.0
ソフトバンククリエイティブ 2008-05-28
売り上げランキング : 6790

おすすめ平均 star
star説明が下手だと思う。
stariPhoneアプリ開発で初めてObjective-C触る人に勧めたい
star常に手元にあるべき本

Amazonで詳しく見る by G-Tools

iPhone SDK アプリケーション開発ガイド
iPhone SDK アプリケーション開発ガイド 近藤 誠 (監訳)

オライリージャパン 2009-09-07
売り上げランキング : 3115

おすすめ平均 star
star中上級者向け
stariPhone 関連で一番の良書

Amazonで詳しく見る by G-Tools

Objective-C逆引きハンドブック
Objective-C逆引きハンドブック
シーアンドアール研究所 2010-02-26
売り上げランキング : 3990

Amazonで詳しく見る by G-Tools

iPhone&Androidクロスプラットフォームアプリケーション開発~スマートフォン用グラフィックスツール作成で学ぶ~
iPhone&Androidクロスプラットフォームアプリケーション開発~スマートフォン用グラフィックスツール作成で学ぶ~
毎日コミュニケーションズ 2010-02-26
売り上げランキング : 102461

おすすめ平均 star
starまれな書籍。マルチな設計者向け

Amazonで詳しく見る by G-Tools

関連記事

[WatchKit] WatchSim 買ってみた

WatchSim Danny Keogan posted with iT

記事を読む

no image

iPhone向け有償・無償フレームワーク

かごおた さんで、iPhone アプリ開発で使用できる有償・無償フレームワークが紹介されていた。 有

記事を読む

no image

月刊ビジネスアスキー11月号の特集はアップルの謎

月刊ビジネスアスキーは先月定期購読をやめたのだが、今月は「アップルの謎」と称した特集だったので買って

記事を読む

no image

Corona SDK 調査6日目

なかなか Corona SDK自体の調査まで進めないCorona SDK調査6日目。 平日はさすがに

記事を読む

no image

[iPhone SDK] ネットワーク接続中を示すぐるぐるの表示

いつも忘れて検索してしまうので自分のブログにメモ。 iPhoneのインジケーターバー(?)にぐるぐ

記事を読む

Pastebot が OSX 用になっていた

昔使っていたがいつの間にか使わなくなっていた Pastebot が、いつの頃からかiOS版がなくなり

記事を読む

Olympus Camera Kit (SDK)を製品版に移行

発売が延期されていた OLYMPUS AIR A01も2015/3/25(水)についに発売された。

記事を読む

おんぷちゃん for iPad 大譜表モード+MIDI対応を追加しました

おんぷちゃん for iPad: ぽこ・あ・ぽこ の方がおんぷちゃん for iPad を紹介してく

記事を読む

アプリアップデート数はApp Store Connectアプリで確認できる

自作アプリのアップデート数をSafari のApp Store Connectで確認しよう

記事を読む

no image

iPhoneアプリネットワーク+GPSプログラミング 橋本佳幸

去年12月に読んで、途中まで感想を書いてそのままにしていた。ネットワーク関連の実用的なコードが多くて

記事を読む

Message

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください

ポモドーロテクニック用物理タイマーならTime Timer

会社ではなかなか自由に時間を使えないが、家で読書や作業をする

DELL 32インチディスプレイ U3223QE 購入

Dell U3223QE は解像度 3840x216

WWDC 2023 Vision Pro発表

2023/6/5 (日本時間 2023/06/06 2AM)のWWD

M1 MacBook Air を Venturaにアップデートする

M1 MacBook Air を macOS Montere

iOS16でaurioTouch の inBufferFramesが1になる

https://developer.apple.com/librar

→もっと見る

PAGE TOP ↑