You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Commit 83a4ebb
Browse filesBrowse the repository at this point in the historyBrowse files
Copy file name to clipboardExpand all lines: .changeset/foldable-scoped-rotation.md
+2Lines changed: 2 additions & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -5,3 +5,5 @@
5
5
Fix foldable iPhone simulator rotation in scoped sets and confirm the lit panel in both default and scoped sets. Rotation in both sets uses the fold helper, with no CoreDevice orientation polling. An already visible target dispatches nothing. Incomplete, unknown-power and multi-lit panel tables neither confirm nor dispatch. A target the panel never shows fails with `orientation-unverified`.
6
6
7
7
Use the fixed iPhone Duo picker offsets measured in both sets (outer 0 degrees, inner +90 degrees), replacing runtime calibration. Inner landscape-left sends `portrait-upside-down`, mapped to the HID wire value `pud`; it remains unsupported as a user target. Delayed reads wait without resending the same picker value to the same panel.
8
+
9
+
Unresolved guest reads inside the settle loop neither confirm nor dispatch and are retried. An unresolved final read fails with `orientation-panel-table-unavailable`. Multi-panel classification admits rotation without a model-name guard; a new multi-panel model needs its own picker mapping.
Copy file name to clipboardExpand all lines: docs/adr/0025-foldable-apple-panels.md
+4-3Lines changed: 4 additions & 3 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -372,21 +372,22 @@ Rejected alternatives:
372
372
373
373
`XCUIDevice.orientation` has no effect on an iPhone Duo simulator, and the runner readback repeats the requested value.
374
374
`devicectl device orientation set` reports success and has no effect on a simulator that `simctl boot` started.
375
-
`orientation` therefore rotates a multi-panel iPhone Duo simulator through the guest device-state control: the HID event that Device Hub's orientation menu sends (`orientation-picker-control`, type `enum`).
375
+
`orientation` therefore rotates a multi-panel simulator through the guest device-state control: the HID event that Device Hub's orientation menu sends (`orientation-picker-control`, type `enum`).
376
376
The picker accepts `pud` for upside-down dispatch, which the inner panel needs to show landscape-left.
377
377
The user target `portrait-upside-down` remains refused with `unsupported-foldable-orientation`.
378
378
Routing uses the `fold` admission and the set-based panel-count source. A resolved panel count is a hardware fact, so the daemon probes each simulator once.
379
379
A supplied helper is a reuse handle; only an explicit guest-source request changes the default-set source.
380
380
Thus, classifying a single-panel default-set simulator does not prepare the fold helper.
381
381
382
-
The picker mapping requires the discovered model to be iPhone Duo; other multi-panel models are refused.
382
+
The picker offsets were measured on iPhone Duo; a new multi-panel model needs its own mapping.
383
383
In both simulator sets, the helper reads the guest panel table and dispatches the fixed picker value for the established lit panel.
384
384
The table maps the outer panel at zero offset and the inner panel at +90 degrees.
385
385
Only a fresh `currentOrientation` from an established lit panel confirms the requested visible orientation.
386
386
An incomplete table, unknown-power sibling, or multiple lit panels cannot confirm or dispatch.
387
387
A repeated visible target dispatches nothing; delayed reads wait without resending to the same panel.
388
388
A target that never appears is refused with `orientation-unverified` in either set.
389
-
An unreadable guest table reports `orientation-panel-table-unavailable` and points to the inventory diagnostic.
389
+
An unresolved guest read inside the settle loop neither confirms nor dispatches; the loop retries it.
390
+
An unresolved final read reports `orientation-panel-table-unavailable` and points to the inventory diagnostic.
'Send the selected device to its home screen. This leaves the app session open but moves the foreground away from the app.';
292
292
constorientationCommandDescription=
293
-
'Set device orientation on iOS and Android. auto hands rotation back to the sensor on ADB-backed Android (local and Limrun); other backends refuse it. A foldable iPhone simulator (iPhone Duo) refuses portrait-upside-down. In both default and scoped simulator sets it rotates through the fold helper and succeeds only when the lit panel shows the requested orientation; otherwise it fails with orientation-unverified, or orientation-panel-table-unavailable when the guest panel table cannot be read.';
293
+
'Set device orientation on iOS and Android. auto hands rotation back to the sensor on ADB-backed Android (local and Limrun); other backends refuse it. A foldable iPhone simulator (iPhone Duo) refuses portrait-upside-down. In both default and scoped simulator sets it rotates through the fold helper and succeeds only when the lit panel shows the requested orientation; otherwise it fails with orientation-unverified, or orientation-panel-table-unavailable when the final guest panel table cannot be read.';
294
294
constfoldGuidance={
295
295
hingeEvent: 'simulator HID hinge event',
296
296
permissions: 'Device Hub and host Accessibility permission are not required.',
Copy file name to clipboardExpand all lines: website/docs/docs/commands.md
+1-1Lines changed: 1 addition & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -125,7 +125,7 @@ Back, orientation, and hardware buttons:
125
125
-`back` uses app-owned back navigation: visible in-app back UI on Apple targets, and the back keyevent on Android. `--in-app` names this default explicitly.
126
126
- On iOS, a single-screen iPhone or an iPad whose app provably fills its screen, `back` can use a top-leading tap when the app tree is unreadable. It compares the screen before and after the tap. If the screen cannot be captured, the command reports an unknown outcome; inspect the screen before you retry.
127
127
-`back --system` sends system back input: the Android back keyevent, the iOS back gesture, or the tvOS Siri Remote Menu button. macOS has no system back, so it reports unavailable.
128
-
-`orientation portrait|portrait-upside-down|landscape-left|landscape-right` works on iOS and Android mobile targets only. On ADB-backed Android it turns auto-rotate off, and the lock persists after the session ends until something turns it back on. In both default and scoped simulator sets, an iPhone Duo classified with more than one integrated panel refuses `portrait-upside-down` and rotates through the fold helper. It succeeds only when the lit panel shows the requested orientation; if it never does, or the simulator never reports a single lit panel, the command fails with `orientation-unverified`. An unreadable guest table reports `orientation-panel-table-unavailable`. Other multi-panel simulator models are refused. A simulator classified with one panel, or whose first classification read is unresolved, uses the standard runner rotation.
128
+
-`orientation portrait|portrait-upside-down|landscape-left|landscape-right` works on iOS and Android mobile targets only. On ADB-backed Android it turns auto-rotate off, and the lock persists after the session ends until something turns it back on. In both default and scoped simulator sets, an iPhone Duo classified with more than one integrated panel refuses `portrait-upside-down` and rotates through the fold helper. It succeeds only when the lit panel shows the requested orientation; if it never does, or the simulator never reports a single lit panel, the command fails with `orientation-unverified`. Unresolved guest reads are retried inside the settle loop; an unresolved final read reports `orientation-panel-table-unavailable`. The picker offsets were measured on iPhone Duo; a new multi-panel model needs its own mapping. A simulator classified with one panel, or whose first classification read is unresolved, uses the standard runner rotation.
129
129
-`orientation auto` hands rotation back to the sensor on ADB-backed Android, local or Limrun (`accelerometer_rotation=1`, `user_rotation` untouched), and reports `orientation: "auto"`. It does not wait for the display to rotate, because there is no target rotation: the sensor decides, and an emulator usually settles on portrait. Every other backend refuses `auto` with `UNSUPPORTED_OPERATION`.
130
130
-`action-button` presses the iPhone or iPad Action Button once. It takes no arguments, no hold duration, and no `--settle`, and it doesn't activate the session app or drive Camera Control. Other platforms refuse it, and a model without the button (an iPhone SE, most iPad simulators) fails with `UNSUPPORTED_OPERATION`.
131
131
-`action-button` reports that the press was dispatched, not what it triggered. Simulators run no Shortcuts or App Intents, so verify the outcome on a physical iPhone. Expect a press to take about five seconds on a Simulator.
0 commit comments