Edited at

iOSライブラリ選定チートシート

iOSアプリ開発のライブラリ選定時に、定番ライブラリが沢山乗っている記事があったら嬉しいな〜と思い、調べて書いてみました。

「他にもこんな良いライブラリがあるよ!」等ありましたら、教えていただけると嬉しいです!


  • GitHubでstarが多かったり、よく名前を耳にするライブラリを集めました

  • 2019年5月現在ではSwift4.2までしか対応していない物も多いですが、いくつかは既にSwift5に対応しています

  • ライブラリ名の横にライセンス種別を記載しています


Network

迷ったらAlamofireを使えば良いと思います


Alamofire(MIT)

https://github.com/Alamofire/Alamofire


  • パパっとネットワーク通信ができるライブラリ

  • Alamofireのメソッド1つでAPIが叩けるので、クセがなくとても使いやすい


APIKit(ライセンス文)

https://github.com/ishkawa/APIKit


  • タイプセーフ(APIのレスポンスをModelにパースしやすい構成)なネットワーキングライブラリ

  • Modelへのパース処理もAPIKitに含まれているので、Alamofireに比べたら専用のサブクラスを定義をしなければいけないというクセがある


Moya(MIT)

https://github.com/Moya/Moya


  • Alamofireのラッパーライブラリ, Alamofireの処理をさらに簡略化

  • リクエスト型を定義して、Moyaのメソッドに入れればAPIの処理を全部やってくれる

  • 最近の流行り


JSONDecoder

Codableを使ってみて、使いにくいと思ったらSwiftyJSONやHimotokiに手を出すと良いです


Codable(Decodable)

Swiftの標準ライブラリ


  • レスポンスのJSONのkeyと同じ名前の変数を定義しておけば自動でパパッとデコードしてくれる


SwiftyJSON(MIT)

https://github.com/SwiftyJSON/SwiftyJSON


  • 使用するためのクラス定義などが必要なく、クセが少ないので初心者におすすめ


ObjectMapper(MIT)

https://github.com/tristanhimmelman/ObjectMapper


  • デコードの独自演算子(<-)などがあって面白い


Himotoki(MIT)

https://github.com/ikesyo/Himotoki


  • ObjectMapperにインスパイアを受けているらしい

  • APIKit + Himotoki構成をよく聞く

  • デコードの独自演算子(<|)などがこちらにもある


非同期処理


Promise

Javascript発祥の非同期処理オブジェクト。複数のライブラリが存在するが、大体の書き方はどれも同じ。おすすめはHydra


PromiseKit(MIT)

https://github.com/mxcl/PromiseKit


  • 一番有名


  • .then.doneを使い分けなければいけないので初心者にはあんまりかな(?)


Hydra(MIT)

https://github.com/malcommac/Hydra


  • async/await的な書き方もできる


Promises(Apache2.0)

https://github.com/google/promises


  • Google作

  • シンプルなPromiseって感じで好き


SwiftTask(MIT)

https://github.com/ReactKit/SwiftTask


  • Promiseをさらに拡張した感じ

  • ガチで非同期処理やりたい人向け


Bolts(BSD)

https://github.com/BoltsFramework/Bolts-Swift


  • 個人的にはPromiseで良いと思った

  • 「Boltsのここが良い!!」という情報求む!


RxSwift(MIT)

https://github.com/ReactiveX/RxSwift


画像取得

URLから画像をダウンロードして表示するやつ

たくさんあるのでこちらの記事を参照: Swiftの有名画像キャッシュライブラリを比較してみた


Kingfisher(MIT)

https://github.com/onevcat/Kingfisher


  • アニメーション, placeholder, prefetchなど多機能で無難


Nuke(MIT)

https://github.com/kean/Nuke


  • 高速で良い

  • 速さを求めたり、大量に画像を表示するならこれ


データベース

Modelをアプリ内に保存しておきたい場合にデータベースライブラリを用いる事が多い。記事アプリのオフライン閲覧とかこれ。


CoreData


  • Swiftの標準ライブラリ

  • 最近はあまり使われてないのかな?


Realm(Apache2.0)

https://github.com/realm/realm-cocoa


Linter


SwiftLint(MIT)

https://github.com/realm/SwiftLint


  • プログラムの記述方法をチェックしてくれる物

  • 変な書き方(スペースを入れていないなど)をXcode上のwarningとして表示してくれる。


Logger

ログ出力ライブラリを導入することでデバッグがしやすくなるのでおすすめ


XCGLogger(MIT)

https://github.com/DaveWoodCom/XCGLogger


  • シンプル

  • [info], [error], [warning]等のラベルとログが出力されたクラスと行番号を表示できる。


SwiftyBeaver(MIT)

https://github.com/SwiftyBeaver/SwiftyBeaver


  • ログを閲覧する専用のデスクトップアプリがあり、ログの種類でフィルターをかけたり, マーキングできたりするリッチなLogger

  • もちろんLogger単体としても使用できる


AutoLayout

コード記述でAutoLayoutをするやつ


NSLayoutAnchor


  • 標準ライブラリ

  • 普通に使いやすい


SnapKit(MIT)

https://github.com/SnapKit/SnapKit


  • 昔から有名なAutoLayoutのライブラリ

  • が、ほぼ同じことができるので最近は標準ライブラリのNSLayoutAnchorで十分と言われている


TinyConstraints(MIT)

https://github.com/roberthein/TinyConstraints



  • NSLayoutAnchorのラッパーライブラリ


  • SnapKitを使うくらいならこちらの方がいい気がする


Misc


Reachability.swift(MIT)

https://github.com/ashleymills/Reachability.swift


  • ネットワーク状態を取得できる

  • APIを叩く前にネットワーク情報を調べる事で無駄な通信を減らせる上、エラーハンドリングもやりやすくなる


PluggableAppDelegate(MIT)

https://github.com/pchelnikov/PluggableAppDelegate


  • 色々とセットアップを行うとすぐに肥大化してしまうAppDelegateを複数のクラスに分けて綺麗に書くことができる


ReusableKit(MIT)

https://github.com/devxoul/ReusableKit

Table/CollectionViewのCellのregister, dequeueを以下のように簡単に行えるようにする物。


let reusableUserCell = ReusableCell<UserCell>()
collectionView.register(reusableUserCell)
collectionView.dequeue(reusableUserCell)

Cellをサブクラスのままdequeueできるので、Cellのダウンキャストの必要がなくて便利。


R.swift(MIT)

https://github.com/mac-cain13/R.swift


let icon = UIImage(named: "settings-icon")
let font = UIFont(name: "San Francisco", size: 42)
let color = UIColor(named: "indictator highlight")


let icon = R.image.settingsIcon()
let font = R.font.sanFrancisco(size: 42)
let color = R.color.indicatorHighlight()

といった感じで記述できるように、画像などのリソースの型を定義するコードを自動生成するライブラリ


SwiftDate(MIT)

https://github.com/malcommac/SwiftDate


  • 日付周りの処理を簡単にやってくれるもの


KeychainAccess(MIT)

https://github.com/kishikawakatsumi/KeychainAccess


  • ID, パスワード保存


LicensePlist(MIT)

https://github.com/mono0926/LicensePlist


  • 導入するだけでライセンス一覧を設定アプリ内に表示できるすごい物


アニメーション系


PKHUD(MIT)

https://github.com/pkluz/PKHUD


  • AppleっぽいデザインのHUD



(Githubから引用)


lottie-ios(Apache2.0)

https://github.com/airbnb/lottie-ios


  • いい感じのアニメーション集



(Githubから引用)


Hero(MIT)

https://github.com/HeroTransitions/Hero


  • いい感じのViewControllerアニメーション

  • AppleStoreのTodayみたいな画面遷移ができる

(Githubから引用)


SkeletonView(MIT)

https://github.com/Juanpe/SkeletonView


  • TableViewとかのロード中に出すやつ

(Githubから引用)


レイアウト系


IGListKit(MIT)

https://github.com/Instagram/IGListKit


  • Insta作CollectionViewライブラリ

  • 複雑なCollectionのレイアウトでもスッキリ書く事ができる


AMScrollingNavbar(MIT)

https://github.com/andreamazz/AMScrollingNavbar


  • スクロールするとNavigationBarが折りたたまれるやつ

(Githubから引用)


PanModal(MIT)

https://github.com/slackhq/PanModal


  • Slack作下から出てくるメニュー

  • Twitterアプリのアカウント切り替えメニューみたいなやつ



(https://www.cocoacontrols.com/controls/panmodal から引用)


SPStorkController(MIT)

https://github.com/IvanVorobei/SPStorkController


  • AppleMusicのような下から出てくる画面

  • これから流行りそう

(Githubから引用)


TOCropViewController(MIT)

https://github.com/TimOliver/TOCropViewController


  • SNSでよくある、プロフィール用に画像を丸く切り抜く画面

(Githubから引用)


XLPagerTabStrip(MIT)

https://github.com/xmartlabs/XLPagerTabStrip


  • 元々Androidのレイアウトだったが、最近iOSで流行り始めているSegment系のライブラリ

(Githubから引用)


FSPagerView(MIT)

https://github.com/WenchaoD/FSPagerView


  • スライドショーなどに使える横スクロール

(Githubから引用)


SwiftMessages(MIT)

https://github.com/SwiftKickMobile/SwiftMessages


  • 色々なアラート/トーストを表示できる

(Githubから引用)


ActiveLabel.swift(MIT)

https://github.com/optonaut/ActiveLabel.swift


  • Label拡張 URLとかハッシュタグとかを埋め込める



(Githubから引用)


TagListView(MIT)

https://github.com/ElaWorkshop/TagListView


  • 検索画面のタグ検索とかによくあるやつ

(Githubから引用)