ぬこ易占い

iPhoneアプリ「ぬこ易占い」をリリースしました!
(って昨年暮れの事なんですが…年末忙しくてブログの更新できず…今頃ご報告です…)

易経をもとに、ヒト用とぬこ用の占いが出来ます。
易経は陰と陽の組合せから、8種類(天、沢、火、雷、風、水、山、地)の卦を構成し、さらにそれら(上卦・下卦)を組み合わせて64種類の卦ができます。
(本当はその先にもっと深いところがあるのですが…)

とにかく結果は64通り、それぞれにヒト用と猫用の結果を準備したので、それをNSArrayに格納し、さらに64個のNSArrayをNSArrayに格納と、多次元配列の考え方で結果データを準備しました。

肉球画像をタップするたびにランダムに0か1を発生させ、それを8回繰り返した結果から、該当する占い結果をNSArrayから表示します。

開発中に何度もiPhoneで占いを繰り返していると、なんだかだんだんiPhoneの挙動がモッサリしてきました。なんだろう…これってもしかしてメモリリークとか…?

たしかInstrumentsとかで調べるんだよな…あれっ?どこだ…Xcode4.2になってInstrumentsがどこを探しても見つかりません、やっとのことでProduct→Profileを選びInstrumentsが起動されLeaksを選ぶと、まさしくメモりリークが発生していました!
ネットの画像等で見た事はありましたが、今まで体験した事がなかったので、Leaksのグラフが伸びるのが面白く、何度も占いを繰り返してみました…(^_^;)
さて、何かをreleaseし忘れだと調べると、占い結果のNSArrayをreleaseし忘れていたので、releaseを追加して無事解決しました。

今回、猫の鳴き声を出すためにAudioServicesPlaySystemSoundで効果音を鳴らしていたのですが、iPod touchでテストした同僚が、本体のボリュームを0にしても音が鳴ってしまうことに気付きました。iPhoneだと本体のボリュームに応じて効果音が小さくなるのですが、ネットを調べても短い効果音ならAudioServicesPlaySystemSoundを使えと出て来ます。
AudioServicesPlayAlertSoundも試した見ましたが、結果は同じ、iPod touchでは効果音が消せません。
AVAudioPlayerを使って鳴らしてみると、iPod touchでもボリュームを絞れるようになりました。でも、この方法だとバックグラウンドで音楽を聴いている時に効果音を鳴らすと、音楽が止まってしまいます。音楽を聴きながらiPhoneでゲームをしていて、音楽が止まってしまうとがっくり来ていたので、私的には嫌だったのですが、iPod touch所有の同僚が「絶対にiPod touchでボリュームが絞れないといやだ!」と主張するので、仕方なくこの方法を採用しました。
この辺、詳しい方、ご教授いただけないでしょうか。

肉球タップは猫の手でも可能です。
サポートページに動画もアップしてありますので、ご覧ください!

App Storeでの並び順

App Storeのカテゴリトップの下段の「全ての [カテゴリー名] iPhone App」欄の並び順で「リリース日」を選ぶと、同じリリース日内はアプリ名順(なんとABC順!)で並んでいる事を、皆さんはご存知だったのでしょうか?

アップデート版が今日付でリリースされ、カテゴリトップにチラッと表示されるのを楽しみに、数時間毎にApp Storeを覗いていたのですが、やっと並んだと思ったら今日が更新日のアプリの中の一番末尾!

え…なぜ…?

一瞬Appleの陰謀かと疑いましたが…、よく見るとトップページに並んでいるのは英語名のアプリばかり…ABC順に並んでるではありませんか〜!
日本語名のアプリはその後、そして「猫」で始まる我がアプリは本日付けの末尾という訳でした…(T_T)

皆さん、アプリ名はABCで始まる名前にしましょう!

ちなみに米国のApp Storeを覗いたら、英語名「Calorie〜」となる我がアプリは、堂々カテゴリトップの3番目に並んでいました…ハハハ…

「猫カロリー計算」バージョンアップしました

サルでき公認アプリにしていただいた「猫カロリー計算」をバージョンアップしました。

1)猫の体重の単位をグラム/ポンド切換えられるようにしました。
切換えた単位を次回起動時に引き継げるように、NSUserDefaultsに記録するようにしました。

2)スタート画面の写真を、ユーザーのカメラロールから好きな写真を選んで入替えられるようにしました。
UIImagePickerControllerでカメラロールからsourceTypeをSourceTypePhotoLibraryにして写真を選べるようにして、写真を決定したらimagePickerController:didFinishPickingMediaWithInfoで、画像をリサイズ、トリミングして保存しています。
設定画面のtableviewの中にサムネイルも表示しました。これにはAppleのリファレンスの「iOS Table View プログラミングガイド」が役立ちました。


App Storeで見る

と、ここまでは通常のリリース。
これだけでは「サルでき」に載せるには意味がありません。
今回のテーマはここからです。

実はアップデート版のリリースをするのは今回が初めてだったのですが、申請時にアプリのカテゴリーを変更出来る事を初めて知りました。
「ライフスタイル」でリリースしていたのですが「ヘルスケア/フィットネス」の方が良いかな〜と変更しました。

重要なのは、アプリのSubmit時にリリース日について以下の様な選択肢が表示されます。
・Automatically release [アプリ名 バージョン] once it has been approved
・I will release [アプリ名 バージョン] after it has been approved
申請が通ったら自動的にApp Storeにリリースするか、それとも申請通過後自分で日にちを決めてリリースするか、という事のようで…
そりゃ一刻も早くApp Storeに並べて欲しいからと、Automaticallyの方を選択しました。

申請から5日後の12/7の朝6:30にin Reviewになり、1時間半も経たないうちにReady for Saleになりました。
しかし、Ready for SaleになってもすぐにはApp Storeのカテゴリのトップページには並びません。
待つ事数時間、時差の関係もあり我がアプリの更新日は12/6付。カテゴリのトップページにはすでに12/7付のアプリ達がずらずら〜っ!結局掲載された頃にはずーっと下の方…
これではせっかくアップデートしたのに誰の目にも触れるチャンスがありません…(T_T)

申請通過後自分で日にちを決めてリリース、の方を選んだ方が、カテゴリトップページに露出する可能性が高そうです。

じつはiOS5でちょっと不具合が出て、修正版を即申請しました。
申請通過後自分で日にちを決めてリリース、の方を選んだ事は言うまでもありません!
さて、申請通過後希望日時にカテゴリトップに表示されるかどうか…楽しみです (^_^)v

【2011/12/14 追記】
iOS5での不具合(だけ)を修正したVer1.2を申請したところ、1日で審査を追加しました。
NZW31さんの記事も見つつ、その前にavailability dateを今日(12/14)に変更してリリースボタンを押したところ、とりあえずは目論見通り更新日が今日になりました。

iOS5.0.1にアップデート

iPhoneのiOSを4.3→5.0.1にアップデートしました。
5.0へのアップデートで数時間もかかって途中で失敗とか、iPhone内のデータが飛んだとか…色々と恐ろしそうな不具合が報告されていたので、様子見をしていましたが、5.0.1になっているし、その後不具合の噂も聞かないのと、Xcodeも4.2にバージョンアップして、ぼちぼちiOS5でアプリを検証する必要も出て来て、ついに決行しました!

数時間かかるとの情報も聞いていたので覚悟していましたが、約1時間で無事終了。
ちょっと拍子抜け…(^_^)
iPhone内の音楽データが約1.5GB、アプリが4.6GB、これって数時間かかったヒトほど入っていないってことなのかな?

アップデートも終盤に差し掛かった頃、iTunes側で「復元中です…」で進捗バーが止まっている様な気がして、iPhoneの画面を表示してみたら、iCloudの使用開始の確認画面で入力待ちになっていて、とりあえずOS X Lionも使っていないのでNOにしたら、引続きiTunesアカウントの入力等、少々iPhone側での設定が必要でした。
ほったらかしてたら、ず~っとそこで止まっていたのかな?

iPhoneの設定等のスイッチ(ON/OFF切換え)が丸くなって、ちょっとかっこ良くなりました!

Xcodeではオーガナイザでデバイスを選び、デバッグに使う(だったかな?英語でそんな意味の表示だった)をクリックしないと、デバッグで使い始められませんでした。

他人の作ったアプリのソース

仕事上の都合で、他人の作ったアプリの修正と、多言語化をする事になりました。

Xcodeでソースを開いて「う〜む…」(汗)

人の書いたプログラムは分かりにくいというのは、どのプログラム言語でも言われる事ですが、Classファイルのどれが何の機能なのか、ViewController_***.h/mというファイル名だけではなかなか推測できず、何十もあるClassファイルを片っ端から開いてはソースを読む(読んでもなかなか分からない…)という作業を続け、やっとどのClassが何なのか分かるようになるまでに、かなりの時間を費やしました。

Class名は後で見て、機能が何だか分かる様なネーミングにしておかないと、この調子じゃ自分のプログラムも1年後に見たら、チンプンカンプン…てな可能性もありそうです。