A Day In The Life

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

objective-c/objc

OpenGL ES入門 その2 -三角形の描画とシェーダーの仕組み-

OpenGL ES入門 その1 -描画の仕組みとバッファ-の続きです。今回は OpenGL ES を使って三角形を描画してみます。三角形を描くだけなら簡単そうな気もしますが、三角形を描くにはシェーダーを用意しきゃいけないという少し面倒くさい作業があるのでその辺の説…

OpenGL ES入門 その1 -描画の仕組みとバッファ-

最近 Cocos2d-x を触っているとどうしても細かいところで OpenGL の知識がないと理解できないみたいなことが多いです。いままで避けてきた感がある OpenGL の勉強をそろそろ始めてみようかなと思い少しづつ日記的にまとめていこうと思います。OpenGL と言っ…

Cocos2d-x でネイティブ連携する方法

Cocos2d-x でゲームを開発していると広告を表示させたり、ランキングを追加したり、課金を入れたり、SNS や Twitter と連携したり、アクセス解析をしたり、など iOS や Android の機能を使わないと実現できない機能があります(このようにプラットフォームと …

プロの力が身につく iPhone/iPadアプリケーション開発の教科書が発売されました

1月17日に「プロの力を身につける iPhone/iPadアプリケーション開発の教科書」の改訂版が発売されました。改訂内容は以下の通りです。 iOS 8.1とXcode 6.1に対応 内容をすべて見直し文章を大幅に修正 新プログラミング言語 Swift に対応 よろしくお願いしま…

SpriteKitではじめる2Dゲームプログラミング

先日こちらの記事にも書きましたが「Hedgehog Drive」というゲームをリリースしました。このアプリのゲーム部分は SpriteKit を使って実装しました。初めて SpriteKit を使ったので備忘録的にこのフレームワークの使い方をまとめてみました。 2D ゲームで使…

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

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

Autolayout に対応した画面で UIScrollView を使う時のコツ

iOS 6から導入された Autolayout(オートレイアウト)を最近になって本格的に使うようになりました。 4-inch の iPhone が主流になりつつある中、アプリを Autolayout に対応させるのはほぼ必須といっても良いと思います。Storyboard と格闘してなんとかコツは…

iPhone/iPadアプリケーション開発の教科書が増刷されました。

皆様ご購入ありがとうございます。 このたび「プロの力を身につける iPhone/iPadアプリケーション開発の教科書」が増刷されました。 本当にありがとうございます。めちゃくちゃうれしいです。 増刷分では以下の記事に掲載した訂正箇所が修正されています。 …

【訂正】プロの力を身につける iPhone/iPadアプリケーション開発の教科書

「プロの力を身につける iPhone/iPadアプリケーション開発の教科書」の中に誤りがありましたので訂正させていただきます。 3-3 データを活用したアプリの作り方 235ページ下から4行目 訂正前 次のように、UILabel と UITextField オブジェクトを配置します。…

NSManagedObjectでTo-Many関連を使用したときにコードの自動生成がされないバグの解決方法

Core Data の NSManagedObject クラスで以下のように To-Many(One-To-Many) 関連を使ったときにコードの自動生成をすると実装コードが生成されない場合があります。 通常の To-Many 関連では問題が起こらないのですが以下のように Ordered(順序) を指定して…

本日発売!プロの力を身につける iPhone/iPadアプリケーション開発の教科書

ついにこの日がやってきました。 「プロの力を身につける iPhone/iPadアプリケーション開発の教科書」本日発売です。 先ほど職場近くの「MARUZEN & JUNKUDO」さんに行ってみたらバッチリ置いてありました。感無量です。読者の皆様のアプリ開発助けになれば幸…

iOSアプリ開発の本を書きました

ご無沙汰しております。約半年ぶりの記事です。 この間、ずっと iOS アプリ開発の本を書いていました。タイトルは「プロの力を身につける iPhone/iPadアプリケーション開発の教科書」です。 出版社様から書籍執筆のお話を頂いたのが約1年半前でした。やっと…

iCloud プログラミング入門

「iOS データ設計入門」でデータはメモリ、フラッシュドライブ、iCloud に保存することができると説明しました。今回は iCloud にデータを保存して複数端末でデータを共有する方法について説明していきます。 iCloud って何? クラウドと聞くとなにやら難し…

SenTestCase で非同期処理のテストをする方法

今年の2月ごろから iOS 用の HTTP 通信ライブラリの開発をしていています。 シンプルで簡単に HTTP 通信が出来るライブラリを公開しました 非同期で HTTP 通信をするだけの簡単なライブラリなんですが、ユニットテスト(Unit Test)をする時に少しコツが必要だ…

iOS アプリの画面開発の基礎を理解する

前回の記事「iOS アプリの構造がどのようになっているか紐解いてみる」で iOS アプリの構造について説明しました。深いところの説明ばかりだったのでもう少し浅いところ、画面の見た目や画面遷移を実装する方法について説明します。 ユーザの要望がどのよう…

UIViewController の基礎知識

内容が薄かったため下記ページに統合しました。 iOS アプリの画面開発の基礎を理解する

iOS アプリの構造がどのようになっているか紐解いてみる

iOS アプリの構造がどのようになっているのか理解しなくても簡単なアプリを開発することは可能です。実際自分も iOS アプリの開発をはじめたことろはそうでした。しかしアプリの構造を理解していないと複雑なアプリ、例えばタブとナビゲーションを組み合わせ…

iOS のイベント駆動をライフサイクルイベントとユーザアクションイベントにわけて理解する

iOS は タッチパネル式端末用に最適化された OS で ユーザが端末を操作しやすいように GUI の仕組みが提供されています。iOS アプリ開発では主に GUI を操作するプログラムを実装していきます。iOS の GUI プログラムはイベント駆動型と言われるプログラミン…

シンプルで簡単に HTTP 通信が出来るライブラリを公開しました

iOS で HTTP 通信をするときはいつも ASIHTTPRequest を使っていました。 しかし残念なことに最近 ASIHTTPRequest の開発が終了してしまい Automatic Reference Counting(ARC) に対応する予定もないようなので自分で ARC に対応した HTTP 通信のライブラリを…

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

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

失敗しない iOS In-App Purchase プログラミング

最近、無料アプリや無料ゲームにアプリ内課金を設置してユーザにアイテムを購入してもらうタイプのものが増えています。App Store トップセールスのうち半数以上がこの無料 + アプリ内課金で占められています。今後アプリ内課金は iPhone/iPad アプリで儲け…

サルでもわかる Core Data 入門【実装編】

サルでもわかる Core Data 入門【概念編】の続きです。今回は実際に Core Data を使ったプログラムを作成します。 サンプルアプリの概要 アドレス帳アプリを作りながら Core Data の使い方を説明していきます。 以下はサンプルアプリの画面構成です。 連絡先…

サルでもわかる Core Data 入門【概念編】

iOS でデータを永続化する方法の続きです。今回は Core Data を使ったデータの永続化方法について説明します。 本記事では複雑で習得が難しいとされている Core Data について概念編と実装編の2回に分けて説明していきます。記事の全体的な流れとしては Core…

NSUserDefaults を使ったデータの保存方法

iOS でデータを永続化する方法の続きです。今回は NSUserDefaults クラスを使ったデータの永続化方法について説明します。このクラスを使うと簡単にデータの保存と読み込みが出来るのでアプリ開発で頻繁に使用されています。 NSUserDefaults って何? アプリ…

iOS でプロパティリストを使ったデータの保存方法

iOS でオブジェクトをシリアライズする方法に続き今回もデータ永続化方法の紹介です。 iOS にはプロパティリストと呼ばれるファイル形式があります。プロパティリストは NSArray や NSDictionary クラスを使って簡単にデータの読み書きができます。 ここでは…

iOS でオブジェクトをシリアライズしてファイルに保存する方法

iOS でデータを永続化する方法の続きです。今回はシリアライズされたオブジェクトの保存方法について説明します。シリアライズされたオブジェクトはファイルで保存することが容易なためデータ永続化の際に頻繁に使用されます。 シリアライズ自体はデータの保…

iOS でデータを永続化する方法

iOS データ設計入門の続きです。前回は iOS であつかうデータ全般について書きましたが今回はデータをフラッシュドライブに保存する方法について説明します。 データの永続化って何? メモリにあるデータはアプリを終了すると消えてしまいます。 アプリを終…

UIWebViewにJSのライブラリを動的に読み込ませる方法

UIWebView で表示している HTML ページに Javascript ライブラリを動的に読み込ませる方法です。 使う場面はそうないと思いますが、興味本位で試してみたらできたので記事にしました。Google Libraries API という Javascript のライブラリを使うと簡単に出…

iOS 組み込みの効果音を鳴らしてみる

iOSにはいくつか組み込みの効果音が用意されていて AudioToolbox フレームワークを使うと簡単に鳴らすことが出来ます。 手順 プロジェクトに AudioToolbox.framework を追加します。 AudioServices.h をインポートします。 AudioServicesPlaySystemSound 関…

NSOperation 非並列実行モードと並列実行モードの使い分け

バックグラウンド処理を手軽に実行できる NSOperation クラスですがこのクラスをきちんと理解して使うには NSOperationQueue クラスについて理解する必要があります。 前回の記事で NSOperationQueue の使い方について説明しました。まだお読みでない方はこ…

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

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

NSOperationQueue スレッドと処理の関係

iOS4 になって NSOperationQueue クラスの仕様に追加がありました。以前は並列処理しか出来なかったのですが mainQueue メソッドが追加になり逐次処理も出来るようになりました。変更点も含めて NSOperationQueue の使い方をまとめてみます。 NSOperationQue…

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

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

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

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

メソッド設計で守るべき10個のルール

以前メソッド設計の原則に関する記事を書きましたが 質問をすることで答えは変更されない原則 メソッドの引数はオペランドのみにする原則 それ以前にメソッド設計する上で最低限守った方がよいルールをまとめてみました。 プロパティをメソッドの戻り値代わ…

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

※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 メソッドを使うと他のアプリを起…

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

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

AVAudioRecorder の基本的な使い方

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

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

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

複数の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…

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

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

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

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

詳解 Objective-C 2.0

詳解 Objective-C 2.0荻原 剛志(著)ソフトバンククリエイティブこのアイテムの詳細を見る Objective-Cの文法からCocoa/Foundation(コレクション系ライブラリ、プロパティリスト、ローカライズ、スレッド、メッセージ送信、分散オブジェクト、キー値バインデ…

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

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