🧑‍🤝‍🧑

【個人開発 x iOS】ともだちを管理できるアプリ「ふれまね」をつくった 🧑🏻‍🤝🏻‍🧑🏻

2023/01/30に公開

kamimi です。こんにちは。

まだ懲りずにクソアプリの作成を続けていますが、今月4つ目のiOSアプリを作ったので、その紹介と技術的な話とか書こうと思います。

私も含めみなさんいろんなアプリでたくさんの人と連絡をとっていると思います。私の場合は、LINE、LinkedIn、Twitterが特に多いです。誰とどのアプリで連絡とっているのかわからない。。と思い、作ったのがこのアプリ「ふれまね」です。

また今回実装は見送ったのですが、友達に連絡を取るのを忘れてボッチになりがちなので、登録した友達ごとにリマインダーをつけたいという希望もあります。
私の場合、「月1で会いたい」という人がそれなりにいるのですが、会う予定を入れ忘れた結果、1年以上経ってしまい、気軽に連絡できる関係ではなくなってしまったということが何度もありました。

普通に人生の損失すぎると思ったので、リマインダーが欲しいと思いました。元々この機能が欲しくて作り始めたアプリだったので、次の機会に暇をみて実装する予定です。

名前の由来は想像つく方も多そうですが、フレンドマネージャーの略です。平仮名のほうが柔らかくて好きなのでそうしました。(英語圏ではそのままでは通用しなさそうな名前ですねw🤔)

こんな機能

できることはともだちの情報の登録、更新、削除の機能です。
少し特徴的かもしれないのは、一人一人その人との連絡手段を記録しておけることでしょうか。ついでにふれまねアプリから別のコミュニケーションアプリに飛べるようにもしてあります。(今対応しているのは、LINE、Facebook、LinkedIn、Twitter、Slackの5つ)

https://twitter.com/kamimi_01/status/1619847658562293761?s=20&t=OQ8QJs9LcFAWYVJvX9psdQ

インストール方法

App Storeのリンクはこちらです。

https://apps.apple.com/jp/app/ふれまね/id1668244395?l=ja

制作過程

自分のメモとしても制作過程を残しておきます。
データ処理があったり、UIをカラフルにしようとしたためにちょっと時間がかかりました。今までの倍はかかったかもしれない。16時間くらい?

使用した技術

  • Swift
  • SwiftUI

変わらずSwiftUIです。

ライブラリは

  • Lottie
  • Realm

を使ってます。Realmはデータ管理用です。

実装

とにかく見てて楽しいアプリにしたいと思ったので、単純にカラフルにしました。画像アセットの用意がとても大変だった・・・🫠

ちなみにアプリ審査の時にも指摘をされたのですが、現時点ではともだちを登録するときにカラーを選択することはできません。アプリ側で割り当てています。

自分が実際に使う時を考えたのですが、そもそもカラフルになれば満足なので、色が多ければ何色だろうと構わなかったのでそうしました。(色指定したい人がいたらごめんなさい。。)
ペルソナは自分で、自分に必要な最低要件しか実装しない最速リリース式をとっているので、そうしています。他に必要な機能は本当に必要なのか考えてから、後で実装します。刻一刻とモチベがね・・・

あとは、データの管理はRealmにしました。するべきかちょっと迷ったのですが、一応ファイルは暗号化しています。以下の公式を参考に、すぐ実装することができました。丁寧なドキュメントをありがとうございます。✨

https://www.mongodb.com/docs/realm/sdk/swift/realm-files/encrypt-a-realm/

以上です。

リポジトリはこちらです。機能要望もしあればぜひ。

https://github.com/kamimi01/MeetupReminder

「リポジトリの名前はなんでMeetupReminder?」

・・・それは前述したようにリマインダーをメインの機能に据えたかったからですね。思ったより時間がかかりそうだったので、まずはともだちのデータ管理を実装することにしました。。

審査

私のミスもあり、2度リジェクトされました。

1度目のリジェクト

リジェクト理由は3つありました。

1つ目がこちら。

Guideline 1.5 - Safety - Developer Information

The support URL specified in your app’s metadata, https://kamimi01.github.io/MeetupReminder/privacy_policy/ja.html, does not properly navigate to the intended destination.

Specifically, it does not include any contact information for users to reach developer.

なぜかサポートURLにプライバシーポリシーのリンクを設定していました・・・ごめんなさい。

2つ目がこちら。

Guideline 2.1 - Performance - App Completeness

We discovered one or more bugs in your app. Specifically, we were unable to add any text when we tapped on メモ box.

メモ欄をタップしても入力できないよ、とのことでした。「え、そんな馬鹿な」と思ったのですが、確かにタップする箇所によっては反応しないところがありました。

メモ含め、テキストフィールドはTextFieldの構造体を使用してデフォルトからheightを伸ばして表示していたのですが、そうすると最初の入力行となるエリア(赤枠)しかタップして入力を始められないことに気づきました。
おそらくレビューしてくれた人は、それ以外の箇所(青枠)をタップしていたので、こういうレビューを返してきたのだと判断しました。

実装としては、TextField全体にonTapGestureのモディファイアを適用し、@FocusStateを使用してフォーカスの有無を切り替えることにしました。これで白い部分をタップすれば必ずテキストフィールドにフォーカスが当たるようになりました。

@FocusState private var isFocusedTitle: Bool
・・・
TextField("資格勉強の本を読む", text: $viewModel.todoTitle, axis: .vertical)
    .padding()
    .frame(height : 55.0, alignment: .top)
    .background(Color.white)
    .cornerRadius(20)
    .focused($isFocusedTitle)
    .onTapGesture {
        isFocusedTitle = true
    }

3つ目がこちら。

Also, we were unable to change the profile icon while screenshots display multiple colors of icons.

プロフィールアイコンを変えられないんですけど、という指摘でした。これは変えられないのが仕様なので、変えられないですと答えて終わりました。
変えられた方がいい気もしますので、これは次の対応候補に入れてもいいかもしれないです。が画像の登録するのが面倒な気もしますね。。
でも顔は覚えているけど、名前が思い出せないケースには良さそうです。

2度目のリジェクト

これは単純なミスでした。。

Guideline 2.3.8 - Performance - Accurate Metadata

We noticed that the app name to be displayed on the App Store and the app name displayed on the device do not sufficiently match, which makes it difficult for users to find the app they just downloaded. The app names are:

- Name on the App Store: MeetupReminder
- Name displayed on the device: ふれまね

App Store ConnectのApp名が実際のアプリ名とずれてるよ、という指摘でした。すみませんでした。。

おわりに

前から欲しいと思っていたアプリが自分で作れて嬉しいです。☺️
類似アプリもあるかもしれません。がすみません、それをやると急激にモチベが下がってそもそもリリースまで到達しないので調べていません・・・

リマインダー機能を早く実装したいです。そしてともだちとのつながりを長く保てるようにしたいと思います。

同じような悩みを持っていれば使ってみてください。

友達100人できるかな。🧑🏻‍🤝🏻‍🧑🏻

Discussion