モノトーンの伝説日記

Apex Legends 楽しい!!

Mastodonクライアント「postone」(iOS)をテスターを募集しています

 こんにちは,モノトーンです。

 ブログでは初出かな。postone というクライアントを開発しています。

f:id:mntone:20190825164437p:plain
postone

1. iOS の UIKit および Swift 実験場としてスタートしたプロジェクト「postone」

 もともと「postone」は「投稿を一箇所に」をテーマにしていたクライアントです。

 そのため,LINE や InstagramTwitter も含め,まずは Mastodon という感じで実装していました。ただ,TwitterInstagram も 3rd app への制約が大きくなっている(ちゃんと広告向けの API 作ってそれを使うように作成者に促すようにすればいいのに)ため,もはや実装予定はない,と行ったところでしょうか。

 今も Twitter 認証部分がコードに残っていたりしますw まあ Mastodon 以外の SNS などにも対応できるように,一応名前空間(と行ってもディレクトリーでしかないけど)を切ってソースコード管理していますね。

 一応,iOS 9.3(iOS 12 が出ている時期からの新規開発なのに! ってなりますが)から対応しています。

2. 設計思想

 とにかく,macOS で使えるように設計を開始したので,モバイル向けではないです。バッテリーめっちゃ食うと思います。

 ただ,肝心の macOS 向けにまだ UI 移植全然進捗ないんですよね……

 自己満足のプロジェクトなので,気が向いたときにちまちま書いているものです。最近 1,200コミット超えました。

mstdn.jp

 できるだけ,iOS の UI を意識しつつ,カスタマイズ性を高める設計を目指しています。dark theme も最近ちまちま対応してます。

3. できること・予定していること・思ってること・考えていないこと・希望すること

3.1 できること

  • マルチアカウントを想定して設計しています。
  • 画像がみれたり動画が見れたりします。
  • WebSockets 使います
  • そうめんEX UIが売りです(あとで説明します)
  • 投稿,返信,ブースト,お気に入りぐらいはできます
  • Display P3 (sRGB より 25% 広い色域, iPhone 7 以降のカメラ) で撮影された画像は自動的に sRGB に変換されアップロードされます
    • Mastodon 自体が ICC Profile を捨ててしまうので,P3 のままあげることは基本できません

3.2 予定していること

  • なんかプッシュ通知できそうなので,気が向いたら Firebase 使って実装します
  • 削除,ミュート,ブロック,報告,ピン留めぐらいちゃんと実装します,そのうち。
  • 3D Touch もセルスワイプも on/off ちゃんとできるようにします(3D Touch は最近リファクタリングで抹殺して実装し直すことにした)
  • メールアプリ見たいな,マルチウィンドウにも対応する予定です。これは Obj-C で汎用的に使えるライブラリー書こうと思います。
  • タブの filter とか実装します(Tween とか Aristea 知ってる人ならわかるかも)
    • iCloud でフィルタリングのデータは同期する予定です(タブの表示位置などはデバイスごとに選択できるので自由にできる予定です)
  • リプライ先の選択できるようにしたい(希望的観測)
  • インスタンスごとの上限解像度に合わせてリサイズしたい(ただしインスタンスごとに設定が違ったりするのでメジャーなものしかちゃんと対応できないかも)
  • ログイン画面がとにかく初期の初期のひどい実装のままなのでちゃんとしたもの作りたいです。
  • アクセシビリティ (Voice over とか) もちゃんと実装したい
  • Realm 通知スレッドが過負荷になるのは,Intel CPU の上で頻繁になっているので,それに対して対処したい
    • わかっているんですが,DB の設計を変えるとコードが変わるのでめんどくさいんです。
  • Share Extensions も対応したいです。手が付けられないです
macOS
  • マルチウィンドウ,マルチカラム,マルチタブとかいう高機能クライアントによくあるやつです。
  • シングルウィンドウも対応できればするかも。現状 AppKit についてよくわかってないので,この辺り調査する。
  • 基本的に iOS と 90% レベルでコード共有して作ろうと思っています。
    • ですが,挙動は XCoordinator である程度吸収できると思います。そこは手を惜しまずに動作を分離しようと思います。
  • AppKit の NSTableView に表示させたのですが,動作がイマイチ危うかったので,解決できない限り進捗はありません
    • NSTableView 無理なら,UITableView 使える macOS Catalina 以降の動作しか保証できないと思います。
  • Pinterest 見たいな画像に特化した表示にも対応したいです。

3.3 思っていること

  • Haptics Touch なんか使いたいです。でも対応デバイスないので,2020 年まで待っててください iPhone 2020 の Pro Max 買います。
  • テーマ機能実装するかもしれません。予定は未定です。
  • WebP まともにあげられるインスタンスがあるのであれば,WebP 対応します

3.4 考えていないこと

  • iPadOS は対応しないです。実機がない (iPad 2 ありますが正直きついです) ですし,もともとの一番のメリット活かすには実装工数が多すぎますね,iPadOS は。
    • SwiftUI に期待しておいてください。と行っても macOS/iPadOS と iOS で地獄の UI 調整が始まる予感……
  • watchOS で動かすにはちょっと重たすぎるので,100% ないです。
    • 軽量化して表示させたら面白そうですが,コードが二分するので嫌です。
  • Material Design とかそういう邪道なもののデザインにはしません。iOS には iOS の流儀があります。

3.5 希望すること

  • 実機が iPhone 5iPhone SE とかいう 4.0 inch しか持っていないので,他の画面でもいい感じに使えるかどうか正直よくわかんないです。知りたいです。
  • 正直,リファクタリングでテスト可能にちまちましてたりするので,開発者欲しいです。テスト書くの無理なので基本書いてないです。
    • 信頼できる人じゃないと無理なので,信頼できる人にしかコードは開示しません
  • 単純に,iOS, macOS, watchOS, iPadOS の知見を広げるためのプロジェクトなので,リファクタリングで新しいものに試してみたり実験的な側面が強いです。そのため機能追加はほとんどないって思った方がいいです。

4. そうめんEX UI とは

 動画見てもらった方が早いです。

youtu.be

https://mstdn.jp/@mntone/102642875221006580

(リンク切れしているので YouTube に上げ直しました)

 単純にリプライ先を描画しただけです。

まとめ

 趣味的に書いてるので,いつ完成とか,いつリリース予定とかは特に考えていません。

 募集は Mastodon アカウント(@mntone@mstdn.jp)にリプ送ってください。そのあと DM で UDID 聞いたりすると思います(あんまりテスター増やすと,Apple に目をつけられるのが嫌なので,おそらく 10 人未満には制限すると思います…… 溢れてしまったらごめんなさい)

mstdn.jp    開発者も同様に募集します。Swift 書ける方で興味ある方は是非!

 PS 最近の進捗「Dark Mode」

f:id:mntone:20190906205630p:plain:w480