多機能テキストエディタ アプリ「Wrix」の開発こぼれ話
本日リリースしたiOS向け多機能テキストエディタ アプリ「Wrix」は、「本当に満足行くものを」という想いの元、フルスクラッチで一人で2年位かけて開発しました。
本当はもっと早く公開したかったのですが、欲しい機能が沢山ある事や色々な問題が次々出て来て何度もやり直しを余儀なくされて思いの外時間がかかってしまいました。
フルスクラッチでの開発なので、全ての動作を記載して処理しないといけないため、iOSの癖というかドキュメント化されていない仕様を調べたり、新たな技術や操作感を実現するために検証やテストする時間が結構かかりました。
新たな技術や操作感を作成するのは難しいものですね。
お陰でiOSのUIをObjective-Cのコードでバリバリ記載できる様になりました(笑) StoryBoardは使わない派ですので。(参照: iOSのAutoLayoutの基本的な記述方法とエラーメッセージの種類)
ちなみに、各メニューに使用するアイコンも一人で作成しています。ほぼ全メニューにアイコンを用意しているため、300種類位はあるかも知れません。
お陰でアイコンを作成する技術も向上しました(笑)
テキストエディタの開発は、Androidアプリの「SkyArtsエディタ」を開発した経験があるため、ノウハウなどは持っていたのですが、それでも色々と苦労しました。
開発で苦労したのは、以下の点です。
- 座標系が複数ある。
- 文字を描画するだけでも手間がかかる。
- 絵文字の描画には更に一手間必要。
- Popupメニューなどの独自UIを開発した。
- カーソルの位置を変更させる時の動きにiOSの独特な癖がある。
- iOSのバグにより動作がおかしい部分を回避させる必要があった。
- iOS6から開発していたが、7にて内部処理が変更された。
- アプリ内課金の実装は初めて。
特に苦労したのは、描画と座標系、絵文字ですね。
座標系が複数あると訳がわからなくなりますし、それに加えて(頻繁に変更されるCoreAPIをできるだけ使わない様にと)低レベル描画機能を使っているため、色々苦労しました。
iOS8では更に座標系が変わる様なので、アップデートしないといけないです。
詳細はまだここでは言えませんが。
ちなみに、ランチャーパネルやPopupメニューなどはUIWindowを使用しています。
このUIWindowの座標系もまた独特なのですが、それは兎も角、UIWindowを使っているため、ソフトウェアキーボードなどの上にUIを重ねて表示する事が出来る様になっています。
絵文字に関しては、以下の様な癖がありました。
- 一部文字は内部では独自変換されていて使用されている
- 絵文字は1バイトから4バイトまであるが、NSString@lengthはバイト数で返してくるので単純に1文字として処理できない。
- iOS6では1バイトだった文字が2バイトになった。( 0xFE0E、0xFE0Fが追加された。UITextView、UITextFieldは一部文字を上手く扱えていない)
- 絵文字の描画にはAppleColorEmojiフォントを使用している。
ちなみに、開発中に見付けたiOSの不具合に関してはAppleにBugReportしてあります。
ほとんど感謝もされず、レポートを出すと新バージョンが出る度に検証させられたりと色々損をするのですけれどね。
今回アプリ内課金を初めて使用したのですが、色々と手間がかかるのですね。
結局、審査はアプリ内課金絡みで1度Rejectされました。アプリ内課金の一覧がiPadでは表示されないという問題です。
iPadでのテストはきちんと行っていますし、一覧が表示されないのは通信が切れている、またはAppleのサーバから一覧情報が返って来ない時だけだと思うのですが、それでもNGなのですね。
仕方ないので、Appleのサーバから一覧情報が返って来ない時はエラーを出す様にしました。
それが功を奏したのかは不明ですが、審査は通りました。
審査期間は、1回Self-Rejectした分を含めて21日もかかってしまいました。
結局一番苦労したのは、「やる気を維持する事」かも知れません。
何度も挫けそうになりましたが、自分の欲しいアプリなので作り上げる事ができたのだと思います。
勿論、iPad mini Retina上で毎日「Wrix」を使用しています! メモだったり、文章作成などなど色々と使用しています。