49hack

見習いエンジニアが魔法使いになるまで

iOSシミュレータでキーボードが表示されない

Xcode6にしてからなにかと変更点が多くてヤキモキしております。 iOSシミュレータが表示されない場合は以下で解決します。 iOS Simulator -> Hardware -> Keyboard 「Connect Hardware Keyboard」のチェックを外します 以前はハードウェアもソフトウェアも両…

UICollectionViewCellでAutoLayoutが効かない

iOS8SDKの既知の不具合として認識されているようです。 iOS8SDKをiOS7上で動かしたときに発現します。 CellのcontentViewのサイズが変更されていないのが原因なので、UICellectionViewCellのサブクラスに以下のコードを追加して対応します。 - (void)setBoun…

文字列をblowfish暗号化する

文字列を暗号化する方法のメモ。今回は可逆暗号化が目的なのでblowfishを使います。 Security.frameworkが必要なので、Build Phasesで追加してください。 #import <CommonCrypto/CommonCrypto.h> // 文字列をblowfish暗号化する + (NSString *)encodeBlowfish:(NSString *)str { NSData *k</commoncrypto/commoncrypto.h>…

iPhoneのWebViewでカスタムフォントを使う

アプリ全体のデザインを崩さないためにも、アプリ内のWebViewでも積極的にカスタムフォントを使いましょう。 使用したいカスタムフォントがアプリ内に入っている場合とそうでない場合で方法が若干異なります。 (カスタムフォントがmplus-1c-medium.ttfの場…

iOS7でUIViewアニメーションが機能しない

iOSの違いでUIViewアニメーションの挙動が違うので注意が必要です。 とりわけ「iOS6では動くのにiOS7では動かない」といった状況に陥ります。 iOS7ではUIViewアニメーションに関して変更があり、viewがまだ表示されていない状態(viewDidLoad, viewWillAppea…

脱獄端末のチェックをする

結局イタチごっこなのですが、、、脱獄対策のメソッドを書きました。 BreakThroughで脱獄回避のメソッドをすり抜けられちゃうので、BreakThroughそのもののチェックをしてみたり。 /* * 脱獄端末のチェック */ +(BOOL)isJailBreak { #ifdef DEBUG // デバッ…

ViewControllerがpresentされたのかpushされたのか判定する

ViewControllerがモーダルされたのかプッシュされたのか判定したい場合がしばしばあります。(例えば、モーダルのときは「閉じる」ボタン、プッシュのときは「戻る」ボタンに変更したいときとか。) if(self.presentingViewController != nil) { // モーダル…

cocos2d-xでダイアログを表示する

単純にダイアログを表示するだけであればCCMessageBoxを使えばいいですね。 CCMessageBox("メッセージ", "タイトル"); ただ、ボタンのタイトルは「OK」で固定されてるし、delegateはnilで受け取れません。 そのため、ダイアログからさらにアクションを起こし…

アプリがFacebookに認証済みかどうか判定する

Accounts.frameworkが必要です。 まあ、認証終わったあとにNSUserDefaultsにユーザIDなんかを保持しておくだけでもいい気がしますが、正式(?)な方法があるので一応メモしておきます。 ACAccountStore *accountStore = [[ACAccountStore alloc] init]; ACAcco…

UIAlertViewを表示しているかどうかをチェックする

ユーザとして、ダイアログが複数回出てくるのはかなりストレスに感じます。 UIAlertViewの表示チェックを行うことで、それを回避します。 -(void)showDialog { // ダイアログを表示中かチェックする for (UIWindow* window in [UIApplication sharedApplicat…

オブジェクトのZ値を変更する

オブジェクトのZ値を変更したい場合、単純に int order = 100; node->setZOrder(order); としても変更されません。 一度addChildしたオブジェクトのZ値を変更する場合は、reorderChildを使って親オブジェクトから設定してやる必要があります。 CCNode* paren…

非ARCのプロジェクトにARC対応ライブラリを対応させる方法

非ARCのプロジェクトにSBJsonなどのARC対応ライブラリを導入してビルドすると以下のようなエラーがでます。 This source file must be compiled with ARC enabled! Build Phases -> Compile Sources でCompiler Flagsを設定します。 エラーが出ている.mファ…

オブジェクトがアニメーション中かどうか判定する

たとえば複数のオブジェクトをランダムでアニメーションさせたいときなどに、現在そのオブジェクトがアニメーション中の場合はキャンセルしたいです。 判定する方法はいたって単純。 void SampleScene::actionNodeAtRandom(CCNode* hogeNode) { if ( hogeNod…

cocos2d-xで[node isKindOfClass:[CCSprite class]]みたいにクラスを判定する方法

例えば、HogeLayerの子供の中でCCSpriteにだけ処理をしたい場合は以下のように実装します。 CCArray* children = HogeLayer->getChildren(); for (int i=0; i<children->count(); i++) { if (dynamic_cast<CCSprite*>(children->objectAtIndex(i))) { // 処理 } } ただし、高価な方</ccsprite*></children->…

cocosbuilderのアニメーション終了時に何か処理を実行したい

cocosbuilderでタイムラインを作成してアニメーションさせたとき、その終了時に処理を実行したい場合はCCBAnimationManagerDelegateを使います。 // GameLayer.h class GameLayer : public CCLayer , public CCBAnimationManagerDelegate // CCBAnimationMan…

他のクラスからAppDelegateにアクセスする

シーン間で共通化しているもの、例えばゲーム画面にアクセスしたい場合、 // AppDelegate.h #include "cocos2d.h" USING_NS_CC; class AppDelegate : private cocos2d::CCApplication { CCNode *gameNode; // ゲーム画面 void loadGameNode(); public: AppDe…

FacebookSDKのエラー「Code=2 "The operation couldn’t be completed.」を解消する

XcodeでFacebookアプリ開発時に、特定の端末でFacebookログインでエラーが発生しました。 Domain=com.facebook.sdk Code=2 "The operation couldn’t be completed. (com.facebook.sdk error 2.)" UserInfo=0x17e904d0 { com.facebook.sdk:ErrorLoginFailedRe…

Game CenterのLeaderboardで小数(float型)のスコアを送信する

Game CenterのLeaderboardで小数を使ったスコア(例:12.3m, 123.45ptなど)を使用している場合、スコアの送信方法に少し戸惑ったのでメモします。 まず、iTunes ConnectにてLeaderboardの設定を確認します。 「Score Format Type」が Fixed Point - To 1 De…

Game Centerの「The requested operation has been cancelled or disabled by the user.」を解決する

Game Centerの挙動チェックをしていると突然、 「The requested operation has been cancelled or disabled by the user.」 のエラーが出てGame Center画面が立ち上がらなくなりました。 これはGame Center画面を3-5回キャンセルすると起こる事象らしく、サ…

「'string' file not found 」のエラーを解消する

Cocos2d-xで開発していると突然「'string' file not found」のエラーでビルドが失敗しました。 エラーを出しているのはCCDataVisitor.hというcocos2d-x内のファイル。原因がわからなすぎる…。 Objective-Cのコードと共存させるところで失敗しているとこのよ…

Unused variable の警告を消す

サードパーティのライブラリやフレームワークを使っていると、大量に出てくる「Unused variable」の警告ですが、開発中はとても邪魔なので見えないように設定を変更します。 Build Settings -> Apple LLVM 5.0 - Warnings - All Languages にある「Unused Va…

ユーザエージェントからiOSのバージョンを取得する

iOSのバージョンによってサーバ側で処理を分けたい場合、ユーザエージェントからバージョンを検出して対応します。 def check_ios_version # ユーザエージェントを取得 ua = request.env['HTTP_USER_AGENT'] ua =~ /iPhone OS (\d+)[\.|_]+(\d+)/ if $1 && $…

UITableViewCell上のUIButton(Custom)が反応しない

XIBで独自クラスのセルを作成し、そのセル上にUIButtonを設置している場合、iOS7ではタップに反応しません。 対処法としてはセルに対して以下のコードを追加すればOKです。 [customCell.contentView setUserInteractionEnabled: NO]; XIBでセルを作っている…

「Couldn't load cocos2dx.xcodeproj because it is already opened from another project or workspace」 の対処

Cocos2d-xでiOSアプリを開発している際、以下のようなエラーに遭遇することが多々あります。 Couldn't load cocos2dx.xcodeproj because it is already opened from another project or workspace エラー文の通り、すでにcocos2dxプロジェクトを開いている場…

画像サイズ対応/解像度対応でつまづいた

CocosBuilderでマルチレゾリューション対応が簡単にできるということだったので、参考書のとおりにレイアウトを構成し、画像を書き出してcocos2d-xプロジェクトのResourcesへ追加。 するとぜんぜんうまくいかなくて苦戦したのでメモしておきます。 CocosBuil…

「`require': cannot load such file -- readline (LoadError)」のエラーを解消する

動作環境 $ cat /etc/`ls /etc -F | grep "release$\|version$"` CentOS release 6.4 (Final) $ rails -v Rails 4.0.0 $ ruby -v ruby 1.9.3p448 (2013-06-27 revision 41675) [x86_64-linux] 事象 rails consoleコマンドを打つと以下のようなエラーが出まし…

EC2でRuby on Rails+Passenger+Apache環境を構築する

EC2にてRailsアプリケーションを作成し、ページを表示させるまでをまとめます。 EC2のインスタンス作成についてはこちらが参考になります。 Rubyのインストール確認 # ruby -v ruby 1.8.7 (2012-10-12 patchlevel 371) [x86_64-linux] rubyはデフォルトで入…

Xcodeがオーガナイザーでクラッシュする

XcodeのオーガナイザーにてProvisioning Profilesを更新すると必ずクラッシュする事象に出くわしました。 Xcodeを再起動しても、PCを再起動しても解決されません。 エラー内容に以下の文言が含まれていました。 UNCAUGHT EXCEPTION (NSInvalidArgumentExcept…

iAdとAdMobを切り替えるAdMobメディエーションを実装する

AdMobメディエーションを使うことで複数のアドネットワークを切り替えることができます。 AdMobの設定は各自で行なってください。 今回は一般的なiAdとAdMobの2種類の広告を扱います。 なお、ARC対応の場合はOther Linker Flagsに-ObjCを追加する必要があり…

Interface Builderで16進の色コード(Hex Color)を使えるようにするプラグインを導入する

Xcodeにて、Interface Builderでも色コードを指定できるとものすごく効率が上がります。 下図のような感じです。 そのための便利なプラグイン「Hex Color Picker」があったので早速導入します。 こちらからプラグインをダウンロードします。 Finder -> 移動…

Rubyでメソッド一覧を確認するmethodsメソッドが便利

例えば、destroy!メソッドってあったっけ?みたいな場合など、 rubyでメソッド一覧を調べたいときにはmethodsメソッドを使います。 sortやgrepと組み合わせるとなお良しです。 使用出来るメソッド一覧を表示する @bbs = Bbs.new pp @bbs.methods -----------…

rubyの「undefined method `+@’ for ” “:String」を解決する

rubyでは+の位置によって挙動が変わるので注意が必要です。 str = "hoge" + "fuga" を改行する場合、 str = "hoge" + "fuga" # エラー:undefined method `+@’ for ” “:String これではエラ−となってしまいます。 +を文末に移動させて、 str = "hoge" + "fug…

NSURLRequestでSSL証明書を無視する

NSURLRequestを拡張することでSSLの証明書を無視します。 #import <Foundation/Foundation.h> @interface NSURLRequest (IgnoreSSL) + (BOOL)allowsAnyHTTPSCertificateForHost:(NSString*)host; @end #import "NSURLRequest+IgnoreSSL.h" @implementation NSURLRequest (IgnoreSSL) +</foundation/foundation.h>…

UITextViewに文字数制限/文字数カウント機能を実装する

テキストビューに以下の機能を実装します。 所定文字数までしか入力させない文字数制限機能 現在テキストビューに入力されている文字数のカウント textlengthLabelに現在の文字数を表示させます。 #define MAX_LENGTH 200 // 文字数制限を200に設定 - (BOOL)…

NSTimerをscrollイベント中にも機能させる

NSTimerをscrollイベント中にも動かしたい場合、 [NSTimer timerWithTimeInterval:0.5 target:self selector:@selector(hoge) userInfo:nil repeats:YES]; 上記のままだとscrollイベント時に止まってしまうので、以下のようにすると良いです。 NSTimer *time…

サーバのグローバルIPアドレスを確認する

サーバのグローバルIPアドレスを調べるには下記のようにすると良いです。 % wget -q -O - ipcheck.mycurse.net ちなみに % /sbin/ifconfig でわかるのは現在所属しているネットワークのローカルIPアドレスです。 参考 LinuxサーバからグローバルIPを確認方法…

EC2でnode+express+mongoDB+mongooseの環境を構築する

Amazon EC2にnode+express+mongoDBの環境を構築します。 EC2の構築に関しては以下のSlideがとてもわかりやすいです。 はじめてのアマゾンクラウド②[仮想サーバ(Amazon EC2)を立ち上げる] from 玉川憲 (Ken Tamagawa) - Amazon Web Services nodeの環境構築 E…

NSJSONSerializationでJSONをパースする

iOS5から追加されたNSJSONSerializationを使ってみました。 今回はDribbbleのAPIで試してみます。 // Dribbbleから人気ショット一覧を取得するURL NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"http://api.dribbble.com/sh…

Unityプロジェクトの「Apple Mach-O Linker」エラーを解決する

UnityからXcodeに書き出してビルドすると大量のエラーが出ました。 ld: warning: ignoring file /Users/xxx/yyy iOS/Libraries/libiPhone-lib.a, missing required architecture i386 in file /xxx/yyy iOS/Libraries/libiPhone-lib.a (2 slices) Undefined …

git pushで「Permission denied (publickey).」を解決する

git

gitでGitHubにあるリポジトリにpushしようとしたらエラーが出ました。 % git push origin master Permission denied (publickey). fatal: The remote end hung up unexpectedly サーバーとの接続を確認する % ssh -vT git@github.com OpenSSH_5.6p1, OpenSSL…

「`join’: incompatible character encodings: ASCII-8BIT and UTF-8 (Encoding::CompatibilityError)」を解決する

コマンドライン引数で日本語を渡して文字列処理をしようとしたら 「内部と外部エンコーディングが異なるからjoinできないよ」と言われました。 $ ruby test.rb "てすとだよ" test.rb:39:in `join': incompatible character encodings: ASCII-8BIT and UTF-8 …

「Unable to find the wrapper "https"」を解決する

php

SSLに対応していないらしいのでSSL周りのconfigureオプションをチェックします。 %./configure --help | grep ssl --with-openssl=DIR Include OpenSSL support (requires OpenSSL >= 0.9.6) --with-openssl-dir=DIR FTP: openssl install prefix --with-ima…

iPhone、AndroidのモバイルWebでの長押しアクションを無効化する

css

モバイルWebにおいて、セキュリティ上、WebのリンクURLを表示させたくなかったり、 テキストのコピーを防止したい場合があります。 これらの長押しアクションを無効にするにはbodyのcssに以下を追記します。 body { -webkit-touch-callout:none; // リンク長…

Tagを用いて複数のUIAlertViewを処理する

複数のUIAlertViewを使う場合、buttonIndexのみではアクション処理がバッティングしてしまうので、Tagを使って場合分けをします。 //アラート画面のタグを宣言 static const NSInteger firstAlertTag = 1; static const NSInteger secondAlertTag = 2; //ア…

PHP5.4.3にImageMagickをインストールする

php

PHPで画像操作するためにImageMagickをインストールします。 ImageMagickのインストール まずはImageMagickのソースをダウンロードしてインストールします。 % cd /usr/local/src % wget http://www.imagemagick.org/download/ImageMagick.tar.gz % tar zxvf…

PHPにGDをインストールする

php

PHPで画像処理するためのGDライブラリをインストールします。 zlibのインストール % wget http://zlib.net/zlib-1.2.7.tar.gz % tar zxvf zlib-1.2.7.tar.gz % cd zlib-1.2.7 % ./configure % make % make install libpngのインストール % wget ftp://ftp.si…

正規表現のデリミタ(区切り文字)のいろいろ

php

PHPに限らず、正規表現のデリミタ(区切り文字)はスラッシュ/を使っていましたが、 http://hoge/fugaなど、パターンにスラッシュ/が含まれる場合は、 http:\/\/hoge\/fugaといったようにバックスラッシュ\でエスケープする必要があります。 この場合は、シ…

よく使うjQueryでのcssセレクタまとめ

jQueryオブジェクトでcssセレクタを多用するのでその備忘録です。 var target; $('.select').click(function() { target = $(this); // .selectそのもの target = $(this).parent(); // .selectの親要素 target = $('.child',this); // .selectの子要素.chil…

jQueryオブジェクトの比較

jQueryオブジェクト同士を比較する際は少し注意が必要です。 オブジェクト指向なので当たり前っちゃ当たり前ですが…。 失敗パターン これはNG。 オブジェクトが違うので別物です。 var obj1 = $('#target'); var obj2 = $('#target'); if( obj1 == obj2 ){ /…

「InfoPlist.stringsなんてないよ!」のエラーを解消する

gitなどのバージョン管理システムを使わずにプロジェクトをそのままコピペした場合、 Xcodeで実行すると次のようなエラーが出ました。 The file InfoPlist.strings couldn’t be opened because there is no such file. プロジェクト名.xcodeprojディレクトリ…