hinge について
hingeは、起動中の折りたたみ式iPhone Simulatorのヒンジ角度を設定・取得するコマンドラインスキルです。デバイスの姿勢やアクティブなディスプレイを確認し、その画面のスクリーンショットも撮影できます。
主な機能
- 01角度と折りたたみ状態の設定
- 02角度、向き、姿勢の取得
- 03アクティブなディスプレイの表示
- 04sweepによる角度変更のアニメーション
- 05アクティブなディスプレイの撮影
活用シーン
- 01角度別のレイアウトテスト
- 02UIが表示される画面の確認
- 03折りたたみ後のスクリーンショット撮影
- 04シミュレーターテストでのヒンジ操作の自動化
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ artemnovichkov/ hinge --skill hingeインストール後、Claude Code で/hingeを入力して読み込まれたか確認します。
同梱ファイルscripts/hingescripts/hinge_helper.m
詳細
hinge
コマンドラインから、起動中の折りたたみ式 iPhone Simulator のヒンジ角度を設定および読み取ります。Xcode の Device Hub にある非表示のヒンジスライダー(Option キーを押しながら操作)と同じ HID イベントを送信します。
このスキルのディレクトリを基準に、バンドルされているスクリプト scripts/hinge を実行してください。PATH 上の hinge も、hinge -v が scripts/hinge -v と同じバージョンを表示する場合は使用できます。古いバージョンには screenshot と --json がありません。
コマンド
scripts/hinge 120 # set angle: 0 = closed, 180 = flat
scripts/hinge open # 180°
scripts/hinge close # 0°
scripts/hinge half # 90°
scripts/hinge sweep 180 0 2 # animate from 180° to 0° over 2 seconds
scripts/hinge get # print current angle, e.g. 130.0
scripts/hinge posture # angle, orientation, and which integrated display is active
scripts/hinge posture --json # the same as JSON; also works with get, orientation, screenshot
scripts/hinge screenshot out.png # capture the display that hosts the UI
scripts/hinge rotate left # rotate 90°, like Device Hub's Controls > Rotate Left; prints the new orientation
scripts/hinge rotate right
scripts/hinge orient landscape-left # portrait, landscape-left, landscape-right, or portrait-upside-down
scripts/hinge orientation # print current orientation, e.g. landscape-left
scripts/hinge -d "iPhone Duo" 90 # target a simulator by name or UDID (default: $HINGE_DEVICE, else the only booted iPhone Duo)
scripts/hinge -t 0 90 # set without waiting for the angle to be confirmed
open、close、half は、unfolded/flat、closed/folded、half-open も受け付けます。
ワークフロー
- 折りたたみ式シミュレーターが起動していることを確認します:
xcrun simctl list devices booted。-dを指定しない場合、hingeは起動中の iPhone Duo が 1 台だけならそれを選択します。複数ある場合は一覧を表示して終了するため、推測せずに-d <udid>を渡すか、代わりにHINGE_DEVICEを設定してください。 - 角度を設定します。シミュレーターが新しい角度を報告するとコマンドは終了するため、終了コードが 0 以外の場合は折りたたみが行われていません。確認のために
getをポーリングしないでください。 - スクリーンショットを撮影したり UI を読み取ったりする前に、ディスプレイが切り替わるのを待ちます。角度が変わってから 1~2.5 秒かかります。
- 折りたたみ後に UI がどのディスプレイに表示されているかは、
scripts/hinge postureでactiveとして確認できます。解析する場合は--jsonを使用してください。activeDisplayがそのディスプレイを示します。 scripts/hinge screenshot out.pngでスクリーンショットを撮影します。アクティブなディスプレイを撮影するため、手順 3 の待ち時間が必要です。折りたたみ式デバイスで通常のsimctl io … screenshotを実行すると、--display=LCD(カバー)または--display=LCD-1(内側)が指定されていない限り、Invalid argumentで失敗します。
注意事項
- シミュレーター専用です。実機では動作しません。
- 初回実行時に、Xcode の clang で小さなヘルパーをコンパイルし、
~/.cache/hingeにキャッシュします。数秒かかります。 sweepは 1 つのプロセス内で 60 Hz で実行されます。滑らかなアニメーションには、複数回のset呼び出しではなく、これを使用してください。最終角度の確認は行いません。- 角度の設定はディスプレイの切り替えと同じではありません。角度は確認されますが、ディスプレイの切り替えはシミュレーターに委ねられます。0° と 180° では通常切り替わりますが、中間の角度ではヒンジがたどった経路によって異なります(ゆっくりした
sweepでは、終了まで前のディスプレイが維持されることがあります)。また、シミュレーターが新しい角度を報告しながら、ヒンジにまったく追従しなくなることもあります。決めつけずに必ずpostureで確認してください。ヒンジに追従しなくなったシミュレーターでも角度は正しく報告されますが、シャットダウンして起動し直すと解消されます。 - UI が表示されているディスプレイはバックライトではなく
activeで確認します。折りたたまれた Duo ではカバーがinactiveOnになります。また、バックライトの切り替えは折りたたみから最大 3 秒遅れることがあります。 - 0~180 の範囲外の角度は拒否されます。ヒンジのないシミュレーターでは "this simulator reports no hinge" というエラーが発生します。
orient、orientation、rotateは、インターフェイスの向きではなくデバイスの向き(devicectlの名称)を使用します。デバイスがlandscape-rightの場合、インターフェイスはlandscape-leftで表示されます。- 折りたたみ式デバイスの向きは、Device Hub 独自のイベントにのみ追従します。
xcrun devicectl device orientation setは成功を報告しますが、設定は元に戻されます。rotate/orientは Device Hub のイベントを送信し、それを無視するシミュレーターではdevicectlにフォールバックします。 - これは非公開の未文書化プロトコルを使用しています。Xcode 27.1 および 27.2、iOS 27.1 で検証済みですが、ほかのバージョンでは動作しなくなる可能性があります。角度の設定が "the hinge angle did not reach ..." で失敗する場合は、プロトコルが変更された可能性が高いことを報告してください。
コメント
Markdown 対応