@neiraza

2匹の怪獣が寝た後にプログラマーしてる僕のネタ帳

xcode5.1にあげたらビルドが失敗た

先日、後輩がcocoapods爆発しろネタを書いていたなーとは思ってたけど、
まとめw 爆発wとか笑いつつ、対応保留にしてた。

akisutesamaありがとう
http://akisute.com/2014/03/ios-sdk-71-xcode-51.html

昨日の深夜か早朝か、油断していてxcodeが5.1にあがってしまた。

おかげで、arm64に対応していないライブラリがビルドエラー(smaad v2.1.6)。
smaad氏ねと思いつつ、
Build SettingsのArchitecturesを$(ARCHS_STANDARD_32_BIT)に変更し、
ビルドしなおし。

今度は、cocoapodsで入れたライブラリたちがビルドエラー。
cocoapods氏ねとおもってたけど、
Podsを一度削除して、pod installしなおせば問題なかた。

なにやってんだオレは。

iOSとAndroidアプリのダウンロード数を晒してみた

3年くらい前に初めて作ったiOS & Androidアプリについて、
公開から現時点までのダウンロード数を
記録がわりに、晒してみることにした。

広告とか入れてないので、収入は無し。
iOSはゲームで、Androidは添付画像ベースのメーラー

f:id:redogu:20140220100151p:plain

iOSの方は、5割りほどが中国ユーザでした。
ありがとう、中国。

最近はプライベートで Androidアプリは作ってないし、
iOSはずーっとreject続きだけど、次は3,000ダウンロードを目標に。。。

blockでコールバックを書いたった

blockでコールバックを書く

いい加減、delegateばっかだと、あっちこっち読むのが大変なので書いてみた
まず、呼び出される側から。

// BlockSample.h

#import <Foundation/Foundation.h>

typedef void (^BlockSampleCallBack)(NSArray *foo);

@interface BlockSample : NSObject
- (void)hoge:(NSString *)fuga callback:(BlockSampleCallBack)callback;
@end

typedefで定義してするほうが可読にいいよねってことらしい。

// BlockSample.m

#import "BlockSample.h"

@implementation BlockSample

- (void)hoge:(NSString *)fuga callback:(BlockSampleCallBack)callback
{
	NSArray *array = @[@"りんご", @"ごりら", @"らぶらぶ"];
	callback(array)
}

@end

次に呼び出し側を書く。

// CalledBlockSample.m

// いろいろと割愛

- (void)moDMP
{
	// BlockSampleがシングルトンだったとして...
	[[BlockSample] sharedManager] hoge:@"これはテストだ" callback:^(NSArray *foo) {
	NSLog(@"アホな配列がやってくるお %@", foo);
	}];
} 

// いろいろと割愛

CoreDataのサンプルでハマった?

もし、あなたが

Receiver type 'NSManagedObjectContext' for instance message is a forward declaration

でハマったら、

たぶん、サンプルではCoreDataのimportがpchファイルに書いてあるはず。


そんなiOS、CoreDataを始めますって方におすすめなのがこの本。

iOS Core Data徹底入門

iOS Core Data徹底入門

DBって何だよ(笑)ってレベルからでも、読みやすいと思われ。

ACTION REQUIRED: Google Play Merchant In-app Billing Sample Code Security Update

ACTION REQUIRED: Google Play Merchant In-app Billing Sample Code Security Update
ってメールがきた

diffしてみたけど、ほんと些細な違いだった。
その違いでやられちゃう人もいるんだろけど。

In-app billing v3を使ってて、Rev5よりも古いRevのSampleを丸パクなアプリ
特にIabHelper.javaSecurity.javaを丸パクはアウト

purchaseの内容をサーバ側でチェックする作りになっていない

この辺に心当たりのある方は、
In-app Billing Rev5が来ているのでチェックしよ。

UIAlertViewのdelegateでダラダラすんの禁止

UIAlertViewでok/cancelをタップした後の処理ってどうしてます?

delegateだけで対応すると、
複数のUIAlertView扱っちゃうと、分岐の嵐。

アラートダイアログが消えたら、○○するとかでも良いのかもだけど、
後々、UIKitが対応してくれるとしたら、blockでやってくれるはず。
また既に多くの人が、そーしてるはず。そいうライブラリもあるし。

あとは、カテゴリにしといてくれないと使いづらい。
シンプルにおさめると、こんなんでいいはず。


参考 UIAlertView の delegate 束縛を解放しよう | mixi Engineers' Blog

GMTな文字列をNSDateなローカル時間に変換した

iOSAndroidをいったりきたりしているうちに、
この単純な対応方法を忘れてしまったので書いておく。

そもそも、NSDateのカテゴリとかで残ってないのが不思議なんだけど。
前に作ってた時は、どーしてたんだろか。

基本方針として、
NSStringやNSDateのカテゴリとして作成しておく。

んで、呼び出す以上。