メイン

iOS アーカイブ

2010年07月18日

iPhoneアプリを一気に更新

ちょっと土日に時間があったので稚拙の3つのiPhoneアプリを一気に更新してみた。ものスゴイ対応は特にないのだけど,iOS 4というのが一番大きい。
それと無料の翻訳アプリだった Translator Lite - in your hands には今後のことも考えてiAdに対応してみた。まだ北米でしか広告が表示されないという話もあるようだがこの手のユーティリティアプリの場合,毎日起動してもらえる可能性もあるので実に結果が楽しみ。

SpeedMemo
 iOS 4マルチタスキング対応
Translator - in your hands
 iOS 4マルチタスキング対応
Translator Lite - in your hands
 iOS 4マルチタスキング対応
 iAd サポート

2010年07月11日

iOS 4に対応してみる - Retinaディスプレイアイコン編

正確にいうとiOS 4対応というよりもiPhone 4対応というのが正しい。
iPhone 4ではiPhone 3GSの縦横それぞれ2倍の解像度となる960×640ピクセル 解像度326ppiというスペックになっている。

アプリケーションとしてこれに対応させるには非常に簡単だ。
HomeScreenでのアプリケーションアイコンは,まずは今までの57x57のアイコンに加えてその倍である114x114のアイコンを用意する。もともとのファイル名がIcon.pngだったのに対してIcon@2x.pngという名前を付ける。
あとはInfo.plistで"Icon File"に加えて,"Icon Files"を追加してこの2つのファイル名を格納することで完了。

Appleにバイナリを送るときはよく出来ていて,仮に57x57なアイコンを含めないとバイナリのアップロード時に怒られることになる。だからiPhone 4向けのみということはできなくて必ずiPhone 3G/3GSやiPod touchのこともケアする必要がある。

ちなみにiPad用であれば上記の解像度が72x72になって,ファイル名もIcon-72.pngにすれば問題なし。

2010年07月10日

iOS 4に対応してみる - マルチタスク編

当初は完全にiOS 4のマルチタスク化を諦めていたのだが,使い込んでいくうちに対応している場合とそうでない場合とで結構な体感スピードの差があることに気づいた。
ということで,ある程度真剣に対応してみた。
※ここではiOS 4以上のみではなく3.X台もきちんとサポートする前提。

まずはアプリケーションのライフサイクルに対応する。
ライフサイクルはアプリの大元締めであるUIApplicationDelegateと各UIViewControllerで呼び出される各メソッドで対応する。
UIApplicationDelegateの場合には,以下のような感じだ。

・application::didFinishLaunchingWithOptions
 以前よりお馴染み。アプリケーションがまさに起動した時に呼ばれる。
・applicationDidEnterBackground:
 iOS 4から導入された。バックグランドになると呼び出される。
・applicationWillEnterForeground:
 これもiOS 4から。フォアグラウンドつまりバックグランドから復帰する前に呼ばれる。
・applicationWillTerminate
 今までも使えてたメソッド。アプリケーションが終了しようとする時に呼ばれる。

あとはアプリケーションのアクティブになるならないでapplicationWillResignActiveやapplicationDidBecomeActiveも使うことはできる。
UIApplicationDelegateでの処理なので個人的には大きな処理を入れていない。これらのメソッドを実装しても単純に呼び出されないだけなので,Ver.3.2以前でも問題なく動作する。

さて各UIViewControllerでの対応だが今まではloadView/viewDidLoad/viewWillAppear/viewDidAppear/viewWillDisappear/viewDidDisappearなどViewとしてのライフサイクルで対応していたのがほとんどだが,ちゃんとアプリケーションのライフサイクルに対応する必要がある。
そんな時はNSNotificationを使えばよい。以下のようなコードをviewDidLoadにでも書いてselectorなメソッドを実装すれば上記のUIApplicationDelegateで発生していた各イベントをView側でも受け取ることができるようになる。

if (&UIApplicationDidEnterBackgroundNotification) {
    [[NSNotificationCenter defaultCenter] addObserver:self
        selector:@selector(appDidEnterBackground:)
        name:UIApplicationDidEnterBackgroundNotification
        object:[UIApplication sharedApplication]];
}

ここで3.Xも同時に対応する場合にはif文が重要。特にBackground/ForegroundはiOS 4以降のみ対応しているので,ビルド時には問題ないけども動かすとたぶんクラッシュするはず。

基本的にはこれでライフサイクル対応はできたので,アプリケーションの各Viewの状態からBackgroundに遷移させてどうなるかその後にForegroundにして問題ないかをチェックしていけば問題ない。個人的にはまったのはAlertView表示中にBackgroundになった場合だったりしたので,細かい部分も忘れずに。

2010年07月06日

iPhone Multitasking Fast App Switchingを無効化する

つまりiOS 4で採用されたマルチタスク機能を特定のアプリで無効化するというネタ。

この無効化設定は非常に簡単で,アプリの"Info.plist"において
"Application does not run in background(UIApplicationExitsOnSuspend)" = YES(True)
に設定するだけ。

ちなみに僕が作っているSpeedMemoも起動時のView表示に特徴を持たせたり,終了時にデータを自動保存するといったことをしているため,バックグラウンドでそのまま状態保持されると困るというわけ。
最初は applicationWillEnterForeground と applicationDidEnterBackground を駆使してなんとかしようと思ったものの直ぐに上記に気付いて特別なことをしないで済んだ。

ちなみにアプリの生存期間と各メソッドについては以下のサイトが非常にわかりやすい。
マルチタスキング対応後のアプリのイベントフローをまとめてみた - A Day In The Life

2010年06月13日

AppSales : iTunes Connect売上を管理する

appsales.png
iPhoneアプリを始めてリリースしたは2010年2月終わりだったのだけど,4月に入るまで自分のアプリの売上はいちいちiTunes Connectにアクセスして見ていた。これが結構不便。
会社のとある集まりでこのアプリの存在を知ってからは正直最初の1ヶ月を無駄にしたと思えるほど便利なアプリだ。ただしこのAppSalesというアプリは一般配布は今はされていないらしい。

公式アプリとの違い
Appleからは正式なアプリであるiTC Mobile Appが最近リリースされたものの,使い勝手がいまいちであることとダウンロード数しかわからないため,開発者の関心事である売上が見えてこない。
それに対してこのAppSalesは売上数(Sales)のみならず利益(Revenue)ベースでも見えるため実に使い勝手がいい。ただし面倒なのは自分でビルドしてインストールが必要ということ。ちなみに最近iPad対応して,公式アプリリリースに合わせて変わってしまったiTunes Connectの情報取得方法にも対応したらしい。

まずはダウンロード
以下からダウンロードできる。コマンドラインでgit pullしてもいいし,ダウンロードタブからZIPかTARを落とせるはず。
omz's AppSales-Mobile at master - GitHub

ビルドする
正直どの方法が正しいのかいまいちわからないまま導入してしまったのだが,自分がダウンロードしてからやったのは以下の通り。
iTunes ConnectでAppSales用のAd Hoc Provisioning(Distribution)で作成。
XCodeの「プロジェクト」>>「プロジェクト設定の編集」を開く。
コード署名IDに1で手に入れたProvisioningのIDを設定する。
コード署名権限にテキストで「Entitlements.plist」と記入。
あとはベースSDKやDeployment TargetをiPhone/iPadアプリを作るのと同じように設定。
これでRelease版でインストールするととりあえず動き出す。これだとある種自分が開発してDeployしたとの同じ状態。きちんとやるならDistributionビルドしてiTunesにDrag&Dropして転送するといいのかな?

ちなみにこのAppSalesはMacもあるようだ。

$MTProductName version=

tokyobuddha

Powered by FeedBurner

クリエイティブ・コモンズ・ライセンス