2014/11/26

TypetalkKitをパッケージマネージャCarthageに対応させてみました

Swift+AlamofireなTypetalkのライブラリTypetalkKitを更新して、パッケージマネジャCarthageに対応させてみました。

その他の更新内容は次の通りです。

  • APIの戻り値をウェブAPIと同じにしました
  • 内部コードのJSON処理部分をJSONHelperを使って書き換えました

Carthage対応

フレームワーク向けの新しいパッケージマネージャCarthageに対応しました。

といっても、TypetalkKitでは、共有スキームとしてCarthageを用意して、セマンティックバージョンなタグを付けただけです。

CartageでTypetalkKitを利用するには、次のようなCartfileを用意して、carthage updateします。

$ cat Cartfile
github "safx/TypetalkKit"
github "safx/Alamofire"

$ carthage update
*** Fetching Alamofire
*** Fetching TypetalkKit
*** Checking out Alamofire at "1.1.2"
*** Checking out TypetalkKit at "0.1.2"
*** xcodebuild output can be found in /var/folders/1z/nbzg_tc52hsgf_038n5_z_ch0000gn/T/carthage-xcodebuild.cR6X3v.log
*** Building scheme "carthage" in Alamofire.xcworkspace
*** Building scheme "Carthage" in TypetalkKit.xcworkspace

すると、Carthage.buildAlamofire.frameworkTypetalkKit.frameworkができあがっているので、これをEmbedded BinariesにDnDで入れるだけです。

なお、サブプロジェクトにあるAlamofireは本来不要だと思うのですが、TypetalkKit.framework内のAlamofire.frameworkが不完全っぽいので別途用意しています。

さらに、Alamofire自体がCarthageに対応していないので、上記ではプロジェクトをフォークして勝手にスキームを追加させたものを使っています。

APIの戻り値の統一

ウェブAPIで返されるJSONオブジェクトと、TypetalkKitのレスポンスオブジェクトを完全に一致させました。

手書きJSONパーサを書くのが楽にしたかったので、例えば、get-topicsのトップレベル属性topicsなどを意図的に省略していたりしたのですが、それをやめました。

JSONHelperのためのリライト

JSONからオブジェクトを生成するのを、JSONHelperを使うようにしました。

例えば、チームオブジェクトの生成もオペレータ<<<を使って、次のように簡単に書けます。

public class Team : Deserializable, ObjcBase {
    public let id: TeamID = 0
    public let name: String = ""
    public let imageUrl: NSURL = NSURL()
    public let createdAt: NSDate = NSDate()
    public let updatedAt: NSDate = NSDate()

    public required init() {}

    required public init(data: [String: AnyObject]) {
        id        <<< data["id"]
        name      <<< data["name"]
        imageUrl  <<< data["imageUrl"]
        createdAt <<< (value: data["createdAt"], format: "yyyy-MM-dd'T'HH:mm:ssZ")
        updatedAt <<< (value: data["updatedAt"], format: "yyyy-MM-dd'T'HH:mm:ssZ")
    }
}

以前のコードは完全に手書きで処理が怪しいところもあったので、JSONHelperを使うことでコード量も削減でき、なかなかよかったです。

関連リンク

0 件のコメント:

コメントを投稿

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