iOSアプリで実際に使用したオススメライブラリ(CocoaPods)
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[アーチュ] 展覧会の口コミでも使用していますので、どこで使われているか探ってみてください(笑