SNSアプリを作る時に必要なものを用意しました!
iOS Advent Calendar 2023 14日目の記事になります。
こんにちは、noppeです。
Nightfox DAWN for mastodonというiOSのマストドンクライアントを作っています。
実は、このDAWNではマストドンアプリでよく使う処理をオープンソースで提供しています。
今日はDAWNから産まれたオープンソースライブラリを紹介します。どれもMITライセンスなので、マストドンアプリでもそうでなくても自由に使っていただけます。
READMEには採用アプリの紹介欄も設けていますので、ぜひアプリで使ったら教えてくださいね!
DAWNText
DAWNTextは、SwiftUI上でTextKit2を利用するライブラリです。
SwiftUIのTextでは範囲選択や、NSTextAttachmentによる絵文字の埋め込みが出来ないため開発しました。
セルフリサイズにも対応しており、SwiftUIのTextと同じような感覚で利用できます。
↑はUIHostingConfigurationを使ってSwiftUIで作っています。SwiftUIでもハイパフォーマンスに絵文字を描画する事ができています。
RefreshControl
高機能なUIRefreshControlのサブクラスです。
モダンなデザインでありつつ、サブクラスなのでUIRefreshControlと同じように扱えます。
mastodonではレスポンスが返ってくることが遅い事があるので、一定の時間が経過したらメッセージを表示するtimeover/timeout機能も付いています。
ContinueControl
下までスクロールした時に、トリガーするコントロールです。
Hapticフィードバックも実装していて、純正に近い動きをします。
一回画面の外に出ないと再トリガーされないセーフティ機構も付いています。
MediaViewer
動画や画像を表示できるプレビュービューアです。類似のライブラリでは画像だけ表示するものが多いですが、動画にも対応しておりシークバーなどの実装も標準で備わっています。
AnimatedImage
GIF, APNG, WebPなどのアニメーション画像をハイパフォーマンスに描画するライブラリです。
この辺の仕組みは今度別の記事で紹介したい。
Swinub
mastodonのAPIを叩くためのAPIライブラリです。
Request protocolに準拠したAPIの定義があります。
URLSessionと同じ感覚でasync awaitのリクエストする事ができます。
認証用のASAuthorizationSessionの実装も含まれています。
let authorization = ...
let request = GetV1TimelinesHome(authorization: authorization)
let (statuses, httpResponse) = try await URLSession.shared.response(request)
TabBar
アイコンのみのタブバーなどを作れるUITabBarのサブクラスです。
比較的雑に作っています。使ってみて問題があったらPRください。
SemanticVersioning
マストドンのサーバーバージョンなどをパースするためのセマンティックバージョニングのライブラリです。
内部的にSwiftのRegexを使って作っています。
BuildAtPlugin
アプリのビルドした時間を取得するプラグインです。Xcodeが時々古いビルドを実行するので、これを入れて早めに気が付けるようにしています。
VideoEditor
カスタマイズできるUIVideoEditorControllerのクローン。
選択した範囲を表示時に渡せる
DrawerPresentation
スワイプで左から出せるドロワーメニュー。
カスタムモーダルアニメーションとして実装されており、ViewControllerを汚染しない。
Pager
UICollectionViewベースのページコントローラ。
UIPageViewControllerに比べてカスタマイズしやすい
RelativeDateFormat
相対時間を1sや1mといったSNSのタイムラインで使う短いフォーマットにする。
SwipePopInteraction
全画面スワイプで画面を戻るやつ
ConsoleKit
OSLogをアプリ内で見るやつ
MediaOptimizer
画像や動画を良い感じのサイズや容量に収めるやつ
EventNotification
型付きのNotificationCenter
おわり
いかがでしたか?DAWNでは、mastodonをより自然に使えるように多くの工夫を凝らしています。
ユーザーはもちろん、同じmastodonアプリを作る開発者も盛り上げることでmastodonの繁栄にも寄与出来ればと思っています。
ぜひ今回紹介したライブラリを使って、アプリを作ってみてください!Github starの方もお待ちしております!
Discussion