こんにちは、iOSエンジニアのちぎらです。今回は Mirrativ の iOS アプリで使っているライブラリをご紹介します。
Mirrativ ではどんなライブラリを使用していますか?と質問されることが時々あります。設定画面のライセンス情報に一覧で表示はされているものの、ライブラリ名だけでは用途が分かりにくいものもあるので、説明を添えて一覧で確認できるようにしようというのが今回の趣旨です。
ライブラリ管理には CocoaPods、Carthage を使用しています。最新のライブラリに追従できるように、一部のライブラリでは CI(Bitrise)上で定期的にバージョン更新のためのプルリクを作成しています。Swift Package Manager はまだ導入していませんが、タイミングを見て集約していけたらいいですね。
ライブラリ一覧
HTTP通信/ストリーミング
Alamofire
HTTP通信をサポートしてくれるライブラリ。以前は Alamofire のレスポンスを SwiftyJSON でパースするという構成になっていたのですが、Codableを活用した改善 の為、新規で作成するものについては独自の実装になっています。
HaishinKit
弊社のエンジニア shogo4405 による映像と音声のストリーミング処理のためのライブラリ。他社でも導入されています!ReplayKit からデータを受け取り、 HaishinKit を介してストリーミング処理を行なっています。
Starscream
RFC 6455 WebSocket に準拠したライブラリ。Mirrativ の低遅延配信のクライアント実装の一部に活用されています。
UI
lottie-ios
Jsonファイルからベクターアニメーションを簡単に再生してくれるライブラリ。 Mirrativ では配信/視聴時のギフトやイベント時の演出など、リッチなアニメーションを表示する場合に使用されています。
SDWebImage
画像データの非同期通信での取得、表示、キャッシュなどを行うライブラリ。
MXParallaxHeader
Twitter のプロフィールページのように、高さが可変なヘッダー部とスクロールするコンテンツ部を両立させるライブラリ。
MXParallaxHeader は Mirrativ のマイページ上に表示されているエモモ(アバター)の制御に一部影響を与えてしまったので、そのような箇所では独自の実装でスクロール制御を行なっています。
TTTAttributedLabel
文字列を装飾したりリンクを付与したりするライブラリ。テキストのレイアウトやシャドウの表示が期待通りでない場合があり、新規で実装していくものについては UITextView など標準のクラスを使用して実現した方がいいと考えています。
ログ
Puree-Swift
アプリ上のログに関するデータをサーバーに送信する際に利用しているライブラリ。ログによって送信先のサーバーを振り分けたりなどもしてくれます。
Logboard
フレームワーク内で、開発中にコンソール上にログを表示するためのライブラリ。
ReactorKit + Rx
ReactorKit
以前書いたiOSの設計についての記事でも紹介したのですが、新しく作成する画面については ReactorKit の思想に則って作成するようにしています。今は iOS12.4 のサポートがあるので Combine を導入できていませんが、Combine の導入をしていく際にこの辺りの実装をどのように移行させていくかが課題になるかなと思っています。
RxCocoa, RxRelay, RxSwift
Mirrativ では元々 Rx 系のライブラリは導入しておらず、ReactorKit の導入と共に付随するライブラリとして上記のライブラリが入りました。Mirrativ では ReactorKit をちゃんと活用するために通信処理などを Rx 系のメソッドでラップして便利に使うようにしてはいますが、すべての処理をリアクティブ書こうとすると場合によっては複雑になってしまう箇所もあるので、ほどほどにリアクティブな実装を取り入れていこうという方針で実装しています。
永続化
MagicalRecord
アプリに関する一部のデータを永続化するのに使用されています。箇所的にはほぼ使われていないのですが、MagicalRecord のリポジトリにも標準の CoreData を使ってねという記述があるのでタイミングを見て脱却できればいいなと思います。
Firebase
Firebase (Performance, DynamicLinks, Crashlytics)
Firebase 関連のライブラリ。ライセンスの一覧に含まれている PromiseObjC, Protobuf, GTMSessionFetcher などといったライブラリは、Firebase 関連のライブラリのインストールに付随して導入されるライブラリです。
その他
LicensePlist
「設定」内で表示されるアプリで使用されているライブラリの一覧を plist ファイルに出力してくれるライブラリ。
SwiftGen
コード生成によって、文字列や画像などのリソースを文字列リテラルでなくタイプセーフにコード補完の効くように指定できるライブラリ。
SwiftLint
Swift コードの Lint 用のライブラリ。プルリクエスト時にも CI 上で SwiftLint のルールによる警告を出すようにしていて、基本的にフォーマットには従うようにしているので、コードのフォーマットに関する議論を減らすことができています。
Swifter
Twitter ログインのサポート用ライブラリ。公式の TwitterKit が UIWebView に依存していたため、こちらに乗り換えました。
SwiftyJSON
JSON形式のデータをSwiftコード上で扱いやすくするためのライブラリ。HTTP通信のレスポンスをパースするために使用されていますが、 Alamofire の箇所でも触れたように、新規実装については Codable に移行しています。
Usage
端末のメモリ使用量などを取得するためのライブラリ。
RSKImageCropper
画像をクロップするためのライブラリ。プロフィール画像の編集等に使用されています。
AppLovinSDK
広告表示用のライブラリ。
CryptoSwift
暗号処理用のライブラリ。詳細はヒミツ。
おわりに
列挙したライブラリはメジャーなものも多く、他社でも使用されているという方もいらっしゃるのではないかと思います。この他にもコラボ機能で WebRTC を使用していたり、エモモ(アバター)機能で Unity as a Library を使用したりしています。iOS の開発環境は年々便利になっていて、元々ライブラリを使わないと実現できなかった事も標準の機能で実現できるようになってきています。UI に関係するライブラリはメジャーバージョンが変わるなど OS 標準の仕様が変わるタイミングで思わぬ問題を引き起こしたりするので、標準の仕組みが使えるならどんどん取り入れて、できるだけスマートな構成にしていけたらいいなと思っています。ライブラリ紹介 Android 版も乞うご期待!
We are hiring!
ミラティブでは一緒にアプリを作ってくれる iOS エンジニアを募集中です!気軽にご連絡ください!