xcrun simctl uiは、iOSシミュレータのUI設定を取得・変更するサブコマンドである。
content_sizeオプションを使うと、Dynamic Type(文字サイズ設定)をコマンドラインから取得・変更できる。
現在の設定を取得する
値を指定せず実行すると、現在の文字サイズカテゴリを取得できる。
デバイスはUDIDで指定するほか、起動中のデバイスであればbootedが使える。
$ xcrun simctl ui booted content_size
large
標準サイズは以下の7段階である。
extra-smallsmallmediumlargeextra-largeextra-extra-largeextra-extra-extra-large
これより大きいアクセシビリティ向けの拡張サイズとして、以下が用意されている。
accessibility-mediumaccessibility-largeaccessibility-extra-largeaccessibility-extra-extra-largeaccessibility-extra-extra-extra-large
このほかunsupported(プラットフォームやランタイムが対応していない)、unknown(設定の検出に失敗した)が返ることもある。
起動していないデバイスに対して実行するとエラーにはならず、unknownが返る。
設定を変更する
カテゴリ名を直接指定するほか、increment/decrementで現在値から1段階ずつ変更できる。
$ xcrun simctl ui booted content_size accessibility-extra-large
$ xcrun simctl ui booted content_size
accessibility-extra-large
$ xcrun simctl ui booted content_size decrement
$ xcrun simctl ui booted content_size
accessibility-large
見た目の違い
文字サイズを変えると、ウィジェットなどDynamic Typeに対応したテキストの表示サイズが変わる。
カレンダーウィジェットを比較すると、extra-smallでは1行に収まっていた「今日の予定なし」というテキストが、accessibility-extra-extra-extra-largeでは2行に折り返されている。
extra-small指定時のカレンダーウィジェットは以下のとおりである。

accessibility-extra-extra-extra-large指定時は、同じテキストが大きく表示され折り返される。

活用例: Dynamic Type対応のUI確認
文字サイズを大きくした際にレイアウトが崩れていないかは、アプリのアクセシビリティ対応で確認すべき項目の1つである。
content_sizeでシミュレータの設定を切り替えてからスクリーンショットを撮影すれば、実機で毎回設定を変更する手間なく確認できる。
$ xcrun simctl ui booted content_size accessibility-extra-extra-extra-large
$ xcrun simctl io booted screenshot largest-text.png
標準サイズとアクセシビリティサイズの両端で撮影しておくと、CIでのレイアウト崩れチェックやレビュー時の確認資料として使える。
