feat(ipad): T-iPad-1 — device family [1,2] + iPad orientations + CI leg

Opens WebTerm to iPhone + iPad: TARGETED_DEVICE_FAMILY 1→1,2 (project + all
targets), iPad gets all four orientations (~ipad key), ios.yml gains an
ipad-tests leg (iPad Pro 11 sim). Built plist verified UIDeviceFamily [1,2];
app launches natively full-screen on iPad Pro 11 sim (no letterbox). Adaptive
layout (NavigationSplitView) lands in T-iPad-2. Plan: docs/PLAN_IOS_IPAD.md.
This commit is contained in:
Yaojia Wang
2026-07-05 18:29:30 +02:00
parent 9c0097a305
commit 77502ec4fe
3 changed files with 265 additions and 6 deletions

View File

@@ -19,7 +19,7 @@ settings:
SWIFT_VERSION: "6.0" # Swift 6 language mode
SWIFT_STRICT_CONCURRENCY: complete
IPHONEOS_DEPLOYMENT_TARGET: "17.0"
TARGETED_DEVICE_FAMILY: "1" # iPhone only (iPad layout is out of v1 scope)
TARGETED_DEVICE_FAMILY: "1,2" # iPhone + iPad (T-iPad-1; adaptive layout)
CODE_SIGN_STYLE: Automatic
packages:
@@ -55,9 +55,10 @@ targets:
base:
PRODUCT_BUNDLE_IDENTIFIER: com.yaojia.webterm
# Target-level on purpose (T-iOS-19 finding): XcodeGen's target platform
# default ("1,2") overrides a project-level value, shipping an
# installable-but-untested iPad layout. Target-level wins.
TARGETED_DEVICE_FAMILY: "1"
# default overrides a project-level value. iPad adaptation (T-iPad-1)
# opens this to iPhone + iPad; the adaptive layout (LayoutPolicy /
# NavigationSplitView, T-iPad-2) makes the iPad layout first-class.
TARGETED_DEVICE_FAMILY: "1,2"
info:
path: App/WebTerm/Resources/Info.plist
properties:
@@ -69,10 +70,18 @@ targets:
CFBundleURLTypes:
- CFBundleURLName: com.yaojia.webterm.deeplink
CFBundleURLSchemes: [webterminal]
# iPhone: portrait + both landscapes (no upside-down — matches P0).
UISupportedInterfaceOrientations:
- UIInterfaceOrientationPortrait
- UIInterfaceOrientationLandscapeLeft
- UIInterfaceOrientationLandscapeRight
# iPad (T-iPad-1): all four orientations — iPad users hold it any way,
# and Split View / Stage Manager assume full orientation freedom.
UISupportedInterfaceOrientations~ipad:
- UIInterfaceOrientationPortrait
- UIInterfaceOrientationPortraitUpsideDown
- UIInterfaceOrientationLandscapeLeft
- UIInterfaceOrientationLandscapeRight
# ── Security-critical keys, transcribed verbatim from PLAN_IOS_CLIENT §5.2 ──
# NO NSAllowsArbitraryLoads anywhere (release OR debug): the five CIDR
# exceptions below cover LAN + hotspot + Tailscale CGNAT + simulator
@@ -114,7 +123,7 @@ targets:
settings:
base:
GENERATE_INFOPLIST_FILE: true
TARGETED_DEVICE_FAMILY: "1"
TARGETED_DEVICE_FAMILY: "1,2"
TEST_HOST: "$(BUILT_PRODUCTS_DIR)/WebTerm.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/WebTerm"
BUNDLE_LOADER: "$(TEST_HOST)"
@@ -131,7 +140,7 @@ targets:
settings:
base:
GENERATE_INFOPLIST_FILE: true
TARGETED_DEVICE_FAMILY: "1"
TARGETED_DEVICE_FAMILY: "1,2"
TEST_TARGET_NAME: WebTerm
schemes: