読者です 読者をやめる 読者になる 読者になる

A Day In The Life

とあるプログラマの備忘録

ゲーム開発初心者がはじめて2Dゲームを作ってみてわかったこと

こちらの記事にも書きましたが先日「Hedgehog Drive」という2Dのゲームをリリースしました。 ハリネズミと遊ぼう!指でなぞるだけのシンプルな2Dゲームをリリースしました アプリと違ってゲーム開発は初めてということもあり、苦労したところが多かったので…

ハリネズミと遊ぼう!指でなぞるだけのシンプルな2Dゲームをリリースしました

先日、iOS向けの2Dゲーム「Hedgehog Drive」をリリースしました。 画面を指でなぞって丸いセルを消していくシンプルなゲームです。アプリは無料で広告表示もありません。 4才の娘がルールを理解して遊べるようにゲームのバランス調整をするのが大変でした。…

新作アプリ即興ピアノをリリースしました。

昨日2月14日に新作iPhoneアプリ「即興ピアノ」をリリースしました。 即興ピアノは音階を固定(例えば C Major とか G Major とか)してピアノを弾くことができます。音階が固定されているので適当に弾いても音がにごらず即興演奏で弾いたかのように聴こえます…

CLLocationManagerDelegate のメソッド内で CLLocationManager インスタンスを release すると EXC_BAD_ACCESS で落ちる

CLLocationManagerDelegate の didUpdateToLocation メソッド内で CLLocationManager のインスタンスを release すると EXC_BAD_ACCESS が発生してアプリが落ちるという現象にハマったのでその対処方法をまとめます。 @interface HogeController : UIViewCon…

iPhoneアプリ開発時のメモリ管理で気をつけること(マルチスレッド編)

以前iPhoneアプリ開発時のメモリ管理で気をつけることという記事を書いたのですがマルチスレッド時のメモリ管理に関して全く触れてなかったのでまとめてみました。 NSAutoreleasePool はスレッドごとに作成する 処理を別スレッドで実行する場合、スレッドご…

iPhone/iPad & Androidプログラミング入門

iPhone/iPad&Androidプログラミング入門 (日経BPパソコンベストムック) 去年の12月に日経ソフトウェアに書いた記事「16個のサンプルで一目瞭然高度な機能がすぐ使える!」がiPhone/iPad & Androidプログラミング入門に再掲載されました…

知識ゼロからはじめるiPhoneアプリ開発

iPhone アプリ開発を初めてはや2年。わけわからんレベルからなんとかアプリをリリースするところまでこぎつけました。もともと趣味ではじめた事ですが今は仕事でも iPhone アプリ開発をしています。ここに至るまで自分が調べたことや参考にした文書をアプリ…

マルチタスキング対応後のアプリのイベントフローをまとめてみた

※iOS 5の登場でこの記事の内容は古くなりました。最新の情報は以下の記事をご覧ください。 iOS のイベント駆動をライフサイクルイベントとユーザアクションイベントにわけて理解する iOS4で導入されたマルチタスキングですが便利な反面イベントの発生順序が…

iPhone の地図上に簡単に図形を書く方法

以前は MKMapView 上に線を引いたり四角形を書いたりするのに自前で View を作成しないといけませんでしたが iOS4 になって地図上に図形を書くためのクラスが追加されました。使い方がわりと簡単なので紹介したいと思います。 地図に線を引く 地図に線を引く…

iPhoneとAndroidでちょっとしたデータの保存方法を比較してみる

データベースを使うほど大げさなものじゃなくて、ちょっとしたデータを保存したいときって結構あると思います。 そんな時iPhoneはNSUserDefaultsクラス、AndroidはSharedPreferencesクラスを使います。両者ともにKey-Value形式でデータを保存できます。ただ…

タイマーを使って電子コンパスの動きを滑らかに見せる方法

iPhone 3GSの電子コンパスは角度が変わったときに値を取得することができます。AR系アプリや地図アプリなんかでコンパスの値と連動させてUI部品の位置を変更する場合、角度が変わるタイミングでUI部品を動かすとどうしても動きが「カク」っとなってぎこちな…

iPhoneとAndroidのアプリケーション間連携方法を比較してみる

アプリAとアプリBがあり、アプリAでテキストボックスに文字を入力しボタンを押すとテキストボックスの内容をアプリBの画面に表示するサンプルを使って説明します。 iPhoneの場合 iPhone では UIApplication クラスの openURL メソッドを使うと他のアプリを起…

Podcast「Apple News Radio ワンボタンの声」の特番で本ブログ記事が紹介されました。

Podcast「Apple News Radio ワンボタンの声」の特番で本ブログ記事iPhoneアプリの販促活動に関してまとめてみたが紹介されました。おかげさまでブログのアクセス数とLinkedWordの売り上げが増えました。本当に有り難うございました。 特番には「そら案内」の…

LinkedWordのアイコンを変更しました。

英英辞書アプリLinkedWordのアイコンを変更しました。言葉のつながりを木で表してみました。 変更前 変更後 Processingを使って木を描き、それをベースにInkscapeで葉っぱと文字を追加しました。 関連記事 ビジュアル英英辞書LinkedWordをリリースしました

iPhoneとAndroidで真北の取得方法を比較する

この前書いた日経ソフトウエア2010年1月の記事の中でiPhoneとAndroidの電子コンパスについて書いたのですが、紙面の都合上Androidで真北をとる方法を載せることができませんでした。せっかくなので補足の意味も込めてAndroidで真北をとる方法を紹介しiPhone…

日経ソフトウエア2010年1月号にiPhoneとAndroidの記事を書きました。

11月24日に発売された日経ソフトウエア2010年1月号に同僚の麻野さんと共著で「iPhone vs Androidプログラミング」という記事を書きました。 この記事の元ネタは以前このブログで書いた以下のブログ記事です。 開発者目線でAndroidとiPhoneを比較してみる こ…

i新幹線予約をリリースしました。

iPhone/iPod TouchでJR東海のエクスプレス(Express)予約サービスを使うためのアプリi新幹線予約をリリースしました。 現在、iPhoneの標準ブラウザでエクスプレス予約サービスを表示すると画面右端が切れてしまいサービスを使うことが出来ません。このi新幹線…

iPhoneアプリの販促活動に関してまとめてみた

ビジュアル英英辞書アプリLinkedWordをリリースして1週間ほど経ちました。色々と販売促進(プロモーション)活動をしてみましたがむやみやたらと告知をしても効果が出るわけではありませんでした。 次から効率よく販促できるように今回行った販促活動とその効…

ビジュアル英英辞書LinkedWordをリリースしました

8月からアップルに申請を出していた英英辞書アプリLinkedWordがやっと審査に通りました。 機能はとてもシンプルで英英辞書に画像検索と類義語、対義語検索機能を付けたアプリです。英語の学習にちょうど良いと思います。ちなみに辞書検索にはWordNet、画像検…

AVAudioRecorder の基本的な使い方

AVAudioRecorder クラスの日本語の情報があまりなくて実装するときに結構ハマったので実装方法をまとめておきます。 オーディオ情報の設定 まずアプリでオーディオのどのような機能(再生とか録音)を使うかを設定します。AVAudioSession クラスの setCategory…

iPhoneでGmailをプッシュ受信すると文字化けする

以下の記事でiPhoneでGmailをプッシュ受信する方法が紹介されていたので試してみました。 iPhoneの設定のみでGmailをPush受信する方法 うまくGmailをプッシュ受信できたのですが、ただ残念なことに携帯電話(確認したのはSoftBank)からメールを送ると日本語が…

iPod Touch卒業

休み中にiPhoneを買いました。auが好きだっただけにかなり迷いましたがiidaパッとしないしAndroid携帯もいつになるかわからないのでやめました。 ソフトバンクショップで買ったのですがなかば無理やりWホワイトと基本オプションパックに入らされ後々解約とか…

リジェクト2回目

昨日、Appleから2回目のリジェクト連絡がきました。理由は以下の通りです。 "Applications may be rejected if they contain content or materials of any kind (text, graphics, images, photographs, sounds, etc.) that in Apple's reasonable judgement …

iOSアプリ開発のメモリ管理で気をつけること

Objective-C での開発にだいぶ慣れてきたのですが、いまだメモリ管理まわりでハマることが多いのでまとめてみました。 メモリを確保してから解放するまでの流れ メモリを確保してから解放するまでの流れは以下の図のようになります(図はアップルのサイトから…

In Reviewのまま2週間がたちました。

8月11日に再レビュー依頼をしてから2週間経ちましたがAppleからはなんの音沙汰もなく、不安になり以下のような問い合わせメールを出してみました(英語に自信がないので間違ってたらご指摘ください)。 Subject:When does the review end? Hello, App Review …

リジェクト1回目

8月9日に、申請していたiPhoneアプリの審査結果が出ました。結果はリジェクトでした。 理由は以下の通りです。 Our review indicates that the application content is not consistent with the current rating because it contains potentially mature cont…

アップルにアプリを申請しました。

昨日、iPhone/iPod Touchアプリを一つアップルに申請しました。今回作成したアプリは複数のWebサービスを使った英英辞書アプリです。土日と仕事終わってからの時間を使って約1か月ほどで作成しました(開発開始は7月7日ぐらい)。 以下開発にかかった工数(延べ…

複数のHTTPリクエストを投げるときはNSOperationを使おう

現在、iPhone SDKで簡単なマッシュアップアプリを作成中です。マッシュアップアプリなので一度の操作でいろんなところにHTTPリクエストを投げる必要があるのですが、そんな時にNSOperationを使うとものすごく便利です。NSOperationを使うことで複数のHTTPリ…

UINavigationBarにUISearchBarをセットする時に気をつけること

init系(initWithNibName:bundle:とか)メソッドで以下のようにUISearchBarをナビゲーションバーにセットするとナビゲーションバーのバックボタンを押したときに再びtableView:accessoryButtonTappedForRowWithIndexPath:メソッドが呼ばれてしまいます。 // 呼…

UIViewで2つ以上のアニメーションを同時に実行する方法

同時に2つ以上のアニメーションを動かす場合は以下のようにbeginAnimations: context:メソッドとcommitAnimationsメソッドをネストすると出来ます。 [UIView beginAnimations:nil context:NULL]; { // アニメーション1つ目 [UIView beginAnimations:nil con…

iPhone用アイコン

最近、iPhoneで使えるアイコン(30×30)の作成をしています。普段物をどう見ているか(とらえているか)で出来が全然ちがいます。 簡単そうに思えて意外に難しいです。 たいした物ではありませんがCreative Commonsライセンスで公開します。 ライセンス icons …

自分の作ってるものは決定的に何かが違う

何かが違う 最近、iPhoneアプリの開発をやってますが、自分の作ったもののクオリティがApp Storeに出回っているアプリと決定的に何かが違うので悩んでいます。うまく説明できないのですが、ものすごく深い溝のようなものがあると感じています。 違うと感じる…

UITableViewのハイライトについてまとめてみた

UITableViewの行選択時のハイライトって普通にUITableViewControllerを使っているときは問題ないのですが、うっかりviewWillAppear:メソッドをオーバーライドしたりUIViewControllerを使ったときなんかにハイライトが解除されなくて困ることがよくあります。…

ナビゲーションバーに次へ戻るボタンを追加する方法

iPhone/iPod Touchのメールアプリ(Mail.app)で使用されている「次へ」ボタンと「戻る」ボタンの実装方法です。 ナビゲーションバーにUISegmentedControlを追加するのが基本的な実装方法です。 @implementation SampleViewController - (void)viewDidLoad { N…

AndroidとiPhoneのUIの実装方法を比較する

使えるUI部品の種類は似たり寄ったりですね。iPhoneはガベージコレクションが使えないのでオブジェクトの開放をしてやる必要があってめんどくさいです。 Viewの種類 iPhoneにはチェックボックスがなく代わりにUISwitchがあるのが面白いです。両者の違いはな…

AndroidとiPhoneのイベントハンドラの実装方法を比較する

両者の大きな違いはiPhoneはInterface Builderでイベントの定義ができるのに対しAndroidはレイアウトXMLでイベントの定義ができないところです。 またiPhoneはselectorという関数ポインタに似た仕組みがあるのでコード上でも割と簡単にイベントの定義ができ…

開発者目線でAndroidとiPhoneを比較してみる

iPhone と Android 両方のアプリ開発を経験したので両者を比較してみます。 技術情報 iPhone iPhone Dev Center iPhone Dev Center(日本語) Android Android Developers Android Developers(日本語) OS iPhone Mac OS Xベース Android Linuxベース 開発言語/…

AndroidとiPhoneの加速度計アプリの実装方法を比較してみる

大きな違いとしてはiPhoneの場合加速度計のみ管理しているのに対してAndroidは他のセンサー(温度計や磁気センサーなど)と一括りにして管理しています。またiPhoneでは加速度計オブジェクトを直接取得できるのに対しAndroidでは加速度計オブジェクトを取得す…

UITableViewCellを継承せずにカスタムセルを作る方法

テーブルに表示されるデータのレイアウトを少しかえたい時や項目を追加したい時なんかに便利です。 UITableViewControllerを継承したクラスまたはUITableViewDataSourceとUITableViewDelegateプロトコルを実装したクラスのtableView:cellForRowAtIndexPath:…

iPhoneとAndroid

iPhoneとAndroidをユーザーの視点から比較した記事を発見しました。 AndroidよiPhoneに学べ…ハードじゃなくてソフトが重要なのよ なかなか的を射ているなぁと思いました。 僕がAndroidアプリ開発を中断してiPhoneアプリ開発に路線変更したしたのはiPhoneのUI…

NDA正式解除

AppleとNDA解除の新しい契約を結びました。 これで心おきなくiPhoneネタが書けます。

画面の表示が切れる

AppDelegateオブジェクトでUIViewControllerのインスタンスを生成してaddSubViewすると画面表示が切れるという現象に悩まされてます。 @interface AppDelegate : NSObject { UIWindow *window; UIViewController *viewController; } @property (nonatomic, r…

Responder Chainとイベント

iPhone/iPod Touchで画面をタッチすると以下のイベントが発生します。 touchesBegan:withEvent: touchesMoved:withEvent: touchesEnded:withEvent: touchesCancelled:withEvent: このイベントはUIResponderというクラスを継承しているUIViewやUIViewControll…

モーダルビューの表示

iPhone SDKで画面の遷移のやり方がやっとわかりました。 一度わかってしまえばなんてことないのですが、今までの経験(VB,Swing,Android...etc)が全く通用しないので苦労します。 Interface Builderの使い方にもようやく慣れてきました。 道のりはまだまだ長…

NDA規制緩和

iPhoneのNDA規制が緩和されました。 Androidの実機も発売されることだしいいニュースが続いてますね。 参考 http://developer.apple.com/iphone/program/

iPhoneでHello world

iPhone SDKでHello worldアプリを作成しました。 3時間かかってやっとラベルにHello worldという文字を貼付けて表示できるようになりました。 どこまでInterface Bilderがやってくれてどこから自分でコード書けばいいのかわからず苦労しました。 UIViewCont…

iPhone SDKダウンロードしてみた。

Mac買ったので早速iPhone SDK落としました。 それにしても1.3ギガってデカ過ぎ...。 Objective-C勉強しなきゃ。