本ブログで開発状況を連載しています自作アプリ「言語を超える力」は、SwiftとJavaでそれぞれiOS版とAndroid版を作成しました。
アプリの公開まで一段落しましたので、その作成過程、経緯などを本記事で書こうかと思います。
アプリの紹介
言語を超える力
FinalFantasy 14に登場する特殊な文字を、アルファベットやひらがなの文字に変換するアプリです。
-
言語を超える力 iOS版
経緯
私はスマホアプリを作成したことがありませんでした。今回は自分の趣味と兼ね合わせて何か作りたいと思い、ひとまずアプリとして公開することを目標としました。
アプリを作り始める前に
いくつか考え事をしました。まず最初に検討したのは Monaca でのアプリ開発です。そこからが挫折との始まりでした・・・・
最低限何をしたいか:妥協
「言語を超える力」「ひんがしを超える力」は一種のカメラアプリ
私が作りたいアプリは基本形はカメラアプリでした。最終目標は、Google 翻訳アプリのようなものを目標としています。しかしいきなりGoogle 翻訳アプリのようなものを作り上げるのは目標が高すぎる。
そこで、最低限何をしたいのか考えました。
そこで決めたことは「文字1文字をカメラで撮影したら、対応するアルファベットやひらがなの候補を4つ出してくれるアプリ」というところまで、ある意味妥協しました。
妥協した内容は
- FinalFantasy 14の文章を、英文・ひらがな文に変換する -> 1文字ずつの変換とする
- 1文字変換するにしても精度が低すぎると役に立たないので、4文字ぐらい候補を出すようにし、候補をから人手で正解を選べるようにする。
- 人手で選んだ正解情報を基に、機械学習のデータを収集することとする。
- スタンドアローンで機械学習アプリが動くことを諦め、クラウド上のサーバで計算させるようにする。
このように、何かしたアプリを作りたい場合は、作れる範囲内に作りたいものを妥協することが重要だと思います。
なお、サーバーで動かす機械学習部分は、すでにアプリ開発前に作っていました。以下の記事を参照していただけると嬉しいです。
blog.gelehrte.com
今思えば、サーバー版言語を超える力の公開って300日ほど前の話なのですね・・・・
仕様決め
最低限やりたいこと・妥協が決まったら、完成品を作るためにどのような部品を作るか決める必要がありました。
今回は以下のようになりました。
- UI
- カメラ
- サーバーへの通信機能
どうしてSwiftとJavaで別々に開発したか
最初は前述の通り、Monaca での開発を考えていました。MonacaではiOS版とAndroid版が同時に開発できると聞き、その方が良いかなと考えていました。
が、ここで問題が2つ
- 開発費用
- 開発のための手間
まず費用について、詳しくは以下の記事で考察しています。
blog.gelehrte.com
簡潔に言うと、iOS版のApple StoreやAndroid版のGoogle Playで公開するための費用に追加して、Monacaの月額使用料を払うのは辛いなということです。
次に開発のための手間が問題になりました。
blog.gelehrte.com
簡潔に言うと、カメラ部分をCordova pluginに頼る必要があり、既存のプラグインだけでは使いにくいので独自に開発する必要がありました。
つまり、
- Monacaの使い方の勉強
- Cordova Pluginの使い方の勉強
- Cordova Pluginの開発の勉強
が必要となります。
いずれMonacaないしCordovaでの開発も試みたいと思っているのですが、今回はあくまでアプリの公開が目的だったので、費用面でも開発コスト面でも楽になる、SwiftとJavaでのiOS版とAndroid版の開発を考えました。
作成過程
では実際にSwiftとJavaを使って開発を行いました。私はSwiftは今回初めて触りました。Javaは久しぶりです。
SwiftとJavaの違い
Swiftは関数型言語としての側面もありますが、SwiftもJavaも手続き型言語として触ることができるので大きい差は感じられませんでした。言語としての差ですが。
XcodeとAndroid Studioの違い
基本的にはXcodeとAndroid StudioもIDEとして優秀なので使いやすかったです。ここでの疑問点は敢えての内容です。
XcodeはCtrl+zによるUndoが使えない
使えないのは大変です・・・・やはりUndoは欲しいですね。Android StudioではUndoができるのでありがたいですね。
Xcodeの方がソース変更時・ビルド時に自動的にソースを書き換える分量が多い
何が問題かと言うと、Gitでのソースコードの管理が面倒ということです。Xcodeでは前の状態に戻すことが難しく、場合によっては新しいプロジェクトを1から作り直した方が楽な場合がありました。
Android Studioの方が原因不明のエラーに引っかかることが多い
エラーメッセージはXcodeの方が親切だったと思います。これはiOSというかiPhoneの機種が限定されている分、サポートしやすいという理由が大きいのでしょうね。
他にもありますが、それは後述。具体的には審査のあたりで。
SDKの話
iOSの場合、Swift3を使うかSwift2を使うか、それともObject-Cを使うかの問題になるのですが、最近はSwift3の情報が増えているのでSwift3で十分情報が揃いました。今後開発する人も、Swiftの最新版を使うといいかもです。
Androidの場合、SDKのバージョンが大きく関係します。これは審査が通った後に苦労した話にも繋がりますが、最新のSDKを使うと対応機種が減ります。執筆時では、世の中にはAndroid5.0以降を利用している人が多い状態だと思われます。SDKでいうとAPI 21ですね。今回作成した「言語を超える力」アプリはAndroid6.0以降で動くSDK、API 23で動くようになっています。多くの人に使ってもらうためにはAndroid5.0対応が必要だったのですが、どうしても必要な機能としてAPI 23が必要だったためにAndroid6.0以降の利用者にしか提供できない状態になりました。
本来なら、SDKについては仕様決めのときに考えるべきでしたね。
参考記事
moduleapps.com
公開までの苦労
iOS版の公開とAndroid版の公開の違い
公開のための下準備は以下のサイトで行えます。
https://itunesconnect.apple.com/login
https://play.google.com/apps/publish
提出しなければいけないもの
アプリの説明
しっかり書く必要があります。特にiOS版の審査は厳しく、この文章が短いだけでも審査が落ちます。
私はiOS版の提出のためにしっかり書いた文書があったので、Android版はそのまま文章を利用しました。
スクリーンショット
iOS版もAndroid版もスクリーンショットの提出が求められるのですが、スクリーンショットをそのまま提出しろと言う意味ではなさそうです。 説明となる画像を提出しろという意味でしょうね。ただし、Android版は審査がゆるいのですが(Android機種によってスクリーンサイズが違うという意味もあるのでしょうけど)、iOS版はスクリーンショットのサイズをしっかり合わせないと怒られます。
私はLaunchKitを使いました。スクリーンショットを加工し、説明文を入れ、審査用のサイズに整形してくれるサービスです。
現在はオープンソース化されているサービスなので、自分のmacに入れて動かしました。
以下のサイトが参考になると思います。
アイコンなど
アプリのアイコンの作成が必要だったのですが、私は非デザイナーなので、他力本願としました。具体的にはAdobe Stockを使いました。初回1ヶ月は無料で使えるサービスなので、使いたい画像をあらかじめ選定しておいて一気にダウンロードし、1ヶ月で解約するといいかもですねー。
審査を通すための苦労
Android版は審査を通すのはすんなりでした。というか本当に審査をしているのかどうか怪しいぐらいです。
唯一、「ファミリー向けプログラムにオプトイン」を選択した場合に審査を1回落ちました。
レーティングが低い場合でも、子供向けでなければファミリー向けプログラムにオプトインするのは避けた方がいいかも。
問題はiOS版です。しっかりとした審査が行われます。実際に作ったアプリを審査員がインストールして、クラッシュが起きないかとか試してくれます。また、クラッシュレポートやスクリーンショットなどを送ってくれるので親切ではあります。
唯一問題なのは、クラッシュレポートの見方です。審査員が使う端末はiOSのバージョンが最新になっています。こちらの実機テストする場合もiOSのバージョンを最新にしておきましょう。そうしないとクラッシュレポートが読めない場合があります。
クラッシュレポートの読み方については以下を参考にしてください。
qiita.com
上記の記事にも書いてあるのですが、XCodeのdevice supportは、接続した実機テスト端末のiOSバージョンごとに作られます。そして、クラッシュレポートは、XCodeで作られたdevice supportが無いと解析できません。つまり、審査員が使う端末と実機端末のiOSのバージョンが同じである必要があります。 (正しくは、審査員が使う端末のiOSバージョンと同じバージョンの実機端末で、一度でもXCodeでビルドしていればいい)
審査は数日かかることがあります。私が審査を出していた時期は、iOSにバグがあったのか、iOSの更新が頻繁に行われていた時期でした。そのため、審査員が使っていた端末と私の実機テスト端末のiOSバージョンにズレがでてクラッシュレポートが読めなかったことが度々ありました。(審査員のiOSバージョン11.1で実機テストのiOSバージョンでビルド作業したのは11.0, 11.2, ・・・とか)
みなさんからの評判など
まだまだ、あまりインストールしてもらえていません。どうしてもアプリの精度が低いためしょうがないですね。まだ完成版とも言い切れていないので、もっと精度上げていきたいと思います。
またFinal Fantasy14プレイヤー対象というニッチなアプリというのも理由ですかね・・・