追記:Swift3.0に対応しました。
前職のゲーム業界では一般的なデバッグメニューをiOSで作ったらどうだろうかと思って作ったので紹介。
デバッグメニューって何?
ゲーム業界で言うデバッグメニューとは、デバッグでよく使うデータ表示やデータ操作をメニュー化したもので、これといった形式は決まっておらず、メーカーによってバラバラ。
グーグルで調べるとたくさん出てきます。おそらく殆どがリーク情報ですが。
自分が過去に携わったものもリークしてますね。どうやってリークしたのやら。
https://www.google.co.jp/search?q=game+debug+menu&safe=off&espv=2&biw=959&bih=960&source=lnms&tbm=isch&sa=X&ved=0ahUKEwib0MCQzenOAhUEm5QKHW6kDgsQ_AUIBigB#safe=off&tbm=isch&q=debug+menu
今回作ったもの
話がそれました。今回作ったのは、UIWindowを新規で用意して、その上にUIStackViewを配置し、そこにUILabelやUISliderを追加してます。
UIWindowの動きに関しては、以前あげた記事と同じです。
GitHub
どういった所で使えるか(ユースケース)
- デバッグメニューからSQLコマンド発行
- デバッグメニューから課金済み状態に再現
- UIには出てないデータ表示
- UIレイアウトの調整
など、コマンド実行と微調整、データ参照の3つに適しているかと思います。
作ってみた雑感
前職でゲーム向けフロントエンド(HPバーとか装備画面とか)作ったことがありますが、GUIデザイナーでできることは少なく、コード上での実装が殆どだったので、iOSやAndroidのUIは楽だなぁと感じていたのですが、やはりiOSといえど、UIKitがあれど、GUIデザイナーがあれど、レールから外れた応用・発展系の表現は、コード上でUI構築は避けては通れないんだなと再認識しました。
またデバッグメニューの呼び出しでも違いがあり、悩みの1つです。
ゲームであれば、コントローラーがあるので、そのボタンにデバッグメニュー呼び出しを結びつけることで、いつでもどこでもデバッグメニュー呼び出しできる。しかも操作はコントローラーだからデバッグメニューが操作において邪魔になることは殆ど無い。
しかしiOSアプリだと呼び出しが容易に呼び出せる方法がボタン配置しかない。ジェスチャーやペアリングしたコントローラなどプロダクト機能外だと、不要な実装が多過ぎるし手間、またコード上で制御できないと、リリース時にはデバッグコードは消す必要があります。(プリプロセッサ制御)
今後の予定
まだ粗の目出す状態なので、そのまま使うとなかなか使いにくいかなと思います。
GitHubのスターがつくなどして人気があれば、CocoaPodsやCarthageといったパッケージ管理の対応や操作性やIF側のコード量を減らすなど、ライブラリ開発を進めようかなと思います。