iOSアプリで実際に使用したオススメライブラリ(CocoaPods)

LINEで送る
Pocket

SwitでいくつかiOSアプリを開発していますが、実際に使用しているライブラリを紹介したいと思います。
よく使うのもなので、情報も多く使いやすいものばかりです。
ライブラリの管理にはもちろんCocoaPodsです。

HTTPクライアント

  • Alamofire
  • SwiftTask
  • ObjectMapper

サーバのAPIを叩いてxxという処理はよくあることです。
この3つのライブラリでAPIクライアントをつくっています。

AlamofireでHTTPリクエストをつくって、結果をObjectMapperでモデルクラスにマッピングしてあげます。
それらの一連の処理をSwiftTaskで直列化します。

以下のようにAlamofireのHTTPリクエストをSwiftTaskでラップしたAPIクライアントをつくります。

import Alamofire
import SwiftTask
import ObjectMapper

class ApiClient {
    class func findEvent(id: Int, param:[String: AnyObject]?) -> Task<Void, Event?, ErrorType> {
        let task:Task<Void,Event?,ErrorType> = Task(initClosure: { (_, fulfill, reject, configure) -> Void in
            Alamofire.request(Alamofire.Method.GET, makeApiUrl("events/\(id)"), parameters: param, encoding: .URL, headers: makeApiHeaders())
                .validate()
                .responseJSON(completionHandler: { (response) -> Void in
                    if let error = response.result.error {
                        reject(error)
                    } else {
                        fulfill(Mapper<Event>().map(response.result.value!["event"]))
                    }
                })
        })
        return task
    }

モデルクラスは以下のような感じでMappableプロトコルを継承して実装します。

import Foundation
import ObjectMapper

class  Event: NSObject, Mappable, NSCoding {
    var id = 0
    var name = ""
    var url:String?
    var desc:String?
    var created_at:NSDate!
    var updated_at:NSDate!
    
    required init?(_ map: Map) {}
    
    @objc required init?(coder aDecoder: NSCoder) {
        self.id = aDecoder.decodeIntegerForKey("id")
        self.name = aDecoder.decodeObjectForKey("name") as! String
        self.url = aDecoder.decodeObjectForKey("url") as? String
        self.desc = aDecoder.decodeObjectForKey("desc") as? String
        self.created_at = aDecoder.decodeObjectForKey("created_at") as! NSDate
        self.updated_at = aDecoder.decodeObjectForKey("updated_at") as! NSDate
        
    }
    
    @objc func encodeWithCoder(aCoder:NSCoder) {
        aCoder.encodeInteger(self.id, forKey: "id")
        aCoder.encodeObject(self.name, forKey: "name")
        aCoder.encodeObject(self.url, forKey: "url")
        aCoder.encodeObject(self.desc, forKey: "desc")
        aCoder.encodeObject(self.created_at, forKey: "created_at")
        aCoder.encodeObject(self.created_at, forKey: "updated_at")
    }
    
    func mapping(map: Map) {
        id <- map["id"]
        name <- map["name"]
        url <- map["url"]
        desc <- map["description"]
        created_at <- (map["created_at"], DateTransform())
        updated_at <- (map["updated_at"], DateTransform())
    }
}

呼び出し側では以下のようにすればいいです。

ApiClient.listEvents(param).success { (data) in
    if let data = data {
        ・・・・
        }
}.failuer { (error, cancel) in
     ・・・・
}

簡単ですね♪

画像ダウンロード&キャッシュ

  • SDWebImage

これ一つで手軽に画像を非同期ダウンロードしてキャッシュしてくれます。
キャッシュ期間も指定できますし、使い方も簡単。

imageView.sd_setImageWithURL(NSURL(string: "https://example.org/images/sample.jpg"))

Facebook連携

  • FBSDKCoreKit
  • FBSDKLoginKit
  • FBSDKShareKit

いろいろクライアントID等の設定が必要ですが、呼び出すのは簡単。

ログイン処理なら

let login = FBSDKLoginManager()
login.loginBehavior = .SystemAccount
login.logInWithReadPermissions(["public_profile", "email"], fromViewController: self) { (result, error) -> Void in
    ・・・
}

GraphAPIを使うなら

FBSDKGraphRequest.init(graphPath: "me", parameters: ["fields":"id,name,first_name,last_name,email"]).startWithCompletionHandler({ (connection, result, error) -> Void in
    ・・・
}

Fabirc(Twitter関連)

  • Fabric
  • TwitterKit
  • TwitterCore
  • Crashlytics

FarbicはTwitter製のSNSフレームワークです。
TwitterKitやTwitterCoreはTwitter連携のために必要ですが、Crashlyticsはアプリがクラッシュしたレポートをクラウド上に勝手にあげてくれます。
アプリはクラウドにログが残りにくいですから、これは便利です。

AppDelegateでこんな風に指定するだけです。

class AppDelegate: UIResponder, UIApplicationDelegate {

    var window: UIWindow?


    func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
        Twitter.sharedInstance().startWithConsumerKey(Const.twitterKey, consumerSecret: Const.twitterSecret)
        Fabric.with([Crashlytics.self, Twitter.self])

アクセス解析

  • Google/Analytics

Webのアクセス解析としてとても便利なGoogle Analyticsがアプリでも使えちゃいます。
セッション数やユーザ数、ビュー数を管理できたり、イベントを登録(例えばログインしたとか)したりできるのはWebアクセス解析と同じです

アプリの更新通知

  • Siren

アプリの更新はバックグラウンドでしてくれるようになりましたが、この機能をオフにしていたときにはアプリの更新には気づきません。
AppStoreのバージョンと手元のアプリのバージョンを比較して、更新があればユーザに通知を出してくれる便利なライブラリです。
AppStore上のapp idを指定するだけです。

アプリの紹介

ここであげたライブラリはどのアプリでも大体使うようにしています。
最近リリースしたArtue[アーチュ] 展覧会の口コミでも使用していますので、どこで使われているか探ってみてください(笑
artue

LINEで送る
Pocket

コメントを残す