An Optimized Misskey Client App for iOS.
MissCatはMisskeyに特化したiOS向けのネイティブアプリです。
MissCatのミッションは以下の5つです。
これらに応じて、順に以下のようなゴールを設定しています。
Misskeyにはカスタム絵文字というモノが存在します。
一般に、複数行の文字列表示にはUITextViewを使いますが、純正のUITextViewが対応しているのは静止画(UIImage)の挿入のみで、GIFアニメやAPNGといったアニメーション画像を挿入することはできません。また、非同期で取得した画像を挿入することもできません。
そこで、UITextViewをベースに、任意のUIViewを挿入することができるYanagiTextというライブラリを作りました。
MissCatではこのYanagiTextがカスタム絵文字を支える大きな基盤となっています。
また、APNGの表示はAPNGKit, アニメGIFの表示はGifuを利用しています。
Misskeyでは、独自の構文MFMを用いることで文章の修飾をすることができます。(参照)
MissCatでは、FoundationのNSAttributedStringを利用することで一部のMFMに対応しています。
MissCatはWeb版のMisskeyと同じように、WebPushと呼ばれる技術を利用して通知システムを構築しています。
Web版Misskeyは'sw/register'
というエンドポイントを叩き、イベントが発生した際に通知がブラウザにPushされるよう登録します。
MissCatでは、この仕組みを利用して、Misskey側で発火した通知イベントを、そのままサーバーへ送るよう'sw/register'
へ登録します。サーバー側は暗号化された通知メッセージを受け取ると、メッセージを復号して、適切なフォーマットに変換し、Firebaseへ投げることで各端末に通知を届けます。
※WebPushはprime256v1と言う楕円曲線暗号を元にメッセージが暗号化されているため、サーバーで通知メッセージを受け取った後、適切なカタチで復号してあげる必要があります。そこで、通知の実装にあたり、サーバー側で通知メッセージを復号するモジュールを作りました。webPushDecipher.js
上タブは私の作ったPolioPagerというライブラリを使っています。
MissCatは皆様のご意見をお待ちしております。