ツイ廃を卒業したい。それを叶えるアプリを作りました

こんにちはツイ廃ことbannzaiです。私のTwitterアカウントを知っている方は、最近私のツイートやリアクションが少なくなってきていることに気づく人もいるのではないでしょうか。子供が生まれたからでしょうか。いいえ、子供が生まれても私はツイ廃です。それならば1年前から傾向が変わっていると思います。

実はとあるアプリを作って自分で使っていたところTwitterに強く制限をかけれるようになり、そのためTwitterへのログインが少なくなりました。

この記事ではそんなアプリを紹介します。その名も

_人人人人人人人人_
> DigitalDetox <
 ̄YYYYYYYYYYYYYYYY^ ̄

DigitalDetox: デジタルデトックス

DigitalDetox: デジタルデトックス

  • yudai hirose
  • 仕事効率化
  • 無料
apps.apple.com

星5スターください

どんなアプリ

iOSのScreenTime APIを利用して、設定したアプリの利用時間を超えたら、利用制限を超えたアプリを使用するときにシールドを出してくれます。

設定画面です

シールドはこんな具合です

例えばTwitterを開こうとするとブロックされます
youtube.com

少しdeveloper向けですが、iOSDC2021でわかりやすい発表があるのでそのページを載せさせていただきます。こちらを見るとどのようなことができるかがイメージができると思います

fortee.jp

それって親が子供向けに使える機能じゃなかったっけ

iOS15までは親が認証して子供に制限を課す用途でしか使えませんでしたが、iOS16からは認証方法が増えて AuthorizationCenter.shared.requestAuthorization(for: .individual) とすることで自分自身でScreenTime APIへのアクセスを承認することができます。これで親にお願いしなくてもツイ廃を卒業できる

AuthorizationCenter | Apple Developer Documentation

developer.apple.com

セールスポイント

気づいた方もいるかもしれませんがDigitalDetoxのシールドの画面では OK ボタンが一つしかありません。OS標準のScreenTime APIでは Ignore limitというボタンがついておりシールドが解除できてしまいます。意思が強い人向けです。きっとこれを利用したことのある99%の人は Ignore limit を押してしまいアプリの利用制限を守れなかったと推測します。

ところがこのDigitalDetoxだと Ignore limit が無いです。実はこのボタン自体はアプリで作る場合はOptionalなフィールドになっており、nilを入れると Ignore limit ボタンが消えます。つまり想定挙動です。何度か審査も通っています。このアプリを使用することで、やるべきことがあるのについついSNSを見ちゃう。そんなあなたの生産性向上のお手伝いを間違いなくできます。なおこの Ignore limit を消す機能は有料機能なのでお金ください

作ってみての感想

まだ利用している人の少ないAPIを組み合わせているので記事とかもほとんどなく全体像が把握しづらい点は大変でした。ドキュメントやWWDCの映像も全部が載ってるわけじゃないし。あと後述しますが組み合わせるFrameworkやApp Extensionが多くて普段あまり使わない脳みそを使いました

あとは事前にFamily controlsの利用申請が必要なので同じようなアプリを作る人は気をつけてください。詳細はこっちに載ってます

もう一つの壁がレビュアーが「このアプリどうやって作ってんの?サードパーティ製の何か使ってないよね」みたいな質問がよく飛んできます。それに関連してレビュー期間が長くなります。初回のリリースは3週間くらいレビューされてた。リジェクトもありましたが、コードを変えたのは1回だけだったと思います

使用したAPI/Framework

詳細な実装方法は書くのが大変なので載せませんが、現在利用しているFramework/APIを書きます。一つだけまだ未実装がありますが近日中に何かしら実装して公開予定なので載せます

このアプリの実現のために以下のFrameworkと関連したAppExtensionを利用しています。多い - ShieldConfiguration | Apple Developer Documentation - ShieldAction | Apple Developer Documentation - DeviceActivityMonitor | Apple Developer Documentation - DeviceActivityReport | Apple Developer Documentation * これがまだ使えてない

バグ?

  • なんかたまにアプリの選択時に使用するアプリを選択するPickerの画面で、ScreenTime APIからのデータがカテゴリだけが取得できてカテゴリの中のアプリケーションが取れないみたいな事象が発生します。アプリ再起動まですると直ります。この部分は完全にAppleのFrameworkの実装依存なのでそういう事情があるんだなと察してください
  • 終了時刻だけ設定してアプリを設定する機能があるのですが、たまに空振りします。これも原因がよくわかってないのですがもう一回やると上手く行きます。このときに使う関数がthrowableな関数なので何かあれば例外が発生しそうですが発生しないので厄介です。よくわからん。こっちに至ってはアプリのコードの問題の可能性もありますが遭遇したらもう一回やってみてください

ソースコード

今回は公開無しにしてます。作り自体がシンプルで今のままで公開するとすぐにパクられるのもちょっと嫌だな。ってモチベで非公開にしてます。何か状況が変わったら公開するかも。スター乞食としてのキャラブレが発生しました。ファンの皆様には多大な心配をおかけしますが他のリポジトリへのスターをください

アイコン

アイコンについては今回は@noa_design51さんに作ってもらいました。シールドのトーンと合わせたアイコンを作ってもらいアプリアイコン、シールドのアイコン(アプリアイコンとは別に設定する)ともに使わせてもらっています。かっこいい

有意義な時間というものは彫刻のように無駄なものを削ぎ落し、自らが創出していくものと私たちは考えました。そうして作られた有意義な時間というスペースで、人生においての目標や意義を見つけ出すことができる。そういう前向きな気持ちをこのアイコンに込めました!

※ 念の為なのですがアプリ自体のデザインは bannzai(僕) がしてます

まとめ

改めてDigitalDetoxのAppStoreのページのリンクです。ぜひツイ廃だけどアプリの仕様制限したいな。という方は試してみてください。課金まですればかなり強力に制限できます。なおブラウザからは使えるので本物のツイ廃の方はここから使え(ry

DigitalDetox: デジタルデトックス

DigitalDetox: デジタルデトックス

  • yudai hirose
  • 仕事効率化
  • 無料
apps.apple.com

ロードマップとしては前述した DeviceActivityReport Frameworkを使用したレポート機能、そしてContent Blocker Extensionを使用したURLを元にしたブラウザで特定のURLをブロックする機能実現できると思うので実装していきたいと思います

最後になりましたが、このアプリを使用して応援していただける方は

星5スターください 🌟🌟🌟🌟🌟

github.com

おしまい\(^o^)/