Edited at
NewsPicksDay 13

2018年これだけは知っておきたいiOSライブラリ31選

いらっしゃいませ!

NewsPicks Advent Calendar 2018の13日目を担当する齋藤です!

普段はNewsPicksでiOSエンジニアをやりながら個人でもアプリ開発をしています。

今年は寝る間も惜しんでひたすらiOSを書いていて、6つくらいのアプリに関わりました。

その中で自分が欠かすことのできないライブラリ、使ってみたいライブラリをまとめてみます!


欠かせないシリーズ


IBAnimatable

IBAnimatable.gif

これだけでこのレベルのアニメーションを作れるのかと驚いた。。

でも重宝するのはStoryboardやXib上でViewやButtonの角丸だったりを簡単に作れるところでした。

個人開発するアプリでは必ず初めに入れるライブラリのひとつです。


PINRemoteImage

SDWebImageの時代は終わったのか、、、と感じるPinterest製の画像キャッシュライブラリ。

SDWebImageと比べ圧倒的にメモリ使用量が少ないそう。画像キャッシュ系のライブラリはたくさんありますが機能としては割とみな同じようなものなので、メモリの使用量は選ぶ基準の1つとして大切です。

SDWebImage と PINRemoteImage の速さを比較してみた


RxSwift

いまやiOS開発のデファクトになりつつあるRxSwift。

本来のRx的な非同期処理はもちろんですが、RxSwiftの良さは独自に提供されているRxCocoa。UIKitの色々なクラスのExtensionを定義してくれています。

例えば以外と面倒な文字数制限があり、かつ、あと何文字入力可能か表示されるtextFieldを作りたかったら


ViewController.swift

        textField.rx.text.subscribe(

onNext: { [weak self] text in
if let txt = text {
guard let strongSelf = self else {
return
}
if txt.count > strongSelf.maxLength {
let substr = String(txt.prefix(10))
strongSelf.textField.text = substr
} else {
strongSelf.textCountLabel.text = "あと\(strongSelf.maxLength - (txt.count))文字"
}
}
}).disposed(by: disposeBag)

こんな感じで書けたりします。(もっと良い書き方あったらぜひ教えて下さい。。!)


Moya

diagram.png

みんな大好き、いまや通信で不可欠になっているAlamofireのラッパーライブラリです。

API通信周りの処理は全てお任せできます。また、公式にRxSwiftも採用しているところも○

swift4以上であればデコーダもCodableが優秀すぎるので、Moya + Codable + RxSwiftのAPI通信が自分は最良の選択な気がします。

Swift4 + Moya + RxSwift + Codableで作るAPIクライアント

ちなみにquicktypeというサイトを使用すればAPIの戻り値をコピペするだけでCodableのModelを一発で作ってくれてめちゃくちゃおすすめです。

スクリーンショット 2018-12-12 12.40.18.png


SwiftDate

自分は大嫌いですがアプリを作成する上で切っても切れないDate関連。

SwiftDateを使用すれば簡単に記述できます。


view.swift

// Math operations support time units

let _ = ("2010-05-20 15:30:00".toDate() + 3.months - 2.days)
let _ = Date() + 3.hours
let _ = date1 + [.year:1, .month:2, .hour:5]
let _ = date1 + date2
// extract single time unit components from date manipulation
let over1Year = (date3 - date2).year > 1


IQKeyboardManager

アプリ作成で絶対に遭遇するキーボードとTextViewやTextFieldの入力欄がかぶる問題。

AppDelegateに以下記述するだけで一切気にする必要なくなります。


AppDelegate.swift

class AppDelegate: UIResponder, UIApplicationDelegate {

var window: UIWindow?

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {

IQKeyboardManager.shared.enable = true

return true
}
}



UI系


タブ系


animated-tab-bar

しゃれおつなアニメーションtabbar

animatedTabBar.gif


Parchment

キュレーション系でよく見る上のPagingのメニューを簡単に実装できます

68747470733a2f2f73332d75732d776573742d312e616d617a6f6e6177732e636f6d2f70617263686d656e742d73776966742f70617263686d656e742d64656c65676174652e676966.gif

画像も載せられたり

68747470733a2f2f73332d75732d776573742d312e616d617a6f6e6177732e636f6d2f70617263686d656e742d73776966742f70617263686d656e742d756e73706c6173682e676966.gif


ColorMatchTabs

最近流行りのおしゃれな上タブ

preview.gif


image系


ImageSlideshow

Twitterライクな画像拡大表示できるライブラリ

68747470733a2f2f647a776f6e73656d72697368372e636c6f756466726f6e742e6e65742f6974656d732f325230363238336e3034305633503370306934322f657a6769662e636f6d2d6f7074696d697a652e676966.gif


TOCropViewController

画像の切り抜きライブラリ

screenshot.jpg


FacebookImagePicker

FaceBookからその人のアルバムを引っ張ってこれます

preview.png


FSPagerView

画像のスライドショーを簡単に実装できます。

拡張性も高いのが○

9003d880-ed65-11e6-882e-4587c97c8878.gif


マテリアルデザイン系


Material

material designをiOSで簡単に実装できます

687474703a2f2f7777772e636f736d69636d696e642e636f6d2f6d6174657269616c2f77686974652f627574746f6e2e676966.gif


Alert系


CDAlertView

アイコン付きAlertView

4bc1516e-a8e8-11e6-8e8b-c1a088f5daa0.png


Alertift

標準のAlert、ActionSheetのラッパーライブラリ。

普通に書くと長くなってしまいますがAlertift使用すればこれだけで書けます。


view.swift

Alertift.alert(title: "hoge",

message: "hugo")
.buttonTextColor(.red)
.action(.default("ok")) { _, _, _ in
print("ok tap")
}
.action(.cancel("キャンセル"))
.show()


ボタン系


TransitionButton

使ってみたい、loadingも入れられるおしゃれボタン

68747470733a2f2f63646e2e6472696262626c652e636f6d2f75736572732f36323331392f73637265656e73686f74732f313934353539332f73686f742e676966.gif


カレンダー系


FSCalendar

数多くあるカレンダーライブラリの中でも一番拡張性が高く、使いやすかった印象

22354a0e-a342-11e6-8ae6-0614ea7f35ae.gif


Label系


ActiveLabel.swift

UIlabelに簡単にURL、ハッシュタグ、メンションを埋め込める

demo.gif


LTMorphingLabel

おしゃれなアニメーションつきUILabel

96bf5de6-059d-11e4-9826-a6f82025d1af.gif


menu系


circle-menu

アニメーションに気合い入りまくりの円形のメニュー

circle-menu.gif


SideMenu

拡張性の高いサイドメニュー

SlideOut.gif


GuillotineMenu

上から降ってくるUIのメニュー

example.gif


PageControl系


CHIPageControl

ワンランク上のPageControl

demo (1).gif


TextField系


TextFieldEffects

9種類から選べるカスタムTextField

UXを考えるとplaceHolderは入力始めても表示されていたほうが○

Hoshi.gif


チュートリアル系


Gecco

よく見るチュートリアル

2d1cb602-c038-11e5-8095-a2a0d77f99db.gif


paper-onboarding

おしゃれWalkthrough

paper-onboarding.gif


validation系


Validator

文字数制限やメールアドレスなどにvalidationを簡単にかけることができます。

また、自分でvalidationを追加することもできます。

validator-example.mov.gif


permission系


Permission

面倒なカメラや位置情報などのpermissionを簡単に管理することができます.


Firebase系


Pring

最近流行りの非同期通信が得意のFirebase。ただ、デフォルトだと少し面倒なことが多いです。

Pringを使用すれば


User.swift

class User: Object {

dynamic var name: String?
dynamic var nickName: String?
}

このようにモデルを定義して


view.swift

let user: User = User(id: "ID")

user.save()

これだけで保存やupdateなどもできます。

また、TableViewやCollectionViewなどにdataSourceをセットしてあげれば、非同期で更新された値がviewに即座に反映されます。


その他


Compass

URLSchemeやpushからの起動などを楽にハンドリングでき、重宝しました。


最後に

ライブラリは短い工数で実装できるようになる反面、カスタマイズしづらかったり、技術力が不足している段階でライブラリに頼るのもよくありません。ただ、上手に使用すれば間違えなく、自分の助けになります。使うべきかそうでないかをうまく見極めて、快適なライブラリ生活を送りましょう!!

明日は@satou30による「Pick と Like で振り返る 2018年 NewsPicks で盛り上がったニュース」です!ぜひご覧下さい〜^o^