MissCat

An Optimized Misskey Client App for iOS.

63
6
Swift

MissCat



公式ページ

MissCatはMisskeyに特化したiOS向けのネイティブアプリです。



Missions & Goals

MissCatのミッションは以下の5つです。

  • Misskeyをより身近なSNSにすること
  • スマホに適した直感的な操作性を提供すること
  • インスタンスのバージョン差分を意識しないMisskey環境を提供すること
  • iOSらしく分かりやすいデザインを提供すること
  • Misskeyを広めること




これらに応じて、順に以下のようなゴールを設定しています。


  • iOSネイティブアプリの提供・通知機能や拡張機能の実装
  • スワイプやタップ、半モーダルによる直感的な操作と快適な画面遷移
  • めいすきー等のサポート
  • 奇抜なデザインを用いない、iOSらしいデザイン設計
  • 新規登録画面までの動線



Technical Aspects

カスタム絵文字

Misskeyにはカスタム絵文字というモノが存在します。

一般に、複数行の文字列表示にはUITextViewを使いますが、純正のUITextViewが対応しているのは静止画(UIImage)の挿入のみで、GIFアニメやAPNGといったアニメーション画像を挿入することはできません。また、非同期で取得した画像を挿入することもできません。

そこで、UITextViewをベースに、任意のUIViewを挿入することができるYanagiTextというライブラリを作りました。

MissCatではこのYanagiTextがカスタム絵文字を支える大きな基盤となっています。

また、APNGの表示はAPNGKit, アニメGIFの表示はGifuを利用しています。



MFM(Misskey Flavored Markdown)

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というライブラリを使っています。



Others

  • コード汚いです
  • 実装していない機能が山程あります
  • バグも山程あります



MissCatは皆様のご意見をお待ちしております。

TwitterMisskeyにて、ご気軽にリプライ/DMを頂けると幸いです。