最近作ったiOSのライブラリ紹介

Presenter Notes

NSDate-Escort

Presenter Notes

AZDateBuilder

  • 指定した日付のNSDateを簡単につくれるライブラリ
// 2010-1-1 11:10:05
NSDate *date = [NSDate AZ_dateByUnit:@{
    AZ_DateUnit.year : @2010,
    AZ_DateUnit.month : @1,
    AZ_DateUnit.day : @1,
    AZ_DateUnit.hour : @11,
    AZ_DateUnit.minute : @10,
    AZ_DateUnit.second : @5
}];

Presenter Notes

SimpleUserDefaults

  • NSUserDefaultsの読み書きを楽にするライブラリ
  • プロパティがそのままNSUserDefaultsの読み書きに変わる
  • objc/runtime.h は使わないで KVO で実装

Presenter Notes

@interface ExampleConfig : SimpleUserDefaults
@property (nonatomic) NSString *name;// <- getter/setter access NSUserDefaults
@property (nonatomic) BOOL hasBoolValue;
@end

@implementation ExampleConfig
- (id)init {
    self = [super init];
    if (self == nil) {
        return nil;
    }
    // initialize NSUserDefaults target
    [self addObserverSelector:@selector(name)];
    [self addObserverSelector:@selector(hasBoolValue)];
    return self;
}
@end

Presenter Notes

パフォーマンス

:Name                                              :Total(s)  :Avg.(s)
-[Bench test_benchSimpleUserDefaults_init]         0.01163    0.00001    (1/1000)
-[Bench test_benchSimpleUserDefaults_read]         0.00019    0.00000    (1/1000)
-[Bench test_benchSimpleUserDefaults_write]        0.00020    0.00000    (1/1000)
// 素の実装
-[Bench test_benchStandardUserDefaults_init]       0.00129    0.00000    (1/1000)
-[Bench test_benchStandardUserDefaults_read]       0.00087    0.00000    (1/1000)
-[Bench test_benchStandardUserDefaults_write]      0.00021    0.00000    (1/1000)
// runtimeの実装
-[Bench test_benchGVUserDefaults_init]             0.02315    0.00002    (1/1000)
-[Bench test_benchGVUserDefaults_read]             0.00021    0.00000    (1/1000)
-[Bench test_benchGVUserDefaults_write]            0.01373    0.00001    (1/1000)

Presenter Notes

BenchmarkTestCase

  • テストと同じようにベンチマークが書けるライラぶらり
    • go test インスパイア
  • XCTestCase のサブクラスとして実装
  • 動的にテストケースを生成して、ベンチマークをテストとして実装できる

Presenter Notes

@interface YourBenchmarkTestCase : AZBenchmarkTestCase

@end
@implementation YourBenchmarkTestCase
- (void)benchYourTest{
    // ベンチを取りたい処理を書く
}
@end

Presenter Notes

OperationPromise

  • NSOperation同士の依存関係を簡単に示すためのライブラリ
  • Promiseっぽい thenwhen を使う
NSMutableArray *race = [NSMutableArray array];
NSBlockOperation *blockOperation1 = [NSBlockOperation blockOperationWithBlock:^{
    [race addObject:@1];
}];
NSBlockOperation *blockOperation2 = [NSBlockOperation blockOperationWithBlock:^{
    [race addObject:@2];
}];
NSBlockOperation *blockOperation3 = [NSBlockOperation blockOperationWithBlock:^{
    [race addObject:@3];
}];
NSOperationQueue *queue = [[NSOperationQueue alloc] init];

[OperationPromise promise:queue]
    .then(blockOperation1)
    .then(blockOperation2)
    .then(blockOperation3)
    .start();
// @1 -> @2 -> @3 という順番で実行される

Presenter Notes

UITextSubClass

  • UITextField / UITextView のサブクラスライブラリ郡
  • Toolbarを自動でつけたり、数値入力専用、UIDatePickerをキーボード部分に表示する
  • サブクラスなのでInterface Builderのサブクラスを指定するだけ使える

Presenter Notes

XUIRoundedRectButton

  • iOS7でもiOS6の UIButtonTypeRoundedRect 風のボタンを使える
  • UIButtonのサブクラスとして実装

ScreenShot

Presenter Notes

AAMFeedback

  • お問い合わせ画面を表示するライブラリ
  • ちゃんとメンテ続けてて、この間KIFのテストを追加した
  • CocoaPods対応、ローカライズのカスタマイズの対応などの機能追加

Presenter Notes

screenshot

Presenter Notes

ManagedMappingObject

  • NSManagedObject <-> NSDictionary
    • CoreDataとNSDictionaryのオブジェクトを相互変換補助
    • Mantle とか
  • ライブラリ自体は100行以下でとてもシンプル
  • rentzsch/mogenerator · GitHubJSON Accelerator と一緒に使うと効率的

Presenter Notes

CounterAgent

  • 起動回数を数えて、指定回数だったらメソッドを呼ぶだけのライブラリ
@interface CounterAgent : NSObject
#pragma mark - count
- (NSUInteger)countOfCurrentVersion;
#pragma mark - count up
+ (void)countUp;
- (void)countUp;
#pragma mark - fire event
- (void)runObserver:(id) observer selector:(SEL) selector whenCount:(NSUInteger) count;
#pragma mark - reset
- (void)resetCount;
@end

Presenter Notes

azu/NavTintTester7 · GitHub

  • ライブラリじゃない
  • iOS7のナビゲーションバーの色変更等を確認するためのアプリ
  • UIAppearanceとかをいじって色を確認出来る

Presenter Notes

ss

Presenter Notes

ss

Presenter Notes

Presenter Notes