新アプリ2本 Todayee Text / Photo をリリースしました。読み方は「トゥデイー」。どちらもエバーノート投稿専用アプリです。名前の通り2つのアプリは関係があって Todayee プラットフォームという共通の仕組みで動作しています。このプラットフォームで動作するアプリで投稿した内容はすべて同じ1つのノートにマージすることができます。他の iPhoneやiPadからの投稿であっても同じノートにマージされます。※同一のエバーノートアカウントを使っていることが前提。
ノートは1日単位で自動的に切り替わるので、1日の複数のアプリ、複数のデバイスの複数の投稿がすべて1日のノートにまとめられることになります。
エバーノートで見るとこんな感じ。PhotoとText 両方からの投稿が1つのノートにまとまっている。
上の例に記載のある花子や太郎はアプリ毎に設定できるテキスト。色も付けられる。
Todayee Photo
写真を撮影して送信するだけのシンプルなアプリ。
起動と同時にカメラが立ち上がり、撮影ボタンを押すだけ。
撮影後にプレビューが表示され、送信か取り消しを選べます。ここでコメントを付けることもできます。
カメラロールへの保存設定はその場で選択できて、デフォルトの制御は設定画面で指定することが可能です。送信後はカメラの画面へ戻り撮影をストレスなく繰り返せます。
Todayee Text
テキストを送信するだけの超シンプルなアプリです。
こちらも起動直後からテキスト入力が可能。
1日のノートを作るという大前提があるので、日付の挿入もリマインダも要らない、と不要な機能をそぎ落としたらこんな画面になりました。
唯一機能らしい機能は真ん中のスターボタン。これをつけて投稿するとエバーノートでの見え方が変わる。なおスターは Todayee プラットフォーム上のアプリ共通の機能で Photoにもある。
Todayee プラットフォーム共通仕様
アプリに関わらず共通にできることはこんな感じ。
- 今日1日のすべての投稿を1つのノートに集約
- 投稿ごとに時刻、地名、位置情報、天気、気温を掲載
- 投稿は1日のノートの中で時刻順にソート
- ノートの切替基準時刻を変更可能(通常は 0:00)
- ノートブックとタグの設定
- ノートのタイトルは用意された日付形式から選択可能
- 名前やデバイス名を登録すると投稿を区別可能
- 投稿はバックグラウンド
- スターを付けて投稿を目立たせる
なおネットワークがオフラインや接続状況が悪い場合は地名や天気、気温は表示されない。また天気は最短でも10分に1回しか掲載されない。
開発について
エバーノートの APIと EML(HTML互換のエバーノート専用マークアップ言語)という制約の中で、どうやって複数のアプリ、複数のデバイスからの投稿を1つにマージするかが技術的な課題でした。それぞれの投稿は非同期に行われるのでソートする必要もあるし、ノートブックやタグなどの共通設定をどこに保存するのか、と色々悩ましい。
今回は投稿ごとのメタ情報(日時や位置情報ほか)を EMLの特定のタグの属性情報に持たせ、それをDBのレコードのように扱う簡易的な仕組みを構築しました。1種のテキストデータベースだね。投稿直前に、前回の投稿をパースしてメモリ内にDBを構築した後、今回の投稿を適切な場所へ挿入してそれを最終的に EMLとして書き出して APIへ渡す、といったことを内部実行するようにしてみた。また共通設定(ノートブックやタグ、切替時刻ほか)はノートのメタ情報に埋め込むことにした。これによってエバーノートの APIの枠組みの中だけで数アプリ・複数デバイスへの対応を実現することができました。共通設定などは iCloudの KeyValue Storeへ保存することも検討しましたが、依存サービスが増えすぎると運用サポートで死ぬのでこれはやめた(1人でやってるんで)。
ただ投稿の排他制御だけはエバーノート APIが提供しておらずどうにもならなかった。 これは AWS上に仕組みを構築することにした。LambdaとAPI Gatewayを組み合わせたサーバレスアーキテクチャ。基本メンテフリーなのが1人運用ではかなり嬉しい。
(参考)【番外】AWS Lambda / API Gateway / DynamoDB を使ったサーバレスなネットワークロック機構
Today プラットフォームの実体は単なるコードだが、Xcodeの複数ターゲットをフル活用して一つのプロジェクトで複数のアプリを開発している。
さて Todayee プラットフォームという共通基盤による1番のメリットは、用途に合わせて機能を絞り込んだアプリを提供できるようになったこと。いままでだと一つのアプリで色々やろうと思うと、機能がてんこ盛りになって使い方が複雑になってしまうという宿命があった。てんこ盛りアプリだと写真を取って送信するためだけに起動も含めると4タップも5タップも必要になってしまう。これをいい加減やめたかった。あと機能が肥大化していくと、モードも多くなって使う側も大変だし、作る方もメンテが大変になる。そうこうしているバージョンアップを重ねるにつれ利用者にとっても開発者にとっても望ましくない方向へ動き始める。この辺りで一旦この流れをリセットしたいというのが Todayeeを作った動機の一つだった。アプリを垂直に掘り下げるのではなく、水平方向へ展開した、と言えるかもしれない。副次的な効果としては、アプリが軽量化されたことで iOS上で生き残り続ける率が上がったこと。メモリ常駐量が減ったので、他のアプリを使った後にアプリを使おうとした時に再起動せず以前の起動が生きていて起動を待たずに使えるようになった。これは感覚的なものだが。
開発情報
ツール:Xcode7 / swift 2.2
期間:5ヶ月
要員:1人
個人で空いてる時間に作っているので時間はかかってます(春は本業が忙しくて時間も取れなかったのもあった。)。アプリ開発で一番大変なのは最後のブラッシュアップ。作業自体は多くないけれど完成度を上げたいという気持ちと、早くリリースしたいという気持ちがせめぎあって結構疲れる。それはともかく、長かったけど楽しかった。swiftにも少しづつ慣れてきた感じ(いまさらかよ、ですが)。
アイコン:icons8.com
定番。アプリアイコンやいくつかのアイコンは自作(ツールは Pixelmeter)。
外部サービス:OpenWeatherMap
Apple審査:
06/17 Text を申請
06/18 レビュー
06/18 審査通過、Text 1.0 リリース
06/18 Photo を申請
06/21 レビュー
06/21 審査通過、Photo 1.0 リリース
アップル自身のコメントで審査が2〜3日に短縮みたいなニュースが出てたが、レビューがほんとに早くなってる。Photo は土日を挟んだので 3日かかっているが、それを抜けば両アプリとも 1〜2日でレビュー&リリースできてる。もちろんリジェクトされなければだけど(今回はなんと2つともストレートで審査通過。うれしい)。
懸念だった IPv6 でのリジェクトも無し(自作の FBReachabilityで一部IPv4コードがあったのを急遽直して臨んだ)。
今後
Todayee シリーズのアプリを何本か企画しています。Todayee プラットフォームの便利さを是非体験してみてください。
リリース中の Todayeeアプリの AppStoreのリンクは下記からどうぞ。
匿名
2016年7月21日 23:34
本日から日記として2つのアプリを利用し始めました。デザインも機能も良いアプリだと思います。
ありがとうございます!
アルバムから写真を選択できるようになると私の利用にはぴったりです(Google Mapの現在地などをキャプチャとして保存した)。
検討ください。
匿名
2016年7月21日 23:34
本日から日記として2つのアプリを利用し始めました。デザインも機能も良いアプリだと思います。
ありがとうございます!
アルバムから写真を選択できるようになると私の利用にはぴったりです(Google Mapの現在地などをキャプチャとして保存した)。
検討ください。
xcatsan says:
2016年7月22日 5:43
感想ありがとうございます。
アルバム選択とマップキャプチャは検討中です。
気を長くしてお待ち下さい ^^;
xcatsan says:
2016年7月22日 5:43
感想ありがとうございます。
アルバム選択とマップキャプチャは検討中です。
気を長くしてお待ち下さい ^^;