iOSで3文字のクラスプレフィックス

ちょっと前にiOS(Objective-C)でクラスプレフィックスは2文字じゃなくて3文字にすべき。2文字はフレームワークで予約されている。など聞いた。おぼろげながらAppleが予約しているプレフィックスは使うなというのは読んだ覚えがあったが2文字を使うなとまで聞いた覚えがなかったので、ソース(情報源)を探してみようと思った。

あと、BlocksKitが変えたようにフレームワークのクラスにカテゴリで追加するメソッドにも3文字のプレフィックスを NSArray each: -> NSArray bk_each: のようにしてつけるべきという話も普及していきそうなのでそれも。

どうやら僕の2文字の話は以下から得た知識のように思う。
Introduction to Coding Guidelines for Cocoa
https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/CodingGuidelines/CodingGuidelines.html

特に2文字じゃだめとは言及していない。さらに探すと別のドキュメントを発見。

Programming with Objective-C
https://developer.apple.com/library/ios/documentation/Cocoa/Conceptual/ProgrammingWithObjectiveC/Conventions/Conventions.html

Two-letter prefixes like these are reserved by Apple for use in framework classes.

Your own classes should use three letter prefixes

で確かに 3文字にすべし と書いてあった。しかしUpdated: 2012-12-13 と書いてあり最近の話ではなさそうだ。今頃普及してきたのかな。

Programming with Objective-Cは 日本語ドキュメントにもみつかった ProgrammingWithObjectiveC.pdf

動作が不定になることを回避するため、フレームワーククラスにカテゴリを定義してメソッドを追加する際は、名前にプレフィックスをつけるようにするとよいでしょう。独自のクラスにプレフィックスをつけるのと同じ考え方です。クラス名のプレフィックスと同じ3文字の文字列を、メソッド名の規約に従って小文字にし、アンダースコアをはさんでメソッド名と連結してください。

カテゴリで追加するメソッドのプレフィックスについても書いてあった。今更ながらひと通り読んでおこう。

IRKit iOS SDKで赤外線キャプチャしてみる

http://getirkit.com/のiOS SDKを使って赤外線信号をキャプチャするアプリつくった。

最初はIRKit Device HTTP APIで信号をキャプチャしようと思っていたんだけど、前回のエントリ(IRKit手に入れた)でも書いたように他にノイズの信号をひろってしまうと最後に取得した信号がとれないためコツがいる。これに対してIRKit iOS SDKは信号を拾うとイベントを出してくれるのでこっちの方が拾いやすい。

というわけでツールのつもりでiOSアプリを書いてみた。RubyMotionを使おうかと思ったけどSDK側のデバッグもしないといけないかもと思ったのでとりあえず普通にObjective-Cで作ってみた。シミュレーターで動くので実機で動かす必要もなさそう。というか実機で動かしてない。

git clone https://github.com/makotokw/IRCapture.git
cd IRCapture
cp -p IRCapture/IRCaptureConfig.h.sample IRCapture/IRCaptureConfig.h
pod install
open IRCapture.xcworkspace

IRCapture/IRCaptureConfig.h にAPIキーを書くと動くはず。APIキーはSDKのドキュメントにもあるが

curl -d "email={your email}" "http://api.getirkit.com/1/apps"
{"message":"You will receive an email shortly, please click the URL in it to get an apikey"}

をすると指定したメールアドレスにApiKeyを取得するためのURLが送られてくる。

IRCaptureはコンソールログにIRKit-Device-APIで送信できるjsonデータを出力しているのでXcodeからコピーして使う。

うちのエアコンは同じ信号でトグルになっているかと思っていたがオンとオフの信号は異なっていた。トグルになっているはエアコンではなくリモコンの状態の方だ。よって遠隔でつけたつもりが消している・・・ということにはならなさそう。リモコンもそうだけどIRKitをエアコンの方に向けてないと信号を拾ってくれないので置き場や向きが重要っぽい。

しかし、定期的に10バイトくらいの信号を拾っているんだけどこれは何なのだろう。

IRKit手に入れた

IRKitを試したい人〜を教えてもらったので先行して入手。IRKitは赤外線信号を受信したり、送信することができるスマートデバイス。赤外線リモコンを持つ家の中のいろいろな機器をこれで操作できる。

Arduino Derivative派生プロダクトでUSBで電源が事足りる、サイズはこれくらい。

どうやってネットワークの設定するのだろうと思っていたがプロモーションコードをもらって公式iOSアプリを入れるとアプリからおもむろにモールス信号で情報を送りだした。ちなみにあとで作者さんに教えてもらったがiPhone5sのスピーカーが下側なのでこの向きでは時間がかかるかうまくいかず、iPhoneのスピーカーをIRKit側に向けた方がよいとのこと。どうりで時間がかかると思った。

http://getirkit.com/ によると接続方法として3種類のAPIがある。

  • IRKit iOS SDK
  • IRKit Device HTTP API
  • IRKit Internet HTTP API

IRKit自体がHTTPサーバを実行しているので、2番目のIRKit Device HTTP APIではhttpでGET, PUTするだけで赤外線信号の受信、送信ができる。IRKit Internet HTTP APIもあるが、Raspberry PiからIRKit Device HTTP APIで送信しようかと思っているところ。

IRKit Device HTTP APIでリモコン学習をしようと思ったが、ノイズを受信すると最後に受信した信号がクリアされてしまうらしくキャプチャ用のアプリをiOS SDKでつくろうかと思っている。せっかくだからRubyMotionでつくってみようかな。

IRKitでつくろうかと思っているアイディア

  • Raspberry Piの温度・湿度センサーと連携したエアコンの自動操作
  • iPhoneの位置情報を使ってオンオフ
  • 朝自動でニュース番組をつける
  • 時間忘れそうなスポーツ番組をつける

iOS/Androidのサークルビューライブラリ作った

iOSおよびAndroidで縦方向にくるくる回転させるTableView/ListViewを作ったのでGitHubに公開しました。

iOS版はCocoaPodsを使っている場合PodfileではGit経由でインストールできます。

Podfile
pod 'WZCircularTableView', :git => 'https://github.com/makotokw/CocoaWZCircularTableView.git'

Android版は自前のMavenRepositoryを上げるまで整備できていないのでGradleでjarをビルドするなりして使ってください。 

git clone https://github.com/makotokw/AndroidWZCircularListView.git
cd AndroidWZCircularListView.git
./gradlew renamePackageReleaseJar

CircularListView/build/libs にjarファイルができます。

基本的に両方のバージョンは同じアルゴリズム、同じ機能になるようにしてます。

元ネタは UITableView Tricks, UITableView Tricks – Part 2 – Infinite Scrolling でこのアルゴリズムで無限ループや、三角関数で緩やかな円を描いているつもりなんだけどTableView/ListViewのViewサイズによっては円が微妙になるので自動化は若干四苦八苦していて属性のRadiusでベースとなる半径が設定できるのでそれで調整してもらうと良いかもしれない。

Appleからの試練が俺を強くする デザイン編

がんばれFireworks お前がナンバー1 だ。

iOS7のアプリ開発の試練は開発だけでない。地味にアプリに必要なリソースのサイズ変更が行われた。デザイナーの皆さんは急に依頼が増えたりしてあくせくしている頃であろう。

iOS7で増えたリソース

参考: iOS 7 Design Resources > Icon and Image Sizes

アプリアイコン

57×57(114×114)だったiPhoneのアイコンサイズはiOS7では60×60(120×120)になる。iPadは72×72(144×144)から76×76(152×152)になる。 その他、Spotlightのアイコンサイズも地味に変わっている。ちなみにiOS6まではアイコンに光沢を追加してもらう設定があったが、iOS7からは光沢は追加しない。

アプリアイコン (iOS6)

サイズ ファイル名の例 対象
50×50 Icon-Small-50.png iPadのSpotlight
100×100 Icon-Small-50@2x.png Retina iPadのSpotlight
57×57 Icon.png iPhoneのホーム
114×114 Icon@2x.png Retina iPhoneのホーム
72×72 Icon-72.png iPadのホーム
144×144 Icon-72@2x.png Retina iPadのホーム

アプリアイコン (iOS7)

サイズ ファイル名の例 対象
40×40 Icon-40.png Spotlight
80×80 Icon-40@2x.png RetinaのSpotlight
60×60 Icon-60.png iPhoneのホーム、非RetinaのiPhone/iPod touchがiOS7対応していないので実は不要
120×120 Icon-60@2x.png Retina iPhoneのホーム
76×76 Icon-76.png iPadのホーム
152×152 Icon-76@2x.png Retina iPadのホーム

起動イメージ

またiPadではiOS6以前は起動イメージにステータスバーを含めなかったが、iOS7向けにはステータスバーを含めたものを用意しないといけなくなる。

768×1004(1536×2008) -> 768×1024(1536×2048)
1024×748(2048×1496) -> 1024×768(2048×1536)

起動イメージ (iPad iOS6)

サイズ ファイル名の例 対象
768×1004 Default-Portrait.png iPad縦向き(Portrait)
1024×748 Default-Landscape.png iPad横向き(Landscape)
1536×2008 Default-Portrait@2x.png Retina iPad縦向き(Portrait)
2048×1496 Default-Landscape@2x.png Retina iPad横向き(Landscape)

起動イメージ (iPad iOS7)

サイズ ファイル名の例 対象
768×1024 Default-Portrait-1024h.png iPad縦向き(Portrait)
1024×768 Default-Landscape-768h.png iPad横向き(Landscape)
1536×2048 Default-Portrait-1024h@2x.png Retina iPad縦向き(Portrait)
2048×1536 Default-Landscape-768h@2x.png Retina iPad横向き(Landscape)

Fireworksのシンボルで頑張る

何より辛いのはiOS6以前も対応をしようとすると今までとiOS7の両方のサイズが必要になってくるということだ。

開発者であれば画像を渡すと自動でリサイズしてくれるサービスも使ったりすると思うが通常はデザイナーがベクター画像からサイズごとの画像をちゃんと作ると思う。

とは言えこの数のレイヤーをメンテするのはやってられないので、1つのベクターからリサイズする拡張は無いのか調べた。PhotoShopでは見つかったがFireworksでは見つけられなかった。しかし代わりにシンボルという技を覚えた。

シンボルは複数のレイヤーをまとめ、再利用できるオブジェクトの単位だ。つまりアイコンやロゴなどをシンボルとして登録しておけば、シンボル単位で拡大縮小が可能だ。何よりシンボルを修正すれば参照しているレイヤーのものも更新されるので同時に複数サイズを運用するのに都合がいい。

いままではスタイルを使って色などを一括で変えるということはやっていたがこれで技が増えた。今更過ぎるが。

参考: Fireworks / シンボル

Fireworks向けテンプレート

iOS7のテンプレート、まずアイコンは http://ios.robs.im/ にあるものがカンバスサイズがコンパクトで使いやすそうだったのでPSDファイルをFireworks用に変換した。残念ながら再頒布が禁止されているので配れない。

起動イメージを各ページとして用意したものを作ったのでこっちは公開します。

あとiOS 7 Colorsも参考になる。

まとめ

Appleの課した試練によってFireworksスキルが向上した。何が言いたいかというとFireworksは神。デザインもできるエンジニアは無敵。

※ 本エントリーはFireworksの開発が終了し悲しみに打ちひしがれるユーザの戯言です。「そんなの○○でもできるけど」というコメントは受け付けておりません。

Appleからの試練が俺を強くする

戦闘民族は死の淵から蘇ることにより戦闘力を増すことができる。連休中(というか一週間過ぎてしまったが)にいろいろアプリを作りたかったのだけど、iOS7がリリースされたということもありiOS7向けアプリ開発の勉強がメインになった。覚えたこと紹介する。

CoreData

これはiOS7は関係ない。データを保存したくなったけど直接SQLiteをつかうのが面倒になり、objectキャッシュで済ませようかと悩んだけど、いい機会なのでCoreDataを勉強した。

CoreDataは慣れると便利だが、取っ付き易いとはいえない。RailsのActiveRecordなどのように事前にモデルを設計しておく必要があるが、それがyamlなどのテキストベースではなくXcode上の設計ツールから行わないといけない。xcdatamodeldという拡張子のファイルを作成し、xcdatamodeldファイルはビルド時にmomdファイルにコンパイルされるようだ。

CoreDataは日本語の公式ドキュメント PDF もあるので詳しくは書かないがモデル設計を終えても実装が面倒で、どれくらい面倒かというとAppleのドキュメントにCore Data Snippetsがあるくらい。

検索してデータを書き換えて保存するだけでも結構な行数になる。Snippetsが示すようにモデルが変わってもやることは同じなのでおそらく簡単にかけるライブラリを誰か作っていると思うが、まずは勉強ということで直接CoreDataを使ってみた。面倒なことも多いが慣れてみれば自前でSQLiteをつかうよりも楽だ。iCloudの同期を想定していたりするので、Webフレームワーク系のORMと多少扱いが違うのもしょうが無いないかと納得もした。

とは言え実装が面倒なので次回からはActiveRecord風に操作できるライブラリでも探そうと思う。

StoryBoard + ChildViewController

多分そろそろInterface Builder(以下IB)を使わない人は減っていくのだろうと思う。ちなみに僕は基本的に面倒なことが嫌いで、コードで設計した方が早いならそうするしIBを使った方が楽ならそうする。楽をするためなら苦労は厭わない。

StoryBoardの利用促進としてChildViewControllerを紹介しておく。これは第3回 iphone_dev_jp 東京iPhone/Mac勉強会で学んだ。
参考: 第3回 iphone_dev_jp 東京iPhone/Mac勉強会 資料

StoryBoardではView単位で設計ができないので画面の一部(SubView)を設計する場合に活用できないように見える。

実はiOS5から、StoryBoard対応と同時にUIViewControllerには他のViewControllerをchildViewControllerとして扱う機能が追加されている。childViewController.viewをsubViewに追加することでStoryBoardで設計した別のシーンをsubViewとして追加できる。

addChildViewControllerの良いところはviewDidLoadなどのイベントを子のViewControllerでも使えるところ。つまり操作処理を(Child)ViewControllerにカプセル化することができる。またユニバーサルアプリを作る場合にiPadではchildViewController(subView)として使い、iPhoneでは1つのシーンでつかうというような再利用もできる。

またContainerViewを使えばIBの中からでも関連付けが可能になる。
参考: Storyboardの”ContainerView”を使ってみる

別に100個も200個も追加するわけじゃないので、ViewControllerのオーバーヘッドとか気にしてもしょうが無いと思って画面の一部も別のViewControllerとして積極的に設計していくことを覚えた。

AutoLayout

AutoLayoutはiOS6からのサポートなのでiOS5がターゲットだと使っていなかった。しかしiOS7対応で心が折れたので使ってみた。

iOS7では画面にステタースバーを含めてレイアウトしないといけないのでステータスバーに重複しないように画面上部20pxを意識して設計しないといけない。しかしこれをiOS6で動かすとぽっかり20pxの余計な空白が開いてしまう。Appleが課したとてつもない試練だ。

正直OSのバージョンを判定してViewのframeを1つずつ設定していくこんな世の中じゃ。ポイズン。と絶望した。そしてAutoLayoutを覚えることにした。もう新しいアプリではiOS5を切ると決めた。

このあたりの対応の話はQiitaにまとめておいた。
参考: iOS7ステータスバー対策まとめ

AutoLayoutははっきり言ってじゃじゃ馬である。何か設定をしくると容赦なく実行時にレイアウトできん!とエラーが起きる。何か新しい設定を追加すると他の設定が崩壊することもある。微妙なバランスが崩れると設定した値が消えてしまったり、いつの間にか同じ場所の設定が複数入っていたりなんだかよくわからない状態になっていく。

IBを使いたくない気持ちは俺も理解している。何度も投げだしたくなったがframeを設定していく世には戻りたくないのでがんばった。一日くらいやると慣れて何をすると崩壊するのかだんだんわかってきた。うまく説明できないがXcodeに矛盾を感じさせないように設定を追加していくことが重要となる。AutoLayoutはまるでジェンガのようだ。

まとめ

時にXcodeを投げ出したいこともある。テキストのソースコードだけを相手したいこともある。Xcodeを強いられるのはある種Appleからの試練のようなものだ。

ただ開発環境はプラットフォームと共に進化しているのでそれから目をそむけていると返って無駄な苦労を強いられかねない。もちろんXcodeを使わない縛りでも強くなれることもあるだろうが、Xcodeに立ち向かうことで日々の開発が楽になることもあるよ、ということを今回は言いたかった。

ガラポンTVのiOSアプリ作ってみた(まだ途中)

連休を利用してガラポンTVのiOSアプリを作ってみた。

ガラポンアプリ

ガラポンTVとiOS

ガラポンTVはウェブサーバも動いていてコンテンツを見るウェブアプリがjQuery Mobileで構築されている。コンテンツはApple HTTP Live Streamingで配信されるのでiOSのSafariではvideoタグをつかってウェブアプリからも再生できる。

ただ、どうしてもウェブアプリということ、タブレット向けのデザインになっていないので使い勝手があまり良くない。ガラポンTVのiOSアプリも配信されているけどなぜかUniversalじゃないしダウンローダがメイン機能なのかコンテンツの検索はウェブアプリをWebViewで載せてるだけっぽいのでiPadだとウェブアプリを普通に使った方がいいレベル。

APIがあるので自分でなんとかしてくださいと解釈したのでアプリを作ってみることにした。

現在の成果

まずガラポンTV APIのラッパーライブラリを作った。CocoaPodsにしているのでそのうちGitHubにあげる。

本当はWeb認証とかガラポンのお作法があるんだけど開発中ということでガラポンTVのLAN上のIPに直接繋いでAPIを叩くという形式で、録画番組の取得と、ジャンル別、チャンネル別の階層メニューをつくって、選択した番組をAVPlayerで再生できるところまでは動いた。

わりと録画番組一覧を眺めて気になるものを再生するとか、サブジャンルで絞り込んだものから探すので最低限は使える感じ。ワンセグということで画質も低いのでiPad miniが適正デバイスなんじゃないかと思っているところ。

やり残し

とりあえず最初のバージョンでやろうと思っていること。

Web認証のログインのつなぎ込み。
再生系のボタンのアイコン作り。
再生系の制御まだ途中。
公開するならアプリのアイコンも作る必要がある(遠い目)
キーワード検索。
設定とかヘルプとか。

そのあとやりたいこと

検索条件をプリセットする。そしてメニューに追加する。プリセットをウェブかTwitterのリンクなどから簡単に共有してインポートしたい。
ガラポンAPIのお気に入りの追加・削除の対応とアプリの実装。
Twitter連携(torneのパクリ)、2chの実況と連携。
なんかソーシャル的なことガラポンWebサイトと絡められるのかよくわかってない。

悩み事

iPad前提でレイアウトしているのでiPhone向けには別の実装がいる。iPhoneっで見る人ってどれくらいいるのだろうか。iPhoneで使いたい人いたら教えて下さい。最低限自分で使えるレベルになったので若干満足しつつあってここから公開用に整形していくモチベーションが低下気味なので使いたい人いたらプレッシャーかけてください。あるいはβ版でテスト公開するのもありなので、途中のバージョンでも良いという人がいたら教えて下さい。

Android版はGaraponMateがあるから作らなくてもいいよね?そんな時間あるならまずiOS版を完成させろよと言われそう。

もともと番組表のインターフェースはいろいろ構想があって、普通の階層的なナビゲーションメニューは最初作るつもりはなかった。それはウェブアプリに任せればいいからと思っていたのだけど、とりあえずデバッグがてら階層メニューを実装してみたら案外使いやすくてこの機能をわざわざなくす必要もないかと思った。やっぱ動画を見ながらメニューを操作できるのが良い。もともとPSX/PS3のクロスメディアバー(XMB)インターフェースを再現したかったのだけど、タップとXMBはあまり合わないと思い諦めた。とはいえナビゲーション・メニューを上にかぶせるだけでもなんかそれっぽいので個人的には使いやすい。でもホントはもっと独自路線で行きたかった。昔VAIO Xであったタイムマシン機能みたいなやつとか。

CocoaPodsを知らないiOS開発者は人生の8割損している

CocoaPods最高ですよね、これを使いだすと人生が楽しくなりますマジで。年が開けてCocoaPodsの使い方を忘れてしまって絶望を覚えたのでEvernoteにメモっていた内容をQiitaにまとめてアップしましたよ。

CocoaPodsでPodの利用&作成のメモ
http://qiita.com/items/edf758a67bd4c2ba5b7a

Macはよく知らないんだけど、XcodeでiOSのStatic Libraryを作ろうとして心を折られたこと多数。Static Library作る理由は基本的によく使うクラスを再利用したいだけなんだけど頑張ってStatic Libraryプロジェクトを作ったと思ったら複数のworkspaceで同じプロジェクトを同時に開けないXcodeの制限があったりして凹む。

最近のXcodeだとworkspace内にあるXcodeプロジェクトの依存関係を自動で判断してくれるらしく、アプリケーション側の.aファイルをリンクに追加するとStatic Libraryプロジェクト側に変更を加えるとちゃんとそのプロジェクトからビルドもしてくれる。でもXcodeで.aファイルを追加すると.aファイルのパスがおかしくなるようなことがあってリンク時にファイルの変更をちゃんと検知してくれずStatic Libraryだけを変更したときにアプリに反映されてないことがってプロジェクトファイルを直接変更してBUILT_PRODUCTS_DIRを見るようにしたりとか。
http://stackoverflow.com/questions/12978723/xcode-not-rebuilding-app-when-source-file-updated-in-dependent-static-library

コードを再利用するってそんなにいけないことなんですか?と何度も思っていたけどそういったことはCocoaPodsがすべて解決してくれた。Qiitaにアップしたメモにも書いたけどローカルPCにあるPodも依存関係に組み込めるので自分で作ったライブラリのpodspecを書いてPodfileに

platform :ios,'5.0'
pod 'MyPodName', :local => '~/code/Pods/MyPodName'

と書くとアプリケーションプロジェクトに組み込める。PodのProjectはworkspaceごとに作られるので同時にworkspaceを開くことは問題ないし、localの場合はファイルをコピーしているわけじゃなくそのlocalのパスを直接参照しているので簡単にライブラリの変更を複数のアプリに反映することができる。(互換性を意識しないといけないこともあるが)

MBProgressHUDとか有名なライブラリはだいたいCocoaPodsに入っているからよく使うライブラリや自分のクラスを再利用するのにCocoaPodsは便利です。知らない人は是非使ってみてください、アプリ作るのが楽しくなります。

詳解 Objective-C 2.0 第3版を買う

そろそろ書籍の「詳解 Objective-C 2.0」の改訂版でも買おうかなあと思っていたら、たまたま第三版を見つけた。2011年末から出版されていたようだ。

iOS5で対応したARC(Automatic Refercen Counting)についても書いてある。しかし、ARCってカテゴリが難しいよね。コンパイラの機能でもある反面iOS5じゃないと使えなくてOS依存の機能でもある。アプリはいいけどオープンソースでStatic Libraryやらクラスを公開するときはARCオプションがあるとか最低バージョンの指定とか見て処理を切り替えないといけない気がしている。もうちょっと詳しく知りたいので以下の本も読んでみるつもり。

しかし、Amazonは「詳解 Objective-C 2.0」改訂版もまだ販売されていて第3版にナビゲートしてくれない。「これを見た人はこれも・・・」のレコメンドで第3版は載っているけどそれはたまたまであってサービスとしては不十分に思える。

電子書籍になったら改訂版とかソフトウェアのアップグレードみたいに割安に変えるようになるのだろうか?

iPhone OS 3.0 beta公開!

iPhone 3.0 OSの発表がありました!動画も公開されています。

http://events.apple.com.edgesuite.net/0903lajkszg/event/index.html

また、keynoteのpodcastでも公開されているのでiTunesでダウンロードしてiPodでみたりもできます。

忙しい人は最初の1時間飛ばしてもいいかも(新機能の話は主に1時間後から)。やっぱりジョブズじゃないとつまらんな。

コピペが結構騒がれているっぽいけど、ダブルタップでコピペ。振るとUndoもできるそうだ。振ってシャッフル再生はサマになるけど駅でUndo実行でiPhone振ってる人がいたら危ない人と思われそうな気もしないでもない。

すでにメモをまとめている人もたくさんいそうだしまとめるのは皆さんに任せます。

http://www.gizmodo.jp/2009/03/iphone_30_os_1.html

なかあんまりメジャーバージョンアップって感じがしない。いろんなアプリや機能のマイナーバージョンアップをかき集めてメジャーバージョンアップって呼んでいる感じ。

まぁこのあたりはブランドや戦略もあるし、いっか。と思っていたのに最後にどんでん返し。

iPhone 3Gユーザは無料と言ったあとで、iPod touchは1G/2G両方で金取るだと!!2.0の時もとられたけどあのときはSDKの勢いがあったから価値があったと思う。なんてイイ商売なんだ。

もうiPod touchはデバイスと考えたらあかん、これはネットブックだ。そう考えればMacOSX買うよりもWindows 7買うよりも安いと自分に言い聞かせることができる。

iPhone OS 3.0は今年の夏に公開だそう。ただBeta版はもうDeveloper Programに加入している開発者に本日公開!!実際確認してみたらfirmwareとSDKの両方がダウンロードできそう。

残念ながらjailbreakしてるんで今は更新できない。というかちょうどwindowsでiphone 2.0の開発環境つくったってのに。