More Related Content
Similar to DebugHeadを使ったiOSアプリ開発手法 #denatechcon (20)
DebugHeadを使ったiOSアプリ開発手法 #denatechcon
- 1. Copyright © DeNA Co.,Ltd. All Rights Reserved.
DebugHeadを使った
iOSアプリ開発手法
February 10, 2017
平野 朋也
モバイルソーシャルインキュベーション事業部
DeNA Co., Ltd.
- 2. Copyright © DeNA Co.,Ltd. All Rights Reserved.
自己紹介
2
平野朋也(id: noppefoxwolf)
2016年 新卒入社
モバイルソーシャルインキュベーション事業部配属
2016年 画面録画Androidアプリ Mirracleの開発・運営
2016年〜 iOS向けライブ配信アプリの開発・運営
〜2016年 モバイルソーシャルインキュベーション事業部
インターンとしてiOSアプリの開発
- 3. Copyright © DeNA Co.,Ltd. All Rights Reserved.
3
オープンソースライブラリのDebugHeadの紹介と、
DebugHeadを使ってiOSアプリ開発を円滑に行う方法を紹介
します。
DebugHeadを使うことで開発時の無駄を省きつつ、
素早くアプリケーションを開発することが出来るようになり
ます。
- 5. Copyright © DeNA Co.,Ltd. All Rights Reserved.
5
アプリ画面上にデバッグメニューを開くボタンを配置するライブラリ
デバッグメニューに配置する機能は自分で追加出来るほか、
プラグイン形式でも提供されている。
iOS 8.0- / Swift 3 / cocoapods
https://github.com/malt03/DebugHead
DebugHead
MSI村田・平野のプライベートプロジェクト
実際の新規サービスの開発で採用し開発効率の向上を感じたので
今回ご紹介します。
- 9. Copyright © DeNA Co.,Ltd. All Rights Reserved.
9
DebugHeadをプロジェクトに組み込む
$ pod install
- 10. Copyright © DeNA Co.,Ltd. All Rights Reserved.
10
menuClasses - DebugMenuプロトコルに準拠したクラス
DebugHeadをプロジェクトに組み込む
- 11. Copyright © DeNA Co.,Ltd. All Rights Reserved.
11
debugMenuTitle: DebugHeadのメニューに表示するタイトル
debugMenuAccessoryType: DebugHeadのメニューセルのアクセサリ
debugMenuDangerLevel: 実行における危険性を宣言
debugMenuSelected: 遷移するViewControllerを返す
DebugHeadをプロジェクトに組み込む
- 12. Copyright © DeNA Co.,Ltd. All Rights Reserved.
12
debugMenuDangerLevel:
DebugHeadをプロジェクトに組み込む
.none
.low
.high
.extreme
- 13. Copyright © DeNA Co.,Ltd. All Rights Reserved.
13
iOSアプリ開発をする上での課題を
DebugHeadを使って解決する
- 14. Copyright © DeNA Co.,Ltd. All Rights Reserved.
14
課題①:現在のアプリの状態が
把握できない
課題②:任意のタイミング
でイベントを発火させたい
課題③:深い階層のViewControllerの
実装チェックに時間がかかる
- 15. Copyright © DeNA Co.,Ltd. All Rights Reserved.
15
課題①:現在のアプリの状態が
把握できない
課題②:任意のタイミング
でイベントを発火させたい
課題③:深い階層のViewControllerの
実装チェックに時間がかかる
- 17. Copyright © DeNA Co.,Ltd. All Rights Reserved.
17
課題①:現在のアプリの状態が把握できない
動作検証時にadhocで配布したアプリでサーバーからダウンロードしたはずの
画像が見れない。
今すぐホームディレクトリの状態が見たいが、
Application supports iTunes file sharingがオフになっているので
オンにしてもう一回ビルド・配布しないと…
- 18. Copyright © DeNA Co.,Ltd. All Rights Reserved.
18
課題①:現在のアプリの状態が把握できない
Xcodeに繋がれていない状態の端末ではアプリの状態を把握するのが難しい。
取得の難しい情報の例
・UserDefaultの値
・realmのDB状態
・ビルド番号
・接続先のサーバー
・ファイルシステムの状態
- 19. Copyright © DeNA Co.,Ltd. All Rights Reserved.
19
課題①:現在のアプリの状態が把握できない
・DebugHeadからいつでも見れる状態にしておく
再現性の低い問題に対して
より多くの情報を提供
ビルドをせずにトライ条件
を変えられる
ファイルシステムなど、外部から参照する際に
パーミッションを緩和する必要があったり
printデバッグで分かりにくい箇所を表示
- 20. Copyright © DeNA Co.,Ltd. All Rights Reserved.
20
課題①:現在のアプリの状態が把握できない
DebugHeadのメニューはプラグインで機能提供されているものもあります
malt03/DebugMenuUserDefaultsBrowser
NSUserDefaultのキーバリューを表示するプラグイン
malt03/DebugMenuGPUImageDumper
GPUImageの結合状態を表示するプラグイン
noppefoxwolf/DebugMenuFileBrowser
ファイルブラウザを呼び出すプラグイン
malt03/DebugMenuRealmBrowser
実機上で実行できるrealmブラウザ
- 21. Copyright © DeNA Co.,Ltd. All Rights Reserved.
21
課題①:現在のアプリの状態が
把握できない
課題②:任意のタイミング
でイベントを発火させたい
課題③:深い階層のViewControllerの
実装チェックに時間がかかる
- 23. Copyright © DeNA Co.,Ltd. All Rights Reserved.
23
課題②:任意のタイミングでイベントを発火させたい
debugMenuSelected(:UIView,:UITableViewController) -> UIViewController?
nilを返す事も出来るので、このタイミングでイベントを発火出来る
- 24. Copyright © DeNA Co.,Ltd. All Rights Reserved.
24
課題②:任意のタイミングでイベントを発火させたい
通知やイベントを発行
- 25. Copyright © DeNA Co.,Ltd. All Rights Reserved.
25
課題②:任意のタイミングでイベントを発火させたい
NSNotificationCenterの発火テスト
アプリ通知の受信テスト
キャッシュのクリア
設定値の初期化
いままで設定画面やXcodeを介して行っていた作業を、直接呼び出すことで
検証時間を短縮したり再現性チェックを簡略化したりできる
- 26. Copyright © DeNA Co.,Ltd. All Rights Reserved.
26
課題①:現在のアプリの状態が
把握できない
課題②:任意のタイミング
でイベントを発火させたい
課題③:深い階層のViewControllerの
実装チェックに時間がかかる
- 27. Copyright © DeNA Co.,Ltd. All Rights Reserved.
27
課題③:深い階層のViewControllerの
実装チェックに時間がかかる
- 28. Copyright © DeNA Co.,Ltd. All Rights Reserved.
28
実装の確認がしたいViewController ↓
たどり着くまでに操作する必要のあるViewController
↑ ↑ ↑
課題③:深い階層のViewControllerの実装チェックに時間がかかる
- 29. Copyright © DeNA Co.,Ltd. All Rights Reserved.
29
UIテストで操作を自動化する
課題③:深い階層のViewControllerの実装チェックに時間がかかる
- 30. Copyright © DeNA Co.,Ltd. All Rights Reserved.
30
→コストに見合わない場合が多い
課題③:深い階層のViewControllerの実装チェックに時間がかかる
UIテストで操作を自動化する
- 31. Copyright © DeNA Co.,Ltd. All Rights Reserved.
31
→コストに見合わない場合が多い
AppDelegateで最初の画面を切り替える
課題③:深い階層のViewControllerの実装チェックに時間がかかる
UIテストで操作を自動化する
- 32. Copyright © DeNA Co.,Ltd. All Rights Reserved.
32
→コストに見合わない場合が多い
AppDelegateで最初の画面を切り替える
→他の画面が見たい場合にBuild/Runが必要
課題③:深い階層のViewControllerの実装チェックに時間がかかる
UIテストで操作を自動化する
- 33. Copyright © DeNA Co.,Ltd. All Rights Reserved.
33
提案策
DebugHeadで一気に呼び出す
課題③:深い階層のViewControllerの実装チェックに時間がかかる
- 34. Copyright © DeNA Co.,Ltd. All Rights Reserved.
34
DebugMenuにViewControllerを表示する手順
課題③:深い階層のViewControllerの実装チェックに時間がかかる
・ViewControllerにDebugMenuプロトコルに準拠させる
・DebugHeadのprepareメソッドでクラスを登録する
- 35. Copyright © DeNA Co.,Ltd. All Rights Reserved.
35
課題③:深い階層のViewControllerの実装チェックに時間がかかる
DebugMenuにViewControllerを表示する手順
・ViewControllerにDebugMenuプロトコルに準拠させる
・DebugHeadのprepareメソッドでクラスを登録する
- 36. Copyright © DeNA Co.,Ltd. All Rights Reserved.
36
課題③:深い階層のViewControllerの実装チェックに時間がかかる
- 37. Copyright © DeNA Co.,Ltd. All Rights Reserved.
37
課題③:深い階層のViewControllerの実装チェックに時間がかかる
- 38. Copyright © DeNA Co.,Ltd. All Rights Reserved.
38
課題③:深い階層のViewControllerの実装チェックに時間がかかる
- 39. Copyright © DeNA Co.,Ltd. All Rights Reserved.
39
課題③:深い階層のViewControllerの実装チェックに時間がかかる
- 40. Copyright © DeNA Co.,Ltd. All Rights Reserved.
40
DebugMenuにViewControllerを表示する手順
課題③:深い階層のViewControllerの実装チェックに時間がかかる
・ViewControllerにDebugMenuプロトコルに準拠させる
・DebugHeadのprepareメソッドでクラスを登録する
- 41. Copyright © DeNA Co.,Ltd. All Rights Reserved.
41
課題③:深い階層のViewControllerの実装チェックに時間がかかる
- 42. Copyright © DeNA Co.,Ltd. All Rights Reserved.
42
課題③:深い階層のViewControllerの実装チェックに時間がかかる
- 43. Copyright © DeNA Co.,Ltd. All Rights Reserved.
43
課題③:深い階層のViewControllerの実装チェックに時間がかかる
- 44. Copyright © DeNA Co.,Ltd. All Rights Reserved.
44
課題③:深い階層のViewControllerの実装チェックに時間がかかる
- 45. Copyright © DeNA Co.,Ltd. All Rights Reserved.
45
課題③:深い階層のViewControllerの実装チェックに時間がかかる
- 46. Copyright © DeNA Co.,Ltd. All Rights Reserved.
46
課題③:深い階層のViewControllerの実装チェックに時間がかかる
・深い階層のViewControllerも素早く開発が可能に
・画面ごとに並行して開発することが可能に
・通知や3DTouchといった通常時以外からの呼び出しに強いコードになる
- 47. Copyright © DeNA Co.,Ltd. All Rights Reserved.
47
DebugHeadを使ったiOSアプリ開発手法
DebugHeadを使うことで、実装を実際の画面で確認しながら
開発中にかかる無駄な時間を削減できます。
DebugHeadで出来る事はシンプルですが工夫次第で、
より開発を円滑に進められるようになります。
興味のある方は是非使い始めてください
https://github.com/malt03/DebugHead
- 48. Copyright © DeNA Co.,Ltd. All Rights Reserved.
48
ありがとうございました
DebugHeadを使ったiOSアプリ開発手法