2014/01/25

IIJmioクーポンスイッチAPIのiOSサンプルアプリで使ったライブラリの雑感を書いてみる

今週と再来週にIIJmioの中の人とお話しする会 (第2回)があったりしますので、非常に今さらですが、IIJmioのクーポンスイッチAPIを利用したiOSサンプルアプリで使ったライブラリについて、利用例や雑感も含めて書いてみます。

ReactiveCocoa

最近メジャーになってきたFunctional Reactive Programmingのライブラリ。

今回のサンプルアプリでは、MVVMっぽく書くために使っています。

最初の取っかかりが難しかったり、微妙にかゆいところに手が届かなくてもどかしい状況があったり (rac_signalForSelector:まわりとか) しますが、 慣れると便利だと思います。

ドキュメントがしっかりしていて、ソースコードも非常に読みやすいです。 内部で色々複雑なことをやっているので、Objective-Cの勉強にもなります。

本ブログでもちょこちょこ記事を書いていますので、読まれていないかたは次の記事でインストールから始めてみてください。

Underscore.m

JavaScriptではメジャーなライブラリUnderscore.jsのObjective-C版です。

今回のサンプルアプリでは、JSONから変換した値をごにょごにょするのに使っています。

割と使いやすいので、個人的には、コレクションを操作すべき必要があるなら、とりあえず入れておくことにしています。

ただし、Xcodeでの補完がちょっとしずらいのが難点。

サンプルアプリでの利用方法は次の記事でも簡単に紹介していますので参照ください。

Mantle

JSONなどから生成された、NSDictionaryなどから独自オブジェクトへの相互変換を可能にするライブラリです。

サンプルアプリではIIJMioのクーポンスイッチAPIで返されるJSONを変換するのに利用しています。

ただし、今回のアプリだとプリミティブな値しか取り扱う必要がないので、わざわざMantleを使わなくてもよかったかなあという印象を受けました (NSDictionaryのまま使えば、モデルクラスを記述する必要がなくなりますし、KVCのCollection Operatorが意外と便利ですし)。

もちろん、時間や色などそのままでは取り扱いや相互変換が面倒な値が含まれてきたらMantleは非常に便利だと思います。

AFNetworking-RACExtensions

iOSの超有名ライブラリAFNetworkingをReactiveCocoaで使いやすくするように、各種メソッドの戻り値をRACSignalにしてくれるライブラリです。

サンプルアプリではIIJMioのクーポンスイッチAPIの取得時に用いています。

ただし、このライブラリはAFNetworking 1.x向けなので、2.0の新機能 (AFHTTPRequestOperationManagerとか) が利用できないのが残念。

なお、サンプルアプリのAFNetworking-RACExtensionsあたりの処理は次の記事でも書いていますので、詳細はそちらを参照してください。

libextobjc

@strongify@weakifyのためだけに利用しています。

ただし、実機向けのコンパイルでlibextobjcが利用しているlibffiが64bitに対応していなくてエラーになるので、EXTScope.hのみにインクルードを推奨。

TWMessageBarManager

画面上にオーバレイでメッセージを表示するライブラリ。

サンプルアプリではスイッチ切り替え成功時と通信失敗時のメッセージ表示に利用しています。

次のコードはスイッチ切り替え成功時の例です。

    [[TWMessageBarManager sharedInstance] showMessageWithTitle:NSLocalizedString(@"Updated", @"Updated")
                                                   description:NSLocalizedString(@"Coupon switch was changed successfully", @"Coupon switch was changed successfully")
                                                          type:TWMessageBarMessageTypeSuccess];

使い方も非常にシンプルなので、おすすめです。

VTAcknowledgementsViewController

利用しているCocoaPodsのライブラリのライセンスを一覧表示してくれるライブラリ。

ストーリボード対応日本語ローカライズもしています。

割と面倒なライセンス一覧の管理作業の手間を軽減してくれます。 ただし、ライブラリが依存しているライブラリまで見てくれていない気がします。

XYPieChart

円グラフ (半円なども可能) を描画するライブラリ。

アニメーションをしてくれるたりと見ためがよく、要素ごとにイベントを拾えたり (タップしたときにアニメーションする) カスタマイズもわりとできます。

delegatedataSourceを必要とするライブラリなので、今回のサンプルアプリみたいにデータを全て事前に取得しているような状況ではやや手間に感じました。

あと、GitHubのサンプル画像でドーナツグラフができそうに見えましたが、これは上に角を丸くしたUIViewを置いているだけでした (サンプルアプリではこれと同じようにしてドーナツチャートを実現しています)。

XYPieChartでの描画サンプルコードはこんなかんじになります。

    - (void)viewDidLoad
    {
        [super viewDidLoad];

        self.pieChartView.delegate = self;
        self.pieChartView.dataSource = self;
        self.slices = @[@1.0, @1.5, @0.8];
        [self.pieChartView reloadData];
    }

    - (NSUInteger)numberOfSlicesInPieChart:(XYPieChart *)pieChart {
        return self.slices.count;
    }

    - (CGFloat)pieChart:(XYPieChart *)pieChart valueForSliceAtIndex:(NSUInteger)index {
        return [self.slices[index] floatValue];
    }

iOSPlot

折れ線、円、半円グラフが可能なグラフ描画ライブラリ。

こちらもアニメーションをしてくれて見ためがわりとよいです。

折れ線グラフと円グラフで複数描画でき、dataSource系ではなかったので、サンプルアプリで使ってみましたが、本来欲しいのは詰み上げ折れ線グラフなので、ライブラリの選定に失敗したかもしれないです。

なお、サンプルアプリを作ったときには、chartView.autoscaleYAxis = TRUEにしないとクラッシュするバグがあったり、それ以外にも細かい不具合がある印象を受けました。

点やスライスに値とラベルを表示することができますが、線の太さや点の大きさなどはカスタマイズできなかったりします。また、各要素へのイベントなどは作成できません。

XYPieChartと同じく、iOSPlotでの円グラフのサンプルコードはこんなかんじになります。

    self.chartView.autoscaleYAxis = TRUE;
    self.chartView.xLabels = @[@"A", @"B", @"C"];
    NSMutableArray* components = NSMutableArray.array;
    {
        PCLineChartViewComponent* c = PCLineChartViewComponent.alloc.init;
        c.title = @"value";
        c.points = @[@1.0, @1.5, @0.8];
        c.colour = PCColorRed;
        [components addObject:c];
    }
    self.chartView.components = components;
    [self.chartView setNeedsDisplay];

おわりに

以上、簡単ですがIIJmioのサンプルアプリで利用したライブラリについて紹介しました。

関連リンク

0 件のコメント:

コメントを投稿

注: コメントを投稿できるのは、このブログのメンバーだけです。