個人開発で、加熱式たばこの使用間隔をコントロールするiOSアプリ 「Limitime」 を作り、App Storeにリリースしました。
この記事では、
- なぜこのアプリを作ったのか
- Limitimeで何ができるのか
- 技術的にどう実現したのか
- App Store審査で苦労したこと
あたりを簡単に書きます。
作ったもの
Limitimeは、加熱式たばこを使用したあとにデバイスを自動でロックし、次に使用できるまでの時間を作るアプリです。
単純に喫煙回数を記録するのではなく、
「吸いたくても、一定時間は使えない」
という仕組みを作ることで、吸う間隔を広げることを目的にしています。
主な機能
- 加熱式たばこデバイスとのBluetooth接続
- 使用後の自動ロック
- 設定時間経過後のロック解除
- 使用回数の取得
- 喫煙履歴の記録
- 日・週・月単位での使用状況の確認
アプリ側で毎回「吸った」ボタンを押す必要はなく、できるだけ自動化しています。
なぜ作ったのか
減煙アプリを調べてみると、
- 吸った本数を自分で入力する
- 目標本数を決める
- グラフで振り返る
といったものが多くありました。
ただ、自分が欲しかったのは記録するアプリというより、
「そもそも次の1本をすぐ吸えなくする仕組み」
でした。
意志だけで我慢するのではなく、デバイス側をロックしてしまえばいいのでは?
というところから開発を始めました。
Bluetooth Low Energyでデバイスを制御
技術的に一番面白かったのはここです。
Limitimeでは、iPhoneと加熱式たばこデバイスを BLE(Bluetooth Low Energy) で接続しています。
開発初期はWindows + Python + bleak を使って、デバイスが公開しているServiceやCharacteristicを調査しました。
実際にBLE通信を観察しながら、
- 使用回数の取得
- デバイスのロック
- デバイスのロック解除
などを確認していきました。
その後、iOS側ではCoreBluetoothを利用して同様の通信を実装しています。
使用後の自動ロック
Limitimeで一番実現したかった機能です。
大まかな流れは次のようになっています。
- iPhoneとデバイスをBluetooth接続
- デバイスを使用
- 使用中にBluetooth接続が切断
- 使用終了後に再接続
- 使用回数の変化を確認
- 使用を検知したらデバイスをロック
これによって、ユーザーが毎回アプリを操作しなくても、使用後に自動でロックできます。
例えば60分に設定した場合、
1本吸う → ロック → 60分経過 → 次の使用が可能
という使い方になります。
技術構成
現在は主に以下の構成です。
- React Native
- Expo
- TypeScript
- iOS / CoreBluetooth
- Supabase
- AsyncStorage
- EAS Build / EAS Submit
データは端末側にも保持しつつ、一部をSupabaseにも保存しています。
アカウント登録を必須にはしておらず、なるべく最初の利用までの手間を少なくしています。
App Store審査
今回一番不安だったのがApp Store審査でした。
加熱式たばこデバイスとBluetooth接続して操作するアプリなので、
「そもそも審査を通るのか?」
という状態でした。
最初の審査では追加情報を求められ、
- 実機で動作している画面録画
- テストしたiPhoneとiOSバージョン
- アプリの目的
- 対象ユーザー
- 主な機能
- 利用している外部サービス
- アプリの操作方法
などを提出しました。
実際のデバイスが必要なアプリなので、レビュー担当者が機能を確認できるように、実機動画を用意したのが重要だったと思います。
最終的には無事審査を通過し、App Storeで公開できました。
審査通過した瞬間はかなりうれしかったです。
作ってみて感じたこと
個人開発では、
「実装できるか」より「本当にリリースまで持っていけるか」
の方が難しいと感じました。
特に今回は、
- BLEの調査
- 実機検証
- iOSのバックグラウンド制約
- プライバシーポリシー
- 利用規約
- データ削除機能
- App Store Connectの設定
- App Store審査
など、アプリ本体以外の作業がかなり多かったです。
ただ、App Storeに実際に並んでいるところを見ると、最後までやってよかったと思います。
今後やりたいこと
まずは無料で公開し、実際に使ってもらいながら改善していく予定です。
今後は、
- 対応デバイスの追加
- 使用履歴の分析機能強化
- UI/UX改善
- 減煙を継続しやすくする機能
などを考えています。
まだリリースしたばかりなので、フィードバックも歓迎です。
App Store
App Storeで「Limitime」を見る
加熱式たばこの吸いすぎが気になっている方や、BLEを使った個人開発に興味がある方に触ってもらえたらうれしいです。