2013年11月2日土曜日

ブログ移動のお知らせ

ずいぶん久しぶりの投稿になってしました。

ブログ移動のお知らせです。

今後の記事は以下の新しいブログに書いていきます。

まえちゃんろぐ

もちろん今まで書いた記事はこの古いブログにこのまま残しておきます。

どうぞよろしくお願いします :)

2013年10月19日土曜日

メモリ管理の考え方で大事なこと4つ [箇条書きで]

参照カウントによるメモリ管理は複雑で面倒なイメージですが、以下の4つのことを意識していればよいとのこと。

以前メモリに関して自分でもまとめていましたが、この考え方は大事なのでメモします。

2013年10月13日日曜日

TexturePackerとPhysicsEditorが無料でダウンロードできるみたいなので試してみた



※ 両ソフトともダウンロードは無料でできます。使用するための"プロダクトキー"を無料で取得できるの間違いでした。

iPhoneやAndroidなどのモバイル向けのゲームがとても流行っていますが、開発の高速化に非常に役に立つツールに「TexturePacker」と「PhysicsEditor」というものがあります。前者は複数の画像ファイルからテクスチャアトラスを生成できるもので、後者は物理エンジン用のシェイプを作成できるものです。

これら2つのツールが通常であれば有償なのですが、今だとブロガーやフレームワークの開発者は無料でダウンロードできるようです。

やったね!

2013年8月21日水曜日

エラー「Provisioning profile xxxxx-xxxxx-xxxxx-xxxxx-xxxxx' cannot be found」

アプリ申請のためにアーカイブを作成しようと思いビルドしたところ以下のエラーが出ました。

「Provisioning profile xxxxx-xxxxx-xxxxx-xxxxx-xxxxx' cannot be found」

文字列を指定した文字列で分割する

文字列を指定した文字列で分割する方法をメモ。

エラー「Application failed codesign verification. The signature was invalid, contains disallowed entitlements, or it was not signed with an iPhone Distribution Certificate」について

アプリ申請時に以下のエラーが出ました。

Application failed codesign verification. The signature was invalid, contains disallowed entitlements, or it was not signed with an iPhone Distribution Certificate

2013年8月20日火曜日

UIBarButtonItemに画像を乗せてサイズも調整する

UIBarButtonItemに画像を乗せてサイズも調整する方法をメモします。

UIBarButtonItemに画像を乗せるにはクラスから提供されているメソッドだけではできないようで、少し面倒ですが以下のようにすることで画像を乗せることができます。

複数のUIAlertViewクラスのボタンで異なる処理をさせたいとき

UIAlertViewクラスを複数使用していて、各UIAlertViewクラス毎に押されたボタンで異なる処理をさせたいときの対処方法。

2013年8月13日火曜日

バッジを削除する

バッジを削除する方法をメモします。この"バッジ"というのは、Push Notificationなんかで受信したりするとアプリのアイコンの右上に付く数字のことです。

2013年8月12日月曜日

NSDateを使って残り時間を表示する

NSDateを使って残り時間を表示するプログラムを書きました。個人的に必要になるもので今後のためにメモします。

2013年8月7日水曜日

乱数生成はarc4randomよりarc4random_uniformを使うといいらしい

乱数生成によく使う関数でarc4random()があります。この関数はrand()で行う初期化作業が必要ないので重宝されています。

しかし欠点もあり、以下がそうです。

実はarc4random()はランダム性に少しバイアスが掛かっています。arc4random()は0から2^32-1の値を返すため、それの法をとる際に微妙にランダム性が崩れるのです(modulo bias:0から10の値をとるランダム値のモジュロ7の法をとると、0-3の出現割合は4-6の二倍になりますね)。ただし、MAX_NUMが2の累乗であれば完全にランダムとなります。

Objective-Cの乱数作成はarc4random_uniform - だいたい47度

これを補ってくれるのが arc4random_uniform() です。

Block構文を使ってUIViewをアニメーションさせる

Block構文を使ってUIViewをアニメーションさせる方法をメモで。

2013年8月2日金曜日

古い証明書から新しい証明書に変えたときに出たエラー

キーチェーンアクセスから古い証明書を削除し新しい証明書を適用しようとしたところ以下のエラーがでました。



"システムルート" キーチェーンは変更できません。

ルート証明書の信頼設定を変更するには、キーチェーンアクセスで証明書を開き、“信頼設定”で変更します。新しいルート証明書は現在のユーザのログインキーチェーンに追加されます。このマシンのすべてのユーザによって証明書が共有される場合は、システムキーチェーンに追加されます。

今回はそのエラーの対処方法を書きます。

2013年7月31日水曜日

Feedlyに登録するリンクを追加しました

上のメニューにこのブログのフィードを「Feedly」へ登録するリンクを追加しました。



リンクを押すとFeedlyへ飛び、自動的にフィードが登録されるようになっています。

Feedlyをお使いの方は是非フィード登録をよろしくお願いします :)

Feedly

2013年7月19日金曜日

ディスパッチキューを使って並列処理(マルチスレッド)を行う

並列処理(マルチスレッド)を実装できるディスパッチキューについてです。

Block構文の基本

今回はBlock構文(Block Literal Syntax)についてです。最近はデリゲートよりBlockが推奨されてきているので調べてメモしようと思います。

2013年7月16日火曜日

UITableViewについて - UITableViewのセルをカスタムセルを使ったほうがいい(4)【追記あり】

まだまだいきます!今回もカスタムセルについてです。

UITableViewについて - UITableViewのセルをカスタムセルを使ったほうがいい(3)

前回前々回に引き続きカスタムセルについてです。

UITableViewについて - UITableViewのセルをカスタムセルを使ったほうがいい(2)

前回に引き続きカスタムセルについてです。

UITableViewについて - UITableViewのセルをカスタムセルを使ったほうがいい(1)

今回はUITableViewクラスについて疑問に思うことを書いてみようと思います。

2013年7月11日木曜日

UITableViewの特定のセルを選択不可にする

UITableViewのセルを、特定のものだけを選択不可にする方法をメモで。

エラー「Domain=NSCocoaErrorDomain Code=3000 "Appの有効な“aps-environment”エンタイトルメント文字列が見つかりません" ........」

Push Notificationを実装の際に以下のエラーが出ました。

Domain=NSCocoaErrorDomain Code=3000 "Appの有効な“aps-environment”エンタイトルメント文字列が見つかりません" UserInfo=0x1dd99910 {NSLocalizedDescription=Appの有効な“aps-environment”エンタイトルメント文字列が見つかりません}

Certificates(証明書)の期限切れ更新の際に躓いたところをメモ

Certificates(証明書)の期限切れ更新の際に躓いたところをメモします。

NSDateでマイナスの値が返る場合はfabs関数で絶対値を取る

以前に「NSDateで経過時間を取得する」という記事を書いたのですが、取得した時間を"秒数"で取得した際に、その値がたまにマイナスを返ってくることがありました。

2013年7月9日火曜日

2013年7月5日金曜日

UIGestureRecognizerクラスで「-[クラス名 isPointTouchableInArea:]: message sent to deallocated instance アドレス」エラーが出た

UIGestureRecognizerクラスを使ってジェスチャーを作っているときに以下のエラーがでました。

-[クラス名 isPointTouchableInArea:]: message sent to deallocated instance アドレス

今回はこのエラーについて書きます。

2013年7月4日木曜日

iTunes Connectでアプリの利用開始日(Availability Date)を現在よりも先に設定したときのアプリのリリース方法

アプリのリリース日を指定した日に調整したい場合、iTunes Connectでの申請の際に利用開始日(Availability Date)を現在よりも先に設定するというのはもう今では主流の方法ですね (どのような利点があるかはこちらの記事へ)。

その申請したアプリが「Ready for Sale」になったときにどうリリース日を決めるかという覚え書き。

2013年6月26日水曜日

Social.frameworkの投稿ビューの各ボタンのハンドリングした際の不具合について

前回「Social.frameworkの投稿ビューの各ボタンのハンドリングを行う(FacebookまたはTwitterの場合)」という記事を書いたのですが、投稿ビューのボタンをハンドリングした際に気になるところがあったのでそのメモ。

Social.frameworkの投稿ビューの各ボタンのハンドリングを行う(FacebookまたはTwitterの場合)

Social.frameworkを使用してFacebookまたはTwitter(今回はこの2つでしか試していません)に投稿する際はSocial.frameworkから提供された専用のビューから行います。そのビューに「投稿」または「キャンセル」ボタンがあります。

今回はそのボタンを押した際のハンドリングについて調べたのでメモします。

2013年6月17日月曜日

2013年6月6日木曜日

UIButtonの背景画像の透過について

UIButtonの背景に画像を使用する場合、透過PNGを使用しているにも関わらず上手く透過されないときの対処方法をメモで。

2013年5月13日月曜日

エラー「A valid provisioning profile for this executable was not found」

リリース前の確認としてReleaseビルドを実行したところ以下のエラーが出ました。

A valid provisioning profile for this executable was not found

2013年5月2日木曜日

エラー「Error loading ~~~ Symbol not found: ___CFObjCIsCollectable」

ビルド時以下のようなエラーをはきました。

Error loading /System/Library/Extensions/AudioIPCDriver.kext/Contents/Resources/AudioIPCPlugIn.bundle/Contents/MacOS/AudioIPCPlugIn: dlopen(/System/Library/Extensions/AudioIPCDriver.kext/Contents/Resources/AudioIPCPlugIn.bundle/Contents/MacOS/AudioIPCPlugIn, 262): Symbol not found: ___CFObjCIsCollectable

ところどころ"Audio"の文字があることから分かるように音声関連のエラーのようです。

2013年4月22日月曜日

CCShaky3Dでアニメーションした後に元の形状に戻す方法

CCShaky3Dでアニメーションした後はそのアニメーション終了時の状態のままになってしまいます。

アニメーションする前の状態に戻す場合は以下のようにします。

アプリを高速化させる25のコツ&小技

iPhoneアプリ開発ではおなじみのサイト「RAYWENDERLICH」に「25 iOS App Performance Tips & Tricks」というエントリーを見つけたのでメモ。

25 iOS App Performance Tips & Tricks - RAYWENDERLICH

このエントリーを参考に一度アプリを見直してみてはいかがでしょうか。

タッチイベントをCCMenuより優先的に取得する方法

試してはないのですが勉強になったのでメモします。

CCMenuItemとタッチイベント(CCTargetedTouchDelegate)では、CCMenuItemのほうが優先的に取得されます。

この2つを使用していてタッチイベントのほうを優先的に取得したい場合は以下のようにします。

エラー「Validate Project Settings Update to recommended settings」

Xcodeアップデート後以下のエラーが出ました。

Validate Project Settings Update to recommended settings

シミュレータでデバッグ時にアプリが起動しない件について

Xcodeで「Run」を実行すれば通常であればビルド後アプリが起動すると思うのですが、うまくアプリが起動しない現象が起きたのでメモ。

エラー「PCH file built from a different branch than the compiler」

ビルド時以下のエラーが出たのでそのメモ。

PCH file built from a different branch ((clang-425.0.24)) than the compiler ((clang-425.0.28))

2013年4月15日月曜日

iAdが表示されないとき

iAdが表示されない場合、実装方法が間違っているということはよくあるとは思いますが、以外とiTunes Connect側での設定も忘れがちになるのでメモ。

iAd - Apple Developer

2013年3月30日土曜日

アイコンの光沢の有効化・無効化

アプリのアイコンの光沢の有無を選択するには、Info.plistを弄ります。

詳しくは、Info.plistの「Icon already includes gloss effect」弄るのですが、アイコンに光沢を出す場合は"NO"に、光沢を出さない場合は"YES"を設定します。



参考記事

iTunes ライブラリ App における iOS 5 以降のアイコン光沢の取り扱いについて - ラクイシロク

2013年3月17日日曜日

エラー「clang: error: no such file or directory: '.../AppName/AppName-Prefix.pch'」について

プロジェクト名変更後に以下のエラーが出たのでメモ。

clang: error: no such file or directory: '.../AppName/AppName-Prefix.pch'

【cocos2d】UIImageをCCSpriteに変換する方法

UIImageをCCSpriteに変換する方法をメモで。

プロジェクトが開けない時に行ったこと

プロジェクト名を変更後、そのプロジェクトを開こうとしたところ、Xcode側でプロジェクトをうまく認識できず開くことができませんでした。そのとき行った対処方法をメモで。

2013年3月12日火曜日

UIButtonクラスのaddTarget:action:forControlEvents:メソッドの引数について

UIButtonクラスのaddTarget:action:forControlEvents:メソッドは実行時に引数を渡せないので有名(?)です。
他のメソッドであればNSInvocationクラスを使って@selectorに引数を渡す事はできるのですが、addTarget:action:forControlEvents:メソッドでは不可能のようです (こちら参照)。

今回はそのaddTarget:action:forControlEvents:メソッドに引数を渡す方法をメモで。かなり力技でやっとります(笑)

2013年3月4日月曜日

2013年2月22日金曜日

【cocos2d】プロパティ"position"と"boundingBox.origin"では取得できる値が違う

cocos2dでスプライトの座標を取得する際に、たまに意図しない値が取得されているのに気付きました。調べてみると、どうやら座標を取得するプロパティ"position"と"boundingBox.origin"とでは取得できる値が違う事が分かりました。

2013年2月20日水曜日

2013年2月18日月曜日

エラー「Instance method メソッド名' not found (return type defaults to 'id')」

ビルド時に「Instance method メソッド名' not found (return type defaults to 'id')」というエラーが出たのでそのメモ。

2013年2月16日土曜日

【cocos2d】ビルドエラー「Lexical or Preprocessor ‘cassert’ file not found」が出たときの対処方法

cocos2dでBox2Dを使用していて「Lexical or Preprocessor‘cassert’file not found」というビルドエラーが出たのでその対処方法をメモで。

配列同士を連結する

NSArray, NSMutableArray同士の連結方法についてメモ。

ファイル削除時に出るCpResourceエラーについて

Xcode上からではなく、プロジェクトが入っているフォルダからファイルを削除してビルドすると、

「CpResource 削除したファイルのパス cd "/Users/・・・" setenv ...」

というエラーが出ました。

解決方法

このエラーの対処は以下の流れで行いました。

  1. プロジェクトを選択。
  2. メニュー"TARGETS"を選択。
  3. "Build Phases"を選択。
  4. "Copy Bundle Resources"項目へ。
  5. その中から赤くなっているファイルを削除。

Xcodeのリソース上にはまだファイルデータの履歴(?)が残っていたのですが、参照しているフォルダ内にはそのファイルデータがないために起こったエラーのようです。

以上です。

参考記事

XCode Build – CopyPNGFile Error and No Such File or Directory - Communicate Through Technology

2013年2月14日木曜日

画像のダイエット!Yahoo!のWebサービス「Smush.it」で画像の最適化



画像容量を減らしてくれるYahoo!のサービスがあります。アプリ内で使用する画像の最適化などに良さそうなので試してみました。

Smush.it - Yahoo!

この「Smush.it」はこちらの記事によれば、"画像内に含まれるメタデータなどを削除し、画像を軽量化・最適化してくれるサービス"とのことです。

試してみる

今回は 縦横1000*1000、容量約4.4KBの全体ブルーで塗りつぶした画像を使用しました。

結果

こんな感じで結果が表示されました。



あまり変わっていないようですね(笑) 全体がただのブルーで塗りつぶしただけの画像なので余分なデータはあまりないのかもしれません。

ですが、実際には容量の軽量化にはなっているので試してみる価値はありそうです。

参考記事

サイト高速化のために「Smush.it」で余計なデータを削除して画像を軽量化・最適化 - 4th Life - Coevolution of WEB -

【cocos2d】背景色を変える

cocos2dで背景の色を変えたいと思い調べました。

2013年2月12日火曜日

【cocos2d】cocos2dでスワイプ処理

cocos2dでスワイプ処理を実装する際に役に立つエントリーがありましたので書きます。

cocos2dでスワイプ処理を実装し、チューニングする - jarinosuke blog

スワイプのジェスチャーはUIGestureRecognizerクラスを使用し、タッチイベント(ccTouchMoved内)でその判定を自作のパラメータを使って行っています。

以下はスワイプ処理実装の際に使用していたC言語関数になります。念のため仕様をメモります。

sqrt(x) : xの平方根を返す
- 参考 : 初心者のためのポイント学習C言語

pow(x, y) : x, yのベき乗を返す
- 参考 : BohYoh.com【C言語講座】標準ライブラリ

fabsf(x) : x の絶対値を返す
- 参考 : C言語関数辞典

【cocos2d】ローカル座標、ワールド座標の変換

cocos2dの座標の変換に関してメモります。

2013年2月4日月曜日

無料・商用利用可能な音声ファイルをダウンロードできる「Octave」

無料でしかも商用利用が可能な音声ファイルをダウンロードできる「Octave」がかなりすごいです。

以下のリンクからダウンロードできます。

Octave: A free library of UI sounds.

試してみました

ダウンロード・解凍すると以下のようにXcode用のプロジェクトが入っています。



実行すると以下のように収録されている音声ファイルを聞くことができます。



無料で商用利用可能、嬉しいです。

参考記事

無料で商用利用も可能な短いサウンド48種類がダウンロードできる「Octave」- GIGAZINE

[CCDirector sharedDirector].runningScene で取得したシーンの変数にアクセスするにはCCSceneを継承していないとダメらしい

しっかりと調べた訳ではないのですが、気になったのでメモります。

【cocos2d】CCCallFuncNDのエラー

CCCallFuncNDクラスのactionWithTarget:selector:data:メソッドを使用する際のエラーについてです。

今回のエラーの詳細は以下になります。

testFunc:(NSString*)str というメソッドを作り呼ぼうとしたが、受け取る引数が、"<クラス名 = アドレス | tag="-1">"というような感じになってしまい上手くいかなかった。

その解決方法をメモで。

【cocos2d】タッチイベントが効かないときの対処方法

主な原因は、以下のようにタッチイベントを有効にしていないか
self.isTouchEnabled = YES;
registerWithTouchDispatcherメソッドをオーバーライドしていないことが原因のようです。
// 以下をソースコードに追加
-(void)registerWithTouchDispatcher
{
    [[[CCDirector sharedDirector] touchDispatcher]addTargetedDelegate:self
                                                                                                     priority:0
                                                                                     swallowsTouches:YES];
}

CCTouchDispatcherクラスの変更点については前の記事で触れたのでよろしければそちらも参照してみてください。

参考記事

[Cocos2d] タッチイベントを検知する - HAPPY*TRAP

2013年2月2日土曜日

【cocos2d】CCSpriteSheetはCCSpriteBatchNodeに置き換わっている

CCSpriteSheetはCCSpriteBatchNodeに置き換わっているようです。

Cocos2d解説(5) CCSpriteBatchNode - Yokemuraの開発ブログ(Yokemura's Development Blog)

メモとして書きました。

Box2Dについて

cocos2dに含まれている物理エンジンBox2Dについてです。Box2D自体はじめて触るものですので、雰囲気など掴むために色々と調べながら書きました。

2013年2月1日金曜日

2013年1月30日水曜日

【cocos2d】CCSchedulerクラスのschedulerメソッド、CCTouchDispatcherクラスのsharedDispatcherメソッドの仕様変更について

CCSchedulerクラスのschedulerメソッド、CCTouchDispatcherクラスのsharedDispatcherメソッドがcocos2d 2.0からは仕様が変わっていたのでその対処方法をメモ。

2013年1月27日日曜日

Node.jsをiOS上で動かせるようになるフレームワーク「neu.Node」

こちらの「neu.Node」は、JavaScriptでiOSアプリケーションを実装するためのフレームワークで、Node.jsと互換性を持つAPIを備えています。

neunode - GitHub

以下、作者のブログ記事から説明を抜粋します。

  • サーバー不要のローカル・ネットワーク・ゲーム
  • WiFi 上で動くローカルなソシアル・ネットワーク・アプリケーション
  • P2P スタイルのファイル共有、共同編集、コラボレーション
  • リアルタイムなメディアの転送(セキュリティ・カメラ、リモート Jukebox など)
  • Proxy サーバー内蔵の HTML5 アプリケーション

ライセンスはMIT、ライセンス料もフリーとなっており、非営利・商用、無料・有料の区別なく使えるとのことです。

2013年1月24日木曜日

UIデザインの参考になる記事を集めた「UIデザインの参考になるサイトまとめ」

UIデザインの参考になる記事を集めたエントリー「UIデザインの参考になるサイトまとめ」です。

UIデザインの参考になるサイトまとめ - ナナメウエblog

iOSの他にMacOSやAndroid関連のものもありますが、UIデザインのヒントになりそうなものがいくつもあります。

情報共有として載せました。こういったエントリーは非常に助かりますね。

端末で現在使用されている言語を取得する方法

端末で現在使用されている言語を取得する方法をメモで。

【cocos2d】ARCH_OPTIMAL_PARTICLE_SYSTEMはcocos2d 2.0で削除されている

cocos2d 2.0ではARCH_OPTIMAL_PARTICLE_SYSTEMはCCParticleSystemQuadに変更する必要があります。

それに従って

cocos2dで作るiPhone&iPadゲームプログラミング(初版 p.247)に載っているソースコードを書き換えてみます。

変更前

-(void) preloadParticleEffects:(NSString*)particleFile {
    [ARCH_OPTIMAL_PARTICLE_SYSTEM particleWithFile:particleFile];
}

変更後

-(void) preloadParticleEffects:(NSString*)particleFile {
    [CCParticleSystemQuad particleWithFile:particleFile];
}

こんな感じです。

参考記事

cocos2d 1.0.1から2.0に移行する - mooapp

【cocos2d】CCMenuを綺麗に整列させる

CCMenuのアイテムを綺麗に整列させる方法をメモで。

【cocos2d】パーティクルの位置(position)をソースコード上で指定した位置に表示させるにはsourcePositionx, sourcePositionYを0にする

まだ詳しく調べてはないのですが「Particle Designer」でsourcePositionx, sourcePositionYを指定した場合は、その指定した座標に強制的に表示されるようです。
その場合は、以下のようにしても画面中央にはきません。
CGSize winSize = [[CCDirector sharedDirector] winSize];
CCParticleSystem *ps = [CCParticleSystemQuad particleWithFile:@"fire.plist"];
ps.sourcePosition = ccp(winSize.width/2,winSize.height/2);  //こうやってもダメぽ...
[self addChild:ps];

解決策

少し力技というか強引なんですが、ソースコード上で指定した位置に表示させるには、作成したパーティクルのplistを弄るのが早いと思われます。



とりあえず画像のように、0を指定してあげると、sourcePositionプロパティの指定どおりの位置に表示されました。

終わり

実際のところ、Particle Designerでパーティクルを作成する際にsourcePositionx, sourcePositionYに0を指定してあげればいいだけの話なんですが・・・(笑)
とりあえずParticle Designerとパーティクルの仕様について学んだのでメモということで書きました。

参考記事

cocos2dでパーティクルを表示 - iPhoneアプリ練習帳

XcodeでC++の勉強をする方法

Xcodeを使ってC++の勉強をする方法を書きます。

ゲーム開発をする際のヒントになりそうなサイト「Ray Wenderlich」

様々なコードサンプルを紹介しているサイト「Ray Wenderlich」の紹介です。

Ray Wenderlich | iPhone / iOS 開発者 と ゲーム開発者のためのチュートリアル

このサイトのサンプルはプロジェクトの作成から説明がされているので手を動かしながら学びたい人にとって非常に良いサイトなのではないでしょうか。

日本語訳ページが用意されているのも嬉しいですね。

UIKitはもちろんcocos2dについてのサンプルもあります。一度見てみてはいかがでしょうか。