Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

DebugHeadを使ったiOSアプリ開発手法 #denatechcon

163 views

Published on

DeNA TechCon 2017の登壇資料です。

Published in: Technology
  • Be the first to comment

  • Be the first to like this

DebugHeadを使ったiOSアプリ開発手法 #denatechcon

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

×