こんにちは!クラシルiOSアプリを開発しているknchstです。
6月のWWDC19はSwiftUIなどのサプライズもあり、とても盛り上がりましたね!様々なセッションがあったのですが、個人的にいいなと思ったのがXcode11のデバッグ機能についてです。
この記事では以下の項目について紹介します。
- Device Conditions
- Environment Overrides
- Debugging SwiftUI View Hierarchies
Device Conditions
Thermal state condition
Xcode11から新たに端末の発熱をシミュレートする機能が実装されました。 これにより、端末を実際に発熱させることなく温度状態によるアプリの動作を確認することができるようになります。
Xcode11のメニューのWindow
→ Devices and Simulators
内に DEVICE CONDITIONS
という項目が追加されていて、ここで設定することができます。
設定できる項目
- Fair(わずかに高い状態、バックグラウンドフェッチなどが延期される)
- Serious(高い状態、CPUやGPS、Bluetoothなどの使用量が削減される)
- Critical(かなり高い状態、あらゆるリソースが最小限になる)
上記の3つをシミュレートすることができます。
Network link condition
通信状態をシミュレートする機能はiOS端末単体ではありましたが、今後はXcodeから直接端末の通信状況をシミュレートすることもできるようになります。
こちらもThermal State
と同様でXcode11のメニューのWindow
→ Devices and Simulators
内に DEVICE CONDITIONS
という項目が追加されていて、以下画像赤枠内で設定することができます。
デフォルトで設定できるプロファイルも
- 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
Appleのプラットフォームには表示に関する設定や様々なアクセシビリティがあり、ユーザーが様々な設定を行うことができます。例えば、
- ライトモード & ダークモード
- ダイナミックタイプ
- アクセシビリティ
などの項目があります。
これらの設定が変更された時に、アプリケーションのレイアウトが崩れないかを確認する必要があります。これらをデバッグする為にEnvironment Overrides
という機能が新たに追加されました。
WWDCで行われたデモが以下になります。
Xcodeのデバッグ領域にEnvironment Overrides
というボタンが追加されていて、ここから値を変更することができます。変更はリアルタイムに反映されます。また、シミュレーター・実機でも同様に動作します。
Debugging SwiftUI View Hierarchies
SwiftUIが新たに加わりView Hierarchies
のデバッガーも大きくアップデートされました。
Swift Reflection
SwiftUIでは、ビューにあるプロパティが自動でインスペクトされデバッガーに表示されるようになります。実際にデバッガで確認してみると、インスペクタにProfileViewのプロパティの情報が表示されています。
CustomReflectable
新たに追加されたCustomReflectable
プロトコルに準拠することによって、独自のプロパティをインスペクタに表示することができます。
SwiftUIとその他のフレームワークのView Hierarchies
SwiftUIのプロジェクトでは既存のUIKitで提供されているUIViewController
などのクラスが利用できます。
上の画像のオレンジ色の枠はUIKit
で実装されてもので、青色の枠はSwiftUI
で実装されたビューになります。
まとめ
SwiftUIの登場によってデバッグもリアルタイム性がでてきて、より効率的な開発ができるようになりました。またDevice ConditionsやEnvironment Overrideなどのハードの機能をシミュレートできる機能を活用することによって再現しにくいランタイムエラーをデバッグすることができるので、リリース後の予期せぬ不具合も未然に防ぐことができます。
この記事で全てを紹介できていないので、詳しく知りたい方は以下をご覧ください。