このiPhoneアプリをリリースするまでにやった事を一度まとめてみました。この記事書いたのはuechocoさんに言われたのがきっかけ。

■完成したもの
iPhoneアプリ「CheckTrend」をバージョンアップしました(ver1.3) - えんたつの記録
iTunesでダウンロード


■自分の基本スペック
・データ処理にR書いてる程度。きちんとソフトウェアを作った事は無い。
・Cは大学の授業プラスα程度。Windowsアプリを6-7年前に書いた事ある気がするけどもう忘れました。
・Objective-Cを触った事が無い。
・iPhone実機持ってない。
・アルバイトで技術調査したりとか、プログラムほんのちょっとだけ書いたりとかした事はある。
・アルバイトの勉強がてら、自分でもiPhoneアプリ出せたら面白いと思いMacBookを購入。人生初Mac。


■資料
公式の資料がとても丁寧です。
iOS Reference Library
とりあえず必要そうなものに目を通してみましょう。

本は以下のものを読みました。
iPhone SDK 3 プログラミング大全 実践プログラミング (MacPeople Books)
木下 誠
アスキー・メディアワークス
売り上げランキング: 159271

Objective-Cの解説はありがたかったですが、iPhone向けプログラミングの部分はそれなりの感じ。

その後は以下の本を読みました。
iPhoneプログラミングUIKit詳解リファレンス
所 友太
リックテレコム
売り上げランキング: 23425

UIKitに関する部分がかなり勉強になりました。こちらがおすすめです。


■開発者登録と環境作り
プログラミングにはXcodeを使います。iOS SDK自体はお金を払わなくても開発者登録をすれば使えるはずです。アプリの公開にはiOS Developer Programへの登録が必要です(年間¥10,800)。なのでアプリを公開する段階になったらお金払って登録しましょう。
iOS Developer Programへの登録方法 - えんたつの記録
これの契約更新を忘れるとどうなるのかはこちらが参考になります。
App Storeから全アプリがDL出来ない状態になってしまった件に関するお詫びとその顛末 - frnk*blog


■練習に書いてみたサンプルアプリ
とりあえずソースコードを落としたりして色々遊んでみました。その延長で、こちらを実際に自分でプログラミングしてみたりとか。
iPhoneアプリを作ってみよう:目次エントリー - もとまか日記
丁寧な解説付きで1からプログラムを書いているサンプルはあまり無いので、かなり助かりました。ここでTabbarの使い方やUIWebViewの使い方を勉強。Interface Builderの使い方がありがたかったです。


■設計
どう画面が遷移するか、データはどこから持ってくるかとか、アプリの設計。紙にイラスト書いたりした程度で、難しい事はやってません。
企画・設計の段階で一度リジェクト基準に目を通しておきましょう。
fladdict » iPhoneアプリ審査での111の禁止項目(意訳)

何をすべきか、何ができるのかが全くわからなかったので、おおまかに設計しました。何かしたい事ができたら公式の資料を読んだり、逐一ぐぐって進めていきます。


■アプリレイアウト
自分の設計はどうやればアプリになるのか、基本的な枠組みを組み立て。
Navigation-based ApplicationとTab Bar Applicationって違うテンプレートで、両方が入ったテンプレって用意されていません。なので今回のようにTab Bar Applicationの中にNavigation-based Applicationを作るにはちゃんとInterfaceBuilderを操作する必要があります。こちらの資料が参考になりました。
iPhoneアプリ開発、その(157) 親ガメはどっちだよ?|テン*シー*シー
本当はテンプレに従って作成していくのが良さそう。


■RSS取得部分
今回作成したアプリの中身はRSSリーダーです。
現在CheckTrendは非同期通信を行っていますが、最初は同期通信でした。一度通信が始まると、通信が終了するまで動作はできないという仕様。参考にしたのはこの記事です。
iPhone SDK Tutorial: Build a Simple RSS reader for the iPhone: Apple News, Tips and Reviews «
本当はこちらの記事を参考にしていきたかったのですが、どうしても動作させられなかったんでこちらに。

最新バージョンではRSS取得部分を非同期通信にしました。これでデータ読み込み中でもちょっと操作できます。参考にしたのはこの記事
iOS 4のSDKで、Twitterを使ったiPhoneアプリを作る(1/4) - @IT
twitter向けの解説ですが、ちゃんと読んで一部改造するとRSSの読み込みに使う事が可能です。この記事の方法でUITableViewのデザインも、今までデフォルトのものだったのを改良しました。(自分のアプリではここはまだ改良しないといけなそうな部分)

あと、XML ParserについてNSXMLParserを使うかlibxml2を使うかとか色々選択肢があります。速度比較の資料はこちら。
How To Choose The Best XML Parser for Your iPhone Project | Ray Wenderlich
NSXMLParserからlibxml2に変えた例
iPhone用「ITproアプリ」2.0登場! - インフォメーション:ITpro


■RSS生成
Yahoo!pipesで生成しています。google急上昇ワードとかはRSS形式でデータが配布されていないので、これを適当に加工します。正規表現の資料とか読みまくりました。
それにしてもgoogle急上昇ワードのrss生成が不安定ですね。yahoo!pipes以外の手段を考えるべきかもしれません。


■ローカライズ
日本語と英語で処理を切り分ける必要があったので色々いじります。

・言語毎に表示する文字列を変える場合
この辺りを参考にしました。
A-Liaison BLOG: iPhoneアプリをローカライズ(国際化対応)してみた
iPhone/iPadアプリ作成の仕上げ・国際化・デバッグ(2/4)- @IT

・言語毎に違う処理をしたい場合
iPhone本体の言語設定により処理を分ける事ができます。
[iPhone SDK] 日時のローカライズ | Mac, iPhone, iPad


■広告挿入
広告はiAdとAdobで迷ったのですが、iAdはまだ日本向けに提供されていないのでAdmobにしました。
最初はUITableViewに広告を入れていました。方法はこちら。
AdMobの広告をUITableViewに表示する方法 - Tomute’s Notes
でも起動時にUITableViewを表示する為、起動時間が長くなる気がしたので、現在のバージョンではUIWebViewの下に広告エリアに作り直し。表示回数もクリック回数も激減したので、まあおまけみたいなもんです。

なおiAdは国内展開を電通が行う事が決定しました。将来的には日本でもiAdが表示されるようになります。今まで広告が無いと思ってたアプリに広告が出現・・・なんて事も考えられます。
Appleと電通グループ、日本でiAdを展開


■UIWebView部分
UIWebViewは「target="_blank"」が指定されたaタグを開くことができません。そこは自分で設定してやる必要があります。ネット上に解決策が何通りか存在しますが、結局どれが審査を通るのかは不透明です。。
また、デフォルトだとWeb画面が拡大されたまま拡大縮小ができないので設定が必要。
UIWebViewが拡大表示される - marcy_oの日記


■twitter連携
ShareKitという素晴らしいフレームワークを使って実現しました。コード追加したら簡単にボタンからtwitter投稿ボタンを設置できます。twitterだけでなく、アドレスを自動的にbit.lyで短縮してくれたりと本当に便利。Facebookにも投稿できます。この段階でtwitterやFacebookなどのAPI Keyの申請をしまくりました。英語ばっかりですが入力事項は多くないので簡単です。sharekitの使い方はこちらの記事が参考になります。
ShareKitを使ってiPhoneアプリのTwitter連携にトライ - Tomute’s Notes


■インジケータ表示
最初のバージョンでは画面上部に小さく読み込み中を表すインジケータを表示しているだけでしたが、待ち時間を少しでも短く感じてもらう為に必要と思い、インジケータをでっかく表示する事に。この記事のフレームワークを使用しました。
MOONGIFT : iPhoneアプリの読み込み時表示に「MBProgressHUD」 オープンソース・ソフトウェア/フリーウェアを毎日紹介
簡単に組み込めて、かつ見栄えが良いです。


■細かい話
色々細かい話も。

・異なるiPhoneのバージョンに対応するためのビルド
iOS 4.0 と iPhone OS 3.x の両方で動作するアプリケーションをビルドする設定 - 24/7 twenty-four seven

・Tabbarを一時的に非表示にする
TabBarを非表示にする: iPhoneアプリ開発備忘録

・アイコン作成。絵、描けません。GIMPSeashoreを使ってどうにかしました。平坦な画像を描いても、iTunes側で自動的に光沢を付けたり四隅をまるっこくしてくれます。
こういうサイトでちょっと作ってみるのも良いかも。
iCone


■公開
英語と日本語でアプリの説明文とか書いてスクリーンショットも用意して提出。3日~1週間で公開されました。
レーティングは正直に設定したら17になりました。画像表示するアプリだとレーティングは高めになるかも。

実機テストをやっていないので気づかなかったバグが。
・透過pngの扱いがシミュレータと実機で異なるらしく、シミュレータ上で表示が正常だったpngが実機では真っ黒に。「プレビュー」とかで設定し直したら正常に表示できました。
・シミュレータと実機で実行速度が違います(シミュレータがとても速い)。体感速度は実機で測定しないと意味が無いです。
・通信速度が遅くないとデバックしづらいので、「SpeedLimit」というソフトを入れて実験するようにしました。
ネットワークの通信速度を制限する Preference Pane "SpeedLimit" - 24/7 twenty-four seven


■わかったこと
出してみてわかったこと。

・最初から高いクオリティで出すべき
アプリ公開直後は無名アプリでもある程度のダウンロードがあります。ここでバグだらけだったり使いづらいアプリだとその後見向きもされないので、最初から高いクオリティを狙うべきです。また、新着アプリを機械的にコピペしているサイトがいくつかあるようなので、そこに掲載されるときに目立てるようなデザインにしたい所です。そういったサイトはバージョンアップに合わせて記事を更新とかしないので。。

・アプリ申請から受理までの期間はわからない
リジェクトもありえる為、予測がつきません。自分で指定もできるのですが、ランキング掲載に不利になるという噂も(ランキングに入らない僕には関係ないですが)。

・海外からも結構ダウンロードされる
僕のアプリの場合、日本からのダウンロードと同じかそれ以上に海外からダウンロードされているようです。海外も視野に開発するのも面白いかも。

・赤字です
沢山ダウンロードされて、頻繁に広告がクリックされるアプリを作らないと当然ながら赤字です。。まあ1万円支払えば世界に 向けてアプリが作れるので、勉強料としては安いかなと。