dely engineering blog

レシピ動画サービス「kurashiru」を運営するdelyのテックブログ

Xcode11でデバッグ機能がいい感じにアップデートされたので紹介

こんにちは!クラシルiOSアプリを開発しているknchstです。

6月のWWDC19はSwiftUIなどのサプライズもあり、とても盛り上がりましたね!様々なセッションがあったのですが、個人的にいいなと思ったのがXcode11のデバッグ機能についてです。

この記事では以下の項目について紹介します。

  • Device Conditions
  • Environment Overrides
  • Debugging SwiftUI View Hierarchies

Device Conditions

f:id:knchst:20190801105018p:plain
https://developer.apple.com/videos/play/wwdc2019/412/

Thermal state condition

Xcode11から新たに端末の発熱をシミュレートする機能が実装されました。 これにより、端末を実際に発熱させることなく温度状態によるアプリの動作を確認することができるようになります。

Xcode11のメニューのWindowDevices and Simulators内に DEVICE CONDITIONS という項目が追加されていて、ここで設定することができます。

f:id:knchst:20190801114925p:plain

設定できる項目

  • Fair(わずかに高い状態、バックグラウンドフェッチなどが延期される)
  • Serious(高い状態、CPUやGPS、Bluetoothなどの使用量が削減される)
  • Critical(かなり高い状態、あらゆるリソースが最小限になる)

上記の3つをシミュレートすることができます。

Network link condition

通信状態をシミュレートする機能はiOS端末単体ではありましたが、今後はXcodeから直接端末の通信状況をシミュレートすることもできるようになります。

こちらもThermal Stateと同様でXcode11のメニューのWindowDevices and Simulators内に DEVICE CONDITIONS という項目が追加されていて、以下画像赤枠内で設定することができます。

f:id:knchst:20190801112938p:plain

デフォルトで設定できるプロファイルも

  • 100% packet loss
  • Very poor network
  • Edge Network - poor
  • Edge Network - average
  • Edge Network - good
  • Edge Network - best
  • 2G Network - poor
  • 2G Network - better
  • 3G Network - average
  • 3G Network - good
  • 3G Network - bet
  • LTE Network
  • WiFi Network
  • WiFi Network (802.11ac)
  • DSL Network
  • High Latency DNS

と増えて使いやすくなりました。

Environment Overrides

f:id:knchst:20190801103701p:plain
https://developer.apple.com/videos/play/wwdc2019/412/

Appleのプラットフォームには表示に関する設定や様々なアクセシビリティがあり、ユーザーが様々な設定を行うことができます。例えば、

  • ライトモード & ダークモード
  • ダイナミックタイプ
  • アクセシビリティ

などの項目があります。 これらの設定が変更された時に、アプリケーションのレイアウトが崩れないかを確認する必要があります。これらをデバッグする為にEnvironment Overridesという機能が新たに追加されました。

WWDCで行われたデモが以下になります。

f:id:knchst:20190801133322g:plain

Xcodeのデバッグ領域にEnvironment Overridesというボタンが追加されていて、ここから値を変更することができます。変更はリアルタイムに反映されます。また、シミュレーター・実機でも同様に動作します。

Debugging SwiftUI View Hierarchies

f:id:knchst:20190805115656p:plain

SwiftUIが新たに加わりView Hierarchiesのデバッガーも大きくアップデートされました。

Swift Reflection

SwiftUIでは、ビューにあるプロパティが自動でインスペクトされデバッガーに表示されるようになります。実際にデバッガで確認してみると、インスペクタにProfileViewのプロパティの情報が表示されています。

f:id:knchst:20190805123941j:plain

CustomReflectable

新たに追加されたCustomReflectableプロトコルに準拠することによって、独自のプロパティをインスペクタに表示することができます。

f:id:knchst:20190805123757j:plain

SwiftUIとその他のフレームワークのView Hierarchies

SwiftUIのプロジェクトでは既存のUIKitで提供されているUIViewControllerなどのクラスが利用できます。

f:id:knchst:20190805122645p:plain

上の画像のオレンジ色の枠はUIKitで実装されてもので、青色の枠はSwiftUIで実装されたビューになります。

まとめ

SwiftUIの登場によってデバッグもリアルタイム性がでてきて、より効率的な開発ができるようになりました。またDevice ConditionsやEnvironment Overrideなどのハードの機能をシミュレートできる機能を活用することによって再現しにくいランタイムエラーをデバッグすることができるので、リリース後の予期せぬ不具合も未然に防ぐことができます。

この記事で全てを紹介できていないので、詳しく知りたい方は以下をご覧ください。