iosアプリ開発を学ぶために、位置情報を組み合わせたしりとりアプリを作成しました。
https://apps.apple.com/app/id1537582064#?platform=iphone
なんで作ろうと思ったか
モバイルアプリ開発のスキルを身につけるために、すぐに作れるチュートリアル的なものを作ろうと思って作りました。しりとりをするだけのアプリなら1ヶ月くらいで終わるだろうと思って始めたのですが、半年もかかる壮大なプロジェクトになってしまいました。
利用技術
- フロント: SwiftUI
- バックエンド: Firebase
発表されたばかりで目新しかったというだけの理由で、SwiftUIを利用しました。
Swiftそのものを触ったことがない、かつ成熟していない技術のため調べるのが難しいので大変でした。バックエンドはFirebaseのFirestoreとFunctionを活用しました。
完成図
回答画面
しりとりを回答して送信する画面。
しりとりになっていなかったり、英数字が入力されたりするとバリデーションがかかる。
地図画面
しりとりの入力場所を地図上に表示する画面。本アプリの目玉。回答地点のピン間をアニメーションで繋いだのがポイント。
履歴画面
これまでのしりとり経歴を表示する。自分の回答のみフィルタすることも可能。
工夫したこと
非同期通信
DBにFirestoreを利用することで、しりとりデータの回答送受信を非同期通信で実現することができました。回答を送信した後、更新ボタンなど押すことなく地図画面、履歴画面の内容が更新されます更新されます。
(一方トランザクションは考慮されていないので、複数人が同時に送信した時の挙動が不安定...)
しりとり選択時の地図表示
地図表示にはSwiftUIではなく、SwiftのMapkitを利用しています。ピッカーで選択されたしりとりを地図上に表示させるために、MapkitとSwiftUIの状態変数をバインディングさせてるのが大変でした。
位置情報データ利用におけるプライバシー配慮
位置情報データを利用するにあたってユーザーからきちんと利用同意をとる必要があり、きちんとできていないとAppStoreのレビューで信じられないくらい怒られます。
実はここが一番苦労したところで、下記の機能を実装することでクリアしました。
1. 利用規約同意
2. 投稿時に位置情報を非公開にする機能
3. 既に投稿したしりとりの位置情報を非公開に変更する機能
アプリにとってはいわば非機能部分の実装ですが、何気にかなり時間がかかりました。
感想
開発に行き詰まるたびに、「このアプリは何のためにあるのだろう」という気持ちが頭をよぎり、モチベーションを維持するのが大変でしたが、なんとかアプリリリースまで漕ぎ着けてよかったです。
技術を身につけるために個人開発をするのはとてもためになりますが、役に立つもの、モチベーションが上がるものを作ることが何よりも大事だなあとしみじみ思います。
一緒に開発していただいた@antyuntyuntyun さんにこの場を借りて感謝申し上げます。