371
380

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

【Swift】iOSアプリ開発で使える(使いたい)Swiftライブラリー

Last updated at Posted at 2017-11-24

iOSアプリ開発で(自分が)使えるなあ、使いたいなあと思ったライブラリーをリストアップします。Swiftのみとして、Objective-Cは載せていません。

Reactive Extensions

RxSwift

Combine Frameworkの登場で自分にとってのRxSwiftは終焉を迎えそうです
AppleがWWDC19で発表したCombine Frameworkは、私がアーキテクチャー上最も重要だと考えるRxSwiftの主機能(Publish/Subscribeによる)Observer(パターン)を完全に置き換えます。

RxはReactive Extensionsの略です。もともとはC#が発祥ですが、javaを始めとしてswiftにも実装されています。swiftには独自の拡張として、RxCocoaがあり、iOSのUIKitをReactive Extensionsのパーツとして使うことができます。

自分勝手な視点ですが利点をあげると、

  1. View(UIView/UIViewController)の制御を非同期に記述することが容易。
  2. それによってViewを別のレイヤー(ViewModel/Modelなど)から容易に分離することができる。

RxSwiftがなぜ有用と考えるのかの自分なりの考察をこちらにアップしました。
iOSアプリの基本設計を考える:疎結合の概念から構造化、MVVM、RxSwiftまで

非同期処理

非同期処理ライブラリーです。
実はRxSwiftでも同様の記述は実現できるのですが、あえてここで上げてみました。
利点は単純です。

  1. 非同期の処理を綺麗に書けること。

例えば非同期の処理をネストしないでシリアルに記述できたり、平行動作している非同期の処理をJoinできたりもします。機能ではなく記述であると言ってしまっても良いかもしれません。
これは標準でSwiftに言語として取り込んで欲しい気がします。BrightFuturesの開発者はSwiftに取り込んで欲しいという講演もしています。Youtube参照

PromiseKit

BrightFutures

Bolts-Swift

SwiftTask

ネットワーク通信

Alamofire

定番です。ただ高機能すぎるかもしれません。

APIKit

APIKitは日本の方が開発されたシンプルで綺麗なコードが書けるネットワークライブラリーです。

ネットワークの接続監視

Reachability.swift

Objective-CではApple製のReachabilityが標準ですが、言語をSwiftで統一したい場合はこちらを。

参考例をこちらの記事で書いています。
[iOSアプリの基本設計を考える:疎結合の概念から構造化、MVVM、RxSwiftまで]
(https://qiita.com/BlueEventHorizon/items/a712e6fa9fcdc1bdd4b5)

デコーダ

ObjectMapper

定番です。
もはや下記Codable一択な感じがしますね。

Himotoki

Himotokiは、軽量、タイプセーフなJSONデコーダです。日本の方が開発されており、同じく日本初のAPIKitと組み合わせて利用すされるケースも散見されます。自分も結構この組み合わせは好きです。

Codable

CodableはSwift標準機能であり、シンプルに記述できてとても良いです。このCodableの構造体を出力するmac用のアプリケーションがありますのでこちらをご覧ください。
(※デコーダ=>正確に言うとHTTPレスポンスのデコーダですね)

リソースの定義

Rswift

ソースコードの文字列を始めとするリソースの定義をstructを使って自動的にリストアップしてくれます。

例えば

Swift
let icon = UIImage(named: "settings-icon")
let font = UIFont(name: "San Francisco", size: 42)
let color = UIColor(named: "indictator highlight")
let viewController = CustomViewController(nibName: "CustomView", bundle: nil)
let string = String(format: NSLocalizedString("welcome.withName", comment: ""), locale: NSLocale.current, "Arthur Dent")

上のコードは

Swift
let icon = R.image.settingsIcon()
let font = R.font.sanFrancisco(size: 42)
let color = R.color.indicatorHighlight()
let viewController = CustomViewController(nib: R.nib.customView)
let string = R.string.localizable.welcomeWithName("Arthur Dent")

と書くことができるようになります。(https://github.com/mac-cain13/R.swift より引用)

アニメーション

fluid-interfaces

WWDC 2018のセッション"Designing Fluid Interfaces"の述べられたジェスチャーベースのデザイン理論に基づいて?作成されたらしいです。
![fluid-interfaces]
(https://raw.githubusercontent.com/nathangitter/fluid-interfaces/master/Resources/flashdemo.gif)

lottie-ios

アニメーションといえば、lottieがイチオシです。
Airbnbが開発したiOS、Android、Web対応のアニメーション・ライブラリです。
Adobe After Effectsから、json形式に変換してexportすることで、ios(など)にAfter Effectsと同等のアニメーションを実装することができます。
ただし、全てのアニメーションEffectsがexportできるかと言うとそうではないので、使えない機能を把握することが必須です。(ほぼほぼ使えるようですが)

![lottie-ios]
(https://github.com/airbnb/lottie-ios/raw/master/_Gifs/Examples1.gif "lottie-ios")
https://github.com/airbnb/lottie-ios より引用

Hero

トランジション・アニメーション集
![Hero]
(https://camo.githubusercontent.com/ad3b44a1f8c9ad51ba120b6281b03335bd78bb22/68747470733a2f2f63646e2e7261776769742e636f6d2f6c6b7a68616f2f4865726f2f656262336632632f5265736f75726365732f66656174757265732e737667 "Hero")
![Hero2]
(https://camo.githubusercontent.com/737194a3442f67b2066bd1be40d0ced772c158a1/68747470733a2f2f63646e2e7261776769742e636f6d2f6c6b7a68616f2f4865726f2f656262336632632f5265736f75726365732f64656661756c74416e696d6174696f6e732e737667 "Hero2")

LTMorphingLabel

UILabelのアニメーション
![LTMorphingLabel]
(https://cloud.githubusercontent.com/assets/219689/3491822/96bf5de6-059d-11e4-9826-a6f82025d1af.gif "LTMorphingLabel")

Side Menu

ちょっと真似たいメニュー

Gemini

写真を扱うときは使ってみたい
![Gemini]
(https://github.com/shoheiyokoyama/Assets/raw/master/Gemini/circle-vertical.gif "Gemini")

NVActivityIndicatorView

NVActivityIndicatorViewは最近人気があるようです。
シンプルかつバリエーションがあっていい感じです。

![NVActivityIndicatorView]
(https://raw.githubusercontent.com/ninjaprox/NVActivityIndicatorView/master/Demo.gif "NVActivityIndicatorView")

インジケータ

PKHUD

ネットワークのレスポンス待ちなどで表示するプログレス・インジケータ。軽量。

PKHUD

GradientCircularProgress

これも綺麗で好きです。

スクリーンショット 2017-12-09 20.53.14.png

データベース

Realm Swift

データベースのコードを簡単に、簡潔に記述できる優れものです!
アプリ自身がデータベースを持っており、サーバ側のデータベースと同期できるために、オフライン状態でもアプリが動作することがっで来ます。
リレーションも使えます。

Swift
class Dog: Object {
  dynamic var name = ""
  dynamic var age = 0
}

// デフォルトRealmを取得します
let realm = try! Realm()

let myDog = Dog()
myDog.name = "Rex"
myDog.age = 1

// データを永続化するのはとても簡単です
try! realm.write {
  realm.add(myDog)
}

コードは一部こちらより拝借いたしました。

課金

SwiftyStoreKit
課金プログラミングは結構複雑な上に失敗できない(他も失敗はダメですけど)のでコレ

グラフ

Graphs

リクルート発のシンプル軽量なグラフ作成ライブラリー

Date

SwiftDate

Dateはミスしやすいので重宝します。

画像取得

Kingfisher

URLを指定してネットワーク上の画像を取得できます。

Nuke

機能的にはKingfisherとさほど変わらないようですが、
下記記事で計測した結果、Nukeが画像表示で一番早いそうです。

 【[Swiftの有名画像キャッシュライブラリを比較してみた]
(https://qiita.com/H_Crane/items/422811dfc18ae919f8a4)】

UserDefaults

DefaultsKit

~Codableプロトコルを利用し構造体もUserDefaultsを使ってそのまま読み書きできます。
若干記述が長い気もしますが、UserDefaultsを直接使うよりははるかにマシです。~

371
380
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
371
380

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?