「スマホをやめれば魚が育つ」というアプリを新しく刷新することにした。理由はユーザー本人が自分に対して使用アプリを制限できるフレームワークをAppleが解禁したからだ。ScreenTime APIの中のFamilyControls。このフレームワーク自体はiOS15からあったのだが、名前のとおり親が子のスマホを制限することに特化していた。そしてiOS16になって初めてユーザーが自分自身のiPhoneに使用制限をかけれるようになったのだ。これはアプリが他のアプリを制限できるという、機能的にはiPhoneが誰かにハックされたような現象を起こすことができる。
//子供のスマホを制限する許可をリクエスト(iOS15~)
AuthorizationCenter.shared.requestAuthorization(for: .child)
//ユーザー自身のスマホを制限する許可をリクエスト(iOS16~)
AuthorizationCenter.shared.requestAuthorization(for: .individual)
「スマホをやめれば魚が育つ」では擬似的にアプリから離れさせないように監視してスマホをやめさせるというというのを実現していた(実際には不完全で100%は無理だった)。アプリの起動時と終了時に呼ばれるデリゲートメソッドを駆使して無理矢理にユーザーがアプリを離れたことを察知する。これをトリガーとして収集していたアイテムを消してしまう。ユーザーはアイテムが欲しいので頑張ってスマホを閉じたままほかの作業をする。
同様の機能をもつ第一人者的なアプリでForestがある。仕事効率化カテゴリの有料アプリでは世界的にトップランクに君臨するスーパーアプリだ。このアプリはユーザーがスマホを離れていればいるほど植物が育つというものだ。
Forest
私はこのアプリがリリースされた直後から絶対需要があると注目していた。しかしそのときはまったくプログラム技術が無く、数年かけていくつかのアプリをリリースしたのち、ようやく似たようなものが作れそうだと思えて1年弱かけて制作したのが「スマホをやめれば魚が育つ」(以下スマやめ)だ。
Forestはネイティブで製作されている。スマやめはUnity製だ。Forestを超えたくてもっとゲーム性の高い内容にしようとしてUnityを選んだのだ。しかしアプリの終了と起動の察知がキモの機能なのでUnityとネイティブの連携には本当に苦労した。Appleはアプリ側からユーザーがiPhoneを使っているかいないかを察知することを正式には許可していないのだ(プライバシー的な問題だろうと納得していた)。どう抜道を探しても離脱の判定は98%ほどの正確さにとどまってしまっていた。これはForestも同じだった。
で、先述のiOS16がリリースされて前提が一変した。コロナを経てiPhoneやデジタル機器との関係をより規律のあるものにしたいという社会のニーズにAppleが応えたのだ。このことはApple公式の動画でも語られている。
What's new in Screen Time API
で、がんばってできたのがこれ。
新・スマホをやめれば魚が育つ
疲れたのでおしまい、技術的なことは私の他の記事見てね。UnityとSwiftUIの連携がもうダメかと泣きたくなるほど難しかったよ。