iPhone Duo: reference values from Apple's simulator
Values from Apple's iPhone Duo simulator (iPhone19,4, V68, iOS 27.1 24A94425, Xcode 27.1 27A9275) that are worth keeping beside the vphone-duo work. They were taken out of the baseline records before those records were deleted on 2026-10-30.
- Comparison table, sim against VM, row by row:
Evidence/duo-sim-baseline/BASELINE.md. - Per-domain findings:
Evidence/duo-sim-baseline/{display,springboard,sensors,appkit,chrome}.md. - Harness, probes and the drivers that made the records:
Evidence/duo-sim-baseline/{tools,probes,src}/(README there). - What the alignment changed and how to check it:
iphone_duo_bringup.md, "2026-10-30".
The VM column below is duobase-01 running bundle 2.14.0-local.9064efca
(branch duo-sim-align, with CoreMotion's VM relay and the panel nodes).
What was deleted, and how to get it back
The records were about 240,000 calls across five domains. They sat in
<domain>.json and vm-<domain>.json, 2–63 MB each. Transcripts, posture
JSON and screenshots sat under raw/, about 1 GB. None of it was committed.
To regenerate:
- Clone the harness simulator:
tools/sim.zsh clone. - Run each domain's runner from
probes/orsrc/(each domain doc names its runner). - For the VM, run
tools/vm-probe.zshwith thesrc/vm/run-*.zshdrivers.
Values to ignore when comparing: UUIDs, pointers and seeds change on every boot
(display.md, "Volatile fields").
SpringBoard fold tuning (sim = VM)
All 116 numeric and boolean settings below read the same on the VM as on the simulator. They are SpringBoard's built-in defaults, so the device type does not change them. Use them to check behaviour against SpringBoard's own thresholds; there is nothing to align.
SBFDevicePoseProvider->_settings (SBFDevicePosePTSettings):
[SBDisplayYoinkingPTSettingsDomain rootSettings]:
- Thresholds:
swapThreshold0.2,touchBlockingThreshold0.1,requiresActiveCameraSessionYES,revealLingerDuration6 s. - Dimming:
showsDimmingBackdropYES,dimmingBlurRadius200,dimmingSaturation2,dimmingTintAlphaAtRest0.74,dimmingTintAlphaAtFullTravel0.6. - Slider:
sliderTrackWidth290,sliderHeight66.67,sliderCenterBottomInset55,sliderThumbInset3.5,sliderFontSize18.25,sliderSymbolSizeRatio0.369,sliderTitleLeadingAir19.7,sliderTitleTrailingAir40.7,sliderTrackOpacity0.1.
[SBDeviceContinuousFoldInteractionDomain rootSettings], without the debug switches and the spring animation objects:
- Transition:
appTransitionStyle1,alwaysUsesDirectTrackingYES,directTrackingThreshold0.15,continuousSnapshotTransitionAvailableYES,displayTarget0,maximumFrameRate80,foldWidth80,cylinderWidthRatio0.245. - Inner:
innerTiltAmount40,innerPivotOffset10,innerStretchAmount1.1,innerStretchRampExponent1,innerNonlinearScaleExponent4,innerNonlinearScaleIntensity0.5,innerConeTopMaxScale1.2,innerConeBottomMaxScale0.4,innerConeOpacity1,innerCylinderOpacity0.644,innerBlurMaxRadius120,innerCloakFadeThresholdAngle15°,innerDimRampStart0.5,innerFadeToBlackStart0.167,innerFadeToBlackEnd0. - Outer:
outerTiltAmount20,outerStretchAmount1.1,outerStretchRampExponent1,outerNonlinearScaleExponent4,outerNonlinearScaleIntensity1,outerConeTopMaxScale0.5,outerConeBottomMaxScale0.2,outerConeOpacity1,outerCylinderOpacity0.644,outerBlurMaxRadius50,outerCloakFadeThresholdAngle90°,outerDimRampEnd0.444,outerFadeToBlackStart0.2,outerFadeToBlackEnd0.5. - Prolonged dim: inner active 45°→15°, outer active 90°→120°.
- Seam dim:
seamDimThresholdAngle135°,seamDimWidth50.45,seamDimBlurRadius6.56,seamDimMaxOpacity0.35,seamDimLinearMax0.3,seamDimLinearIntensity1,seamDimNonlinearExponent2.078,seamDimNonlinearIntensity0.52,isSeamDimHiddenOnVirtualDevicesYES,isSeamDimExcludedFromCapturesYES. - Backdrop and morph:
backdropMinScale0.3,backdropMaxScale1,backdropScaleRadiusLow3.333,backdropScaleRadiusHigh16.667,isAdjustBackdropScaleEnabledNO,dimScale0.95,morphMaxBlurRadius10,morphUsesSharedAnimationSettingsYES. - Z-stack fades: in 0.6→0.8, out 0.2→0.4.
- Orientation lock:
isOrientationLockSettleEnabledYES,orientationLockSettleDuration0.35 s. - Substitute content:
substituteContentFillMode2,substituteContentStaticFillColor1,isInstantAppContentHiddenNO. - Effect switches:
isBlurEffectEnabled,isConeDimEnabled,isCornerMaskEnabled,isCylinderDimEnabled,isDimmingEnabled,isFadeToBlackEnabled,isMorphBlurEnabledandisPerspectiveTransformEnabledare all YES.
isSeamDimHiddenOnVirtualDevices YES is one of the places where SpringBoard
checks for a virtual device. On the VM, MobileGestalt IsVirtualDevice is YES,
so the seam dim stays hidden there.
MobileGestalt: where the sim answers and the VM differs
SpringBoard asked for 557 keys while open. Compared with the VM, 233 differ:
- 143: the simulator answers nil, while the VM answers from the real V68 device tree. Most are camera, AOP, haptics, ALS, AOD vibrancy and display rotation keys. These are not alignment targets: the simulator has no such hardware.
- 34: answered from the simulator's device-type plist, or synthetic. The
baseline marks them with
sim_note(table below). - 56: real disagreements, in the next table.
Synthetic or device-type answers (sim → VM). Do not align to the sim side of these:
Not checked here: which of the "Sim YES, VM NO" rows the VM turns off itself,
through IsVirtualDevice, HardwarePlatform vresearch1 or missing hardware
nodes, and which a real V68 also answers NO. Look at the libMobileGestalt
answer function for each key before aligning one.
Also from the records: MGCopyAnswerForDisplayAtIndex returns nil in the
simulator for every camera and button rect query on all three display indexes.