iOSアプリ開発に便利なライブラリ

#はじめに
- ライブラリについてメモとして記事を書いています。

#便利なライブラリ一覧
- IQKeyboardManager
- Kingfisher
- SnapKit
- lottie-ios

#IQKeyBoardManager
### どんなライブラリ？
- IQKeyboardManagerのGitHubから引用

    - While developing iOS apps, we often run into issues where the iPhone keyboard slides up and covers the UITextField/UITextView. IQKeyboardManager allows you to prevent this issue of keyboard sliding up and covering UITextField/UITextView without needing you to write any code or make any additional setup. To use IQKeyboardManager you simply need to add source files to your project.

    - iOSアプリの開発中に、iPhoneキーボードが上にスライドしてUITextField / UITextViewをカバーするという問題に遭遇することがよくあります。 IQKeyboardManagerを使用すると、コードを記述したり追加の設定を行ったりすることなく、キーボードが上にスライドしてUITextField / UITextViewをカバーするというこの問題を防ぐことができます。 IQKeyboardManagerを使用するには、プロジェクトにソースファイルを追加するだけです。

    - [IQKeyboardManager - GitHub](https://github.com/hackiftekhar/IQKeyboardManager)

### 便利ポイント
- 基本、一行で実装が終わる。
- 自分でスクロールビューなどを使って、スクロールさせる必要がない
- キーボード上のツールバーを自動で追加してくれる
    - 一つのViewに乗っているTextFieldを認識して、ツールバーに移動ボタンとDoneボタンが作られる。　しかし、StackViewを使用する場合はViewが認識されないこともあるため、その時はStackViewも認識するようにコードを書く必要がある。


#Kingfisher
###　どんなライブラリ？
- KingfisherのGitHubから引用
    - Kingfisher is a powerful, pure-Swift library for downloading and caching images from the web. It provides you a chance to use a pure-Swift way to work with remote images in your next app.
    - Kingfisherは、Webから画像をダウンロードしてキャッシュするための強力で純粋なSwiftライブラリです。それはあなたの次のアプリでリモート画像を操作するために純粋なSwiftの方法を使用する機会を提供します。
    - [Kingfisher - GitHub](https://github.com/onevcat/Kingfisher)

###　画像キャッシュライブラリについて
- [Swiftの有名画像キャッシュライブラリを比較してみた　- GitHub](https://qiita.com/hcrane/items/422811dfc18ae919f8a4)
- 画像キャッシュライブラリをする時、そのライブラリが何の言語で書かれているか確認する。
    - Kingfisherは主にSwiftで書かれているが、SDWebImageはObjective-Cで書かれている。KingfisherとSDWebImageは使用する時のコードの書き方が似ているのは、SDWebImageをSwiftに書き換えたライブラリがKingfisherだからだと思います。
- 画像のファイル形式で何を扱っているのかも確認する。
    - 最近だとGoogleが開発したWebP形式の画像が使われるようになってきている。WebP画像を使う場合、WebPに対応しているライブラリなのかどうか確認する必要がある。iOS端末はまだWebPの画像を表示できないが、WebP対応済みのライブラリだと自動で表示できる状態に変更してくれる。
    - Kingfisherは現在（2021-11-8）WebP形式のには対応されていない。KingfisherでWebPを使いたい場合、KingfisherでWebPを使えるようにするライブラリがあります。


### キャッシュについて
- IT用語辞典 e-Wordsから引用

キャッシュとは、低速な記憶装置や伝送路から読み出したデータのうち、直近に読み込んだものや使用頻度が高いものを高速な記憶装置に複製しておくこと。また、その際に使われる高速な記憶装置や、複製されたデータそのもののこと。データの読み込みを高速化したり、伝送量を削減することができる。

### 便利ポイント
- UITableViewなどのセルが再利用される場合かつそのセルの画像をデータベースとの通信でとってくる場合に画像をキャッシュする必要がある。その時に簡単に画像キャッシュを実装できる。
- WebP画像でもiOS端末が表示できる状態に変更してくれる。

### 画像キャッシュでの注意点
- 画像キャッシュは一意のURLを認識して画像を保持している。そのため、URLを変更せずに画像だけを変更した場合、端末はキャッシュを利用して画像を表示するため、以前の画像が表示されてしまう。なので、画像を変更した場合はキャッシュを削除する必要がある。また、キャッシュを行うとアプリの容量がだんだん大きくなる。その際にも容量を空けるためにキャッシュを削除する必要がある。

#SnapKit
### どんなライブラリ？
- SnapKitのGitHubから引用
    - SnapKit is a DSL to make Auto Layout easy on both iOS and OS X.
    - SnapKitは、iOSとOSXの両方で自動レイアウトを簡単にするDSLです。

### 便利ポイント
- オートレイアウトが簡単に書ける。
- translatesAutoresizingMaskIntoConstraints = false の書き忘れがなくなる。 

#lottie-ios
### どんなライブラリ？
- lottie-iosのGitHubから引用
    - Lottie is a mobile library for Android and iOS that natively renders vector based animations and art in realtime with minimal code.
    - Lottie loads and renders animations and vectors exported in the bodymovin JSON format. Bodymovin JSON can be created and exported from After Effects with bodymovin, Sketch with Lottie Sketch Export, and from Haiku.
    - For the first time, designers can create and ship beautiful animations without an engineer painstakingly recreating it by hand. Since the animation is backed by JSON they are extremely small in size but can be large in complexity! Animations can be played, resized, looped, sped up, slowed down, reversed, and even interactively scrubbed. Lottie can play or loop just a portion of the animation as well, the possibilities are endless! Animations can even be changed at runtime in various ways! Change the color, position or any keyframable value! Lottie also supports native UIViewController Transitions out of the box!
    - Lottieは、最小限のコードでリアルタイムにベクターベースのアニメーションとアートをネイティブにレンダリングするAndroidおよびiOS用のモバイルライブラリです
    - Lottieは、bodymovinJSON形式でエクスポートされたアニメーションとベクターをロードしてレンダリングします。 Bodymovin JSONは、bodymovinを使用したAfter Effects、Lottie Sketch Exportを使用したSketch、およびHaikuから作成およびエクスポートできます。
    - エンジニアが手作業で丹念に再作成することなく、デザイナーが初めて美しいアニメーションを作成して出荷できるようになりました。アニメーションはJSONに基づいているため、サイズは非常に小さくなりますが、複雑さが大きくなる可能性があります。アニメーションは、再生、サイズ変更、ループ、高速化、低速化、反転、さらにはインタラクティブにスクラブすることができます。ロッティはアニメーションの一部だけを再生またはループすることもでき、可能性は無限大です！アニメーションは、実行時にさまざまな方法で変更することもできます。色、位置、またはキーフレーム可能な値を変更してください！ Lottieは、すぐに使用できるネイティブUIViewControllerトランジションもサポートしています。

### 便利ポイント
- 難しいアニメーションを画像で貼ることで実現できる。
- ベクター形式の画像を簡単に使うことができる。

### lottie-iOSを使う時の注意点
- StoryboardやxibといったInterface Builder側でlottieを設定してしまうと、エラーが発生した時の原因調査が大変になる。そのため、Interface Builder側ではViewのみを配置して、lottieの設定はコードで行うのがベスト
- 個人開発アプリにlottieを使ってしまうと、デザインがリッチすぎて浮いてしまう場合があるので、使用する際はアプリのデザイン性と一致しているかを考えながら使用する。