ひげろぐ

技術者として仕事人としての思うところや覚え書きやらです
Home      Profile      Works     
2010-08-25

iPad開発を始めたい人へ

周りにiPad開発してみたい!という開発者がいくらかいるのでひとつ。
言語問わずある程度UIを持ったアプリ開発の経験のある開発者向けに。

しかしながらすでにけっこうためになるまとめがあるので主にそちらを参照。

と、丸投げ。
あとは思うところをちょっとだけちょっとだけ。

開発の準備

iPhone Developer Programへの登録が必要。
10800円ケチケチせずに払う。

登録時日本語使わない。
使うと修正のためにオペレーターとのメール経由でのやりとり数週間コースに突入。

IDEはおとなしくXCodeで。補完がないと無理。

SDKをひとつのフレームワークとしてとらえる

フレームワークの提供する枠組みに沿って開発すれば、ちょっとしたユーティリティ系のアプリであれば割とさくっと作れる。
よくスクリプトを組んだ経験のないデザイナーの人などが「簡単に作れちゃいました」と言っているのを聞くのもそのため。

逆にフレームワークの文脈を理解するのを億劫がってオレオレに走ると苦難の道が待っている。
待っていましたとも。車輪の再発明どころじゃねえ。

基本を理解するために必要そうなドキュメントは全部目を通す。
とりあえず以下の「一般」にカテゴライズされている物は必読。

Interface Builderは使う?使わない?

最初はどっちでも。

使う場合。
フレームワークとObjective-Cの学習コストに加えてInterface Builderとの連携の仕方を覚えるのはちょっとしんどい。

使わない場合。
とはいえUIに部品を追加するたびにリファレンスと首っ引きになってたら開発が遅々として進まなくてしんどい。

いずれにしろ最初はしんどいのかと思われる。
最初はサンプルに沿って何かを作ってみると言うところからスタートすると思うので、そのサンプルに追随すればいいのではないかと。

コードによるUIの構築は基本addSubviewでUIViewオブジェクトをレイヤーのノリで重ねて行くだけ。
ナビゲーションバーにボタンを表示するなどの、関連性のあるオブジェクトの設置に関してはその処理をラッピングしてくれるメソッドが準備されている。

なので、コード書くのに慣れたらInterface Builder使わない方がむしろ簡単でよいと思う。

メモリ周りはしっかりと理解を

iOS上では残念ながらガベージコレクションが使えないので、リファレンスカウンタでオブジェクトの解放を管理する。
どのタイミングでリファレンスカウンタが増減するかをきちんと知っておかないと、メモリリークしまくったり、逆にまだ使っているオブジェクトを解放して往生する。

ちなみにObjective-C 2.0にはガベージコレクションの仕組みがある。
iOSで使えなくしているのはハード性能の制約のため。
とはいえiOS自体が徐々に下位機種切り捨ての方向に向かっているので、いずれは使えるようにならないものかと期待してしまう。

その他

過去記事。

2010-07-22

iOS開発で遭遇した謎のエラーたち

メモをあげておく。
基本をちゃんと理解してれば謎ではないんでしょうが。

unrecognized selector sent to instance hogehogeっつってるけど
  • 定義されてないメソッド、またはinterfaceで公開されてないメソッドを使った
  • 対象のオブジェクトを使った覚えがない場合はポインタが意図してないアドレスを見てる

後者はメモリ周りで以下のように適当にやってると起こる。

  • まだ使われているオブジェクトを解放してるかもしれない releaseしすぎ
  • またはautorelease対象を解放してるかもしれない releaseしすぎ

プロパティへの代入はセッターでretainされてるかされてないかちゃんと意識すること。

error: expected specifier-qualifier-list before ‘HogeController’
  • クラスが見つからないようだ
  • フレームワークとか他のクラスのヘッダファイルとかインポートし忘れてないか確認
  • 忘れてないのにアレだったら@classを使うとなんとかなるかもしれない

@classが必要なケースはいろいろとインポートしていて順序の前後関係がごちゃごちゃしている時?
よくわからず。

ユニバーサルプロジェクトがiPhoneで動いてくれません
  • 「データフォーマッタが一時的に使用できなくなっています。」って言われてもなんのことだか
  • UIKitをWeak LinkingにするとかNSClassFromStringを使うとかして解決
  • 参考:http://useyourloaf.com/blog/2010/6/21/symbol-not-found-errors-in-universal-apps.html
  • 参考:http://d.hatena.ne.jp/KishikawaKatsumi/20100625/1277476249
何も言わずに止まりやがる
  • コントローラのViewを作り忘れてるのにそれにaddSubviewとかいけませんよね
2010-06-29

iOS開発 2010年6月終わり頃の記録

土日にいろいろやったので記憶の定着をかねてメモっておきますよ。

画像を回転させる
  • SDK 4.0からは既存のUIImageからCGImageを取得して、そこから回転を指定した新しいUIImageが作れる
  • でも今3.2なのでめんどくさいから回転した画像を別途作った
ナビゲーションバーに複数ボタン
  • 普通にやると右と左に一個ずつ(合計二個)しか作れない
  • ツールバーにまとめて、そのツールバーをもとにしたUIBarButtonItemを作るかんじ
  • 参考:Osmorphis: Multiple Buttons on a Navigation Bar
ボタンの見た目を画像に
Safariで開く
  • openURLしたらSafariで開く。超簡単。
標準のマップアプリで開く
  • Google MapのURLを指定してopenURLした時にマップアプリがインストールされていればマップアプリが開く
  • シミュレータにはマップアプリが入ってないのでSafariでGoogle Mapが開く
  • 開いた後にマーカーをたてるにはq=で場所の名前も指定する必要あり ちゃんとURLエンコードする
  • 参考:Launching Other Apps within an iPhone Application
  • 参考:「Custom URL Schemes」でぐぐれ
テーブルのセルの追加と削除時にアニメーション
iPadでボタンからActionSheetが出ているように表示する方法
  • showFromBarButtonItemとかいうメソッドがあるのでそれを使う
アクティビティインジケータの表示

開発の近況としてはだいぶ慣れてきて分からないことにも推測が働くので結構楽になってきた。
あと基本的なことは本家のリファレンスを見ることでだいたい解決できるようになってきたけど、手の込んだことはやはり先人たちの知恵を借りると目から鱗が落ちることがしばしば。

それから残念なこととしては少し前にTDDのエントリ出したけどOCUnit使いにくすぎるので結局あんまりやってない始末。
なんかいいテスティングフレームワークないんですかね。

2010-06-15

iPad ヒューマン インターフェイス ガイドライン

がんばって英語で読んでたら以下に日本語訳がありました。なんてこったい。

iPhone Dev Center

iPadは画面が広くなった分、iPhoneとはまた違ったUI設計をしないといけないわけですが、そのあたりの指針をまとめてくれてるドキュメントです。
UISplitViewControllerとUIPopoverControllerあたりを使いこなすのがどうやら肝ですな。

UISplitViewController

画面を分割して左がメニュー、右がコンテンツといった2ペインのアプリが簡単に作れる仕組み。
メニューは幅がデフォルトで320。たぶんiPhoneのビューがそのまま違和感なく使えるように配慮されてるのだと思う。

またポートレート表示の際には自動的にメニューが隠れるようになっている。(隠れないようにすることも可能)
隠れたメニューはUIPopoverControllerを使ってボタンアクションなどで表示するようにするのが定石。

ちなみにこれと同じことを自前でやろうとするとローテーションの処理がめんどくさくてたまらない。
ええ、たまらなかったですよ。なんかいろいろ勉強にはなったけど。

UIPopoverController

任意のサイズのポップオーバーを表示する仕組み。
主にリストの行をタップした時、ボタンを押したとき、マップ上のアノテーションボタンをタップしたときなどに表示する。

ポップオーバーのコンテンツの表示は他のビューコントローラに委譲するので、Action SheetやAlertよりリッチな表示ができる。
また関連するリスト行やボタンからふきだしが出ているように表示されるので、何に関連したポップオーバーなのかわかりやすいようになっている。

Action SheetやAlertとの使い分けは適切に。

2010-06-06

Interface Builderよ、さようなら

というわけでここ数日の間に「Interface Builder使わない派」にめでたくクラスチェンジしました。
今までは「ケースバイケースでInterface Builderも有り派」という穏健な一派に属していたが、iPhone SDKの理解度が上がるにつれ必要性を感じなくなってきたと言う。

そもそもInterface Builderを使うメリットは

  • UIのデザインがGUIベースですばやく簡単にできる

というものだが、この機能で物足りなく感じていたこととして

  • UIの動きまではわからない
  • Xcodeとの連携がシームレスと言えるほどではない

静的なUIの設計部分はさくさく気持ちよくできるものの、動かさないと分からないと言った面もあるわけで、要するにInterface Builderの中でUI設計が完結しないところがイマイチだなあと。
またコードとの連携の簡単さに関しては10年くらい前にさわったきりのVBとかDelphi以下と思う。めんどくさい。

加えてコードからUIをいじることに慣れてきたので、下手するとコードで書く方がInterface Builderを使うよりも楽に感じるようにもなってきた。
動かないUIのスケッチならペーパープロトタイピングでやれば十分だし。

要するに自分の中ではInterface Builderを使うメリットが完全になくなったというわけです。

一方デメリットの方は依然として生きていて

  • Xcodeとの連携の仕方を覚えなくてはならない(忘れるたびに覚え直し!)
  • Interface Builderで作ったオブジェクトに余計なオプションがついていたりして意図通り動かないことがある
  • コードを書いてる最中にInterface Builderにスイッチする脳のコストが大きい

とまあいろいろ。
ほぼ満場一致でInterface Builderにはご退場願いました。

あでぃおす!

2010-06-04

TDDでiPhone開発

最近またiPhone開発のコードをいじり始めたので、遅ればせながらObjective-Cでユニットテストする環境を整えた。
以下がよくまとまっていて参考になりました。感謝。

ユニットテスト用のターゲットを作り、テストに関連するクラスやライブラリをターゲットに含める。

  • テストコード
  • テスト対象のクラス
  • テスト対象のクラスが利用しているライブラリやフレームワーク

あとはビルド時にテストを実行して、アサーションが転けるとコンパイルエラーのごとくエラーとして表示する。
今のところNSLogもデバッガも使えず、表示も見づらいので使いやすいとは言えないが、とりあえずテストが実行できるようにはなった。

その他メモ

リソースパスの問題

SQLiteを使ったテストが動かなかったりしたので原因を探ったら、NSBundleを使って取得していたリソースパスが何か全く別の場所を指していた。
どうもテスト用にリソースパスを取ってくるには別の書き方をしないといけないらしい。

iPhone – Retrieving Resources for logical unit tests – Stack Overflow

これはかなりハマった。

その他のテスティングフレームワーク

標準で用意されているOCUnitの他にも他にもいろいろなテスティングフレームワークがある。
実機で動かすタイプのiUnitTestとか。

しかしそれだとLogic testsにあたる部分がめんどくさすぎるような気がするのだが、どうなのだろう。(このあたり使ってみてないので外してるかもしれないが)
あとSDKのバージョンアップで使えなくなったりしないのか不安があるということもあり、無難に標準のOCUnitを使うことにしたという話。

2010/06/28追記

OCUnit使えない!使いにくい!

しばらく使ってみてそんな結論に。
でも代わりも見つからない。どうしたらいいんでしょうか。

2010-06-02

iPad開発環境構築

よーしiPadアプリつくるぞーと、以下のページを参考に開発環境の構築なぞ。

- iPhone アプリを iPad 対応にする方法(プログラミング編) : 管理人@Yoski
- 自作iPhoneアプリをiPad実機で動かすところまで – Born Neet

  • 既存のiPhoneアプリのプロジェクトをiPhone/iPadユニバーサルプロジェクトに変換
  • iPad用のビューを作成
  • 実記で動かす設定(デバイスの登録とかプロビジョニングプロファイル更新とか)

Snow Leopardにした時に証明書とかごっそり移行し忘れたので以下を参考に一からやりました。

なんでも作っちゃう、かも。: iPhoneアプリケーション開発(3)〜iPhone実機で動作編〜

このあたりはほんとめんどくさいですなあ。

ともあれめでたく無事にHello worldできました。
と言ったところでひとまずおひらき。

2009-07-09

iPhone開発本の訳書2冊 はじめてのiPhoneプログラミングが激しくオススメ

読んだのでちょっとレビュー。

はじめてのiPhoneプログラミング
はじめてのiPhoneプログラミング
デイヴ・マーク Dave Mark ジェフ・ラマーチ Jeff LaMarche
ソフトバンククリエイティブ
売り上げランキング: 325
おすすめ度の平均: 5.0

5 非常に分かりやすい
5 真打ち登場。

iPhone開発初心者向けの本ではあるが、それなりに経験を積んだプログラミング経験者を想定読者としている。
そのためiPhone開発からプログラミングを始めようとする人にはかなり敷居が高いと思うが、すでにObjective-Cや他の言語に親しんでいる人にとっては無駄のない内容となっている。

帯にある「iPhoneアプリ開発は、この一冊で十分です。」という文句は伊達じゃない。
訳が時々変だったり中途半端だったりするけど全体的にかなり読みやすい。

内容は非常に分かりやすく、かつしっかりしている。
チュートリアル的に進んでいくが通り一遍のチュートリアルではなく、要所要所で理屈を説明しつつ、普通はテンプレートを使えば済むところをあえてイチから作ってみるなど、仕組みからしっかり理解させるような作りになっている。

この本を最後まで読んで手を動かせばもう初心者の域から脱したと言えると思う。
まあまだ自分は最後まで行ってないんですけどね。
でも半分くらいまでよんで大分いろいろ分かったし、Objective-C自体にもけっこう慣れてきた。

今のところ初心者本としてはダントツの出来と言える本。

サンプルソースや素材は以下のサイトからダウンロードできる。

iPhoneデベロッパーズクックブック
iPhone デベロッパーズ クックブック
Erica Sadun
ソフトバンククリエイティブ
売り上げランキング: 32846
おすすめ度の平均: 3.5

3 初心者にはおすすめできない
5 なぜだろう?評判悪いですね
4 翻訳は?だが、内容はやはりよい
1 翻訳に落胆
4 中級者向け

こちらはクックブック。
逆引きリファレンス的な内容を期待していたらちょっと的外れな内容だった。
中級者以上が自分のやりたいことのヒントを得るにはいい本なんだろう。

初心者には内容を理解するのがなかなかキツイ。
ソースコードの書き方もmain.mに全部書いちゃうとかあんまり模範的ではないスタイルで書いている。

というわけでiPhone開発を学ぶために読むのはオススメできないと思う。
ある程度わかってくるといろいろとコンパクトなまとめになっていることがわかるのだが。

アンドキュメンテッドなAPIを使うことのメリットとデメリットのトレードオフが繰り返し説明されていて、そういうiPhone開発者のスタイルが感じられたりするのはいいかも。

なお本文内のサンプルコードは抜粋で全体像がよくわからなかったりするので内容が理解できない場合は全体を以下のサイトから落とした方がよい。

現在3.0対応版が執筆中&3.0になっていろいろ死んだ内容もあるっぽいので、いずれにしろ今買うのは待った方がいいかも。
7/8から3.0対応のサンプルコードがgithubで公開されているようで、フィードバック募集中とのこと。

2009-06-07

『iPhone SDKの教科書』はかなりいい入門書だった

iPhone SDKの教科書―Cocoa Touchプログラミング、最初の一歩
赤松 正行
秀和システム
売り上げランキング: 3792
おすすめ度の平均: 4.0

4 アプリケーションの開発に初めて取り組む人に。
4 やっといい本がでた。

iPhoneアプリ開発の最初のステップとしては現在最良の入門書だと思う。
分かりやすくていい本。

とにかく自分の作ったアプリがiPhoneやiPod Touch上で動く楽しさを手軽に味わえる点がとても良い。
画像や効果音の素材がサポートページからダウンロードできるので、それらを使うと見栄えの点でもいいかんじのものができあがるのもうれしい。
楽しさ重要。

他の初心者本がまずは座学で理屈から教える先生なら、この本は実技でお手本を見せてくれる先生といったかんじがする。

内容はiPhone SDKのインストールの説明からはじまるので、完全初心者でも安心。
そういった部分が読み飛ばせるくらいの人はすっとばしてサンプルアプリ作成から行くもよし。

アプリの作成はアイデアを形にするまでの制作の流れなども説明されていて、かなり実践的内容。
また作成の手順説明が操作のスクリーンショットを交えて丁寧でかなり分かりやすい内容になっている。
レシピ通りに進めていけばほとんど迷わず読み進めていくことができるだろう。

この本に従って進んで行くと最終的にサンプルアプリを6つ作ることになる。
数作ることで、操作を反復することになり開発の要領を体で覚えることができるのもいいんじゃないだろうか。

一方でサンプルコードに含まれるクラスやメソッドの説明は最小限にとどめられている。
ただそのおかげでサンプルアプリの作成がテンポ良く進められるようになっているような気がするので、それはむしろプラス評価。

足りない点へのフォローとしてはレシピ通りにサンプルアプリを作って終わり、とならないように、そこから先のステップに進む道筋として改良アイデアを提示して促したり、補足資料としてドキュメントやコミュニティへのポインタを設けたりもしている。

ということでこの本を読み終わったら、提示されたアイデアや自分のアイデアを形にする過程で別の本とかAppleの公式リファレンスで調べていけばいいだろう。
そしたら脱初心者。

で、別の本に関しては何冊か本屋でパラパラ立ち読みしてみたけど、入門の部分がすめばあとはリファレンスで足りるような気がした。
とりあえず自分はこの本で入門はすんだので、あとはしばらく公式のリファレンスでがんばってみようかと思っている。
(翻訳が変と評判の『iPhone デベロッパーズ クックブック』だけちょっと気になっているけど)

もうちょい本で基礎を勉強したいよという人は『基礎からのiPhone SDK』あたりが二冊目によさげな気がする。

2009-04-03

iPhone対応サイト作成のお供に『iPhone Web Style』

iPhone対応のウェブサイトを作り始めるにあたって基本的な情報がまとまっていてよかった。
予備知識とかほどんどないけれどもiPhone対応ウェブサイトをこれから作ってみたいという人、急に作る必要にかられた人などに激しくオススメ。

  • 基本的なできることできないこと
  • コンテンツ制作上の注意項目(容量制限、Flash不可など)
  • iPhoneサイトのCSS
  • 定番デザインとサンプルコード(ボタン型、リスト型)
  • iPhoneサイトの機能について(電話、地図、動画、できないことの回避策など)
  • 簡単にサイトを構築できるライブラリの紹介(iui,UiUIKit)
  • 開発とデバッグのやり方
  • 実例紹介

HTMLとCSSが理解できれば簡単に作れるんですな。
Macがないとシミュレータが使えないので開発がちょっと大変ということくらいか。

iPhone Web Style
iPhone Web Style
posted with amazlet at 09.04.03
株式会社FEYNMAN 正 健太朗 川畑 佑介
ソフトバンククリエイティブ
売り上げランキング: 31014

copyright brass.to | powered by WordPress ME