もう2年くらい前に,fasciaという俺用のタスク管理サービスを作った.
で,これを出先でも触りたいがためにios用のアプリを作っていた. 実は半年ちょいでできてしまって,もう1年半くらいTestFlightしてるんだけど,いい加減AppStoreに出してもいい質だと思ったので出した.
というわけで審査に通ったのである.
何ができるの?
githubに同期するtrelloみたいなもん. project開始時にリポジトリを選べるので,そこで同期設定をしておくと,タスクはissueに,リストはlabelに同期される.
project開始時にリポジトリ設定をしないと,リポジトリから独立したプロジェクトとして管理できるので,こいつはgithubとは一切関係ないものとなる.
いろいろ考えたけど,登録フォームとか作るのがめんどくさいのでアプリ版はgithub認証しかできない.
中身の話
iosなのでswiftで作っている. これは,開発し始めたのが2年くらい前なので,流行りに乗ってRxSwiftを全面的に使っている.
ディレクトリの割り方はいまいちだと思って,今見るとちょっと公開するところはある. あと,ViewController -> ViewModel -> Modelまでの流れがちょっと遠くて,バインドしまくりなのがいまいちだった. 普通にリアクティブにするだけならsubscriberを返し続ければいいだけなんだけど,いろいろバインドしたくて,ViewController側ではだいぶDriverを多用している.
UIKitはかなりの部分でrxメソッドを提供してくれているので,あまり困らなかったのだが,API通信にAlamofireを使ったら,これはちょっと大変だった. 結局RxAlamofireを使わせてもらっているが,こいつの更新は他のライブラリよりちょっと遅めなので,毎回更新がちょっと遅くなる.
あと,タスク移動時のUIは,Drag & Dropを作ってもいまいち使いにくいだろうと思って,こんなのを自作している.
タスクを長押しすると,移動先の候補が出てくる.これはリストの頭文字+リストに設定されている色(つまりgithubのlabelの色)になっているので,これを押すとタスクを移動できる. このUIは全然使えそうなライブラリがなかったので,ほぼすべてを自力で計算してやっている. 座標計算をひたすら繰り返すので,あまり綺麗なコードではなくなってしまった.
とりあえず俺は満足している
俺が使う分には満足している. 特に大きなバグもない.まぁまだちょっと足らない機能はあるのだが…….
ただ,これもOSSにしているので(ライセンスの設定してないけど多分MITあたりにすると思う),適当にissueをくれたら治すかもしれない.