Files
gstack/test/fixtures/ios-qa/FixtureApp/project.yml
T
SinabinaandClaude Opus 4.8 c2ac1f32c0 feat(ios-qa): adaptive XCUITest runner that reaches nested controls and verifies taps
JSON-driven XCUITest runner plus SwiftUI/UIKit fixture apps that drive a
real app by bundle id. The runner resolves the actual switch inside a
SwiftUI Toggle wrapper, and when a center tap misses the full-width row it
retries on the control's trailing edge via an element-anchored normalized
offset (adaptive, not a raw screen coordinate), then verifies the switch
value actually changed. A tap that silently does nothing is now reported
as an interaction failure, not a false product defect. Validated on the
simulator and on a physical iPhone.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-21 14:19:14 -07:00

120 lines
3.4 KiB
YAML

name: FixtureApp
options:
deploymentTarget:
iOS: "16.0"
bundleIdPrefix: com.gstack.iosqa
developmentLanguage: en
createIntermediateGroups: true
settings:
DEVELOPMENT_TEAM: 623FYQ2M88
CODE_SIGN_STYLE: Automatic
ENABLE_USER_SCRIPT_SANDBOXING: NO
# Personal-team bundle IDs are scoped per-team; this prefix is unique.
PRODUCT_BUNDLE_IDENTIFIER: com.gstack.iosqa.fixture
# Local SPM package providing DebugBridgeCore + DebugBridgeUI as dependencies.
# packages keyword (with `path:`) means a sibling local package next to project.yml.
packages:
DebugBridge:
path: .
targets:
FixtureApp:
type: application
platform: iOS
deploymentTarget: "16.0"
sources:
- path: Sources/FixtureApp
dependencies:
- package: DebugBridge
product: DebugBridgeCore
- package: DebugBridge
product: DebugBridgeUI
info:
path: Sources/FixtureApp/Info.plist
properties:
CFBundleDisplayName: ios-qa fixture
UILaunchScreen: {}
UISupportedInterfaceOrientations: [UIInterfaceOrientationPortrait]
UIRequiredDeviceCapabilities: [arm64]
settings:
base:
PRODUCT_BUNDLE_IDENTIFIER: com.gstack.iosqa.fixture
DEVELOPMENT_TEAM: 623FYQ2M88
CODE_SIGN_STYLE: Automatic
TARGETED_DEVICE_FAMILY: "1"
SWIFT_VERSION: "5.9"
IPHONEOS_DEPLOYMENT_TARGET: "16.0"
ENABLE_PREVIEWS: YES
AdaptiveSwiftUIFixture:
type: application
platform: iOS
deploymentTarget: "16.0"
sources:
- path: Sources/AdaptiveSwiftUIFixture
info:
path: Sources/AdaptiveSwiftUIFixture/Info.plist
properties:
CFBundleDisplayName: SwiftUI QA Gallery
UILaunchScreen: {}
UISupportedInterfaceOrientations: [UIInterfaceOrientationPortrait]
settings:
base:
PRODUCT_BUNDLE_IDENTIFIER: com.gstack.iosqa.adaptive.swiftui
CODE_SIGNING_ALLOWED: NO
TARGETED_DEVICE_FAMILY: "1"
SWIFT_VERSION: "5.9"
AdaptiveUIKitFixture:
type: application
platform: iOS
deploymentTarget: "16.0"
sources:
- path: Sources/AdaptiveUIKitFixture
info:
path: Sources/AdaptiveUIKitFixture/Info.plist
properties:
CFBundleDisplayName: UIKit QA Gallery
UILaunchScreen: {}
UISupportedInterfaceOrientations: [UIInterfaceOrientationPortrait]
settings:
base:
PRODUCT_BUNDLE_IDENTIFIER: com.gstack.iosqa.adaptive.uikit
CODE_SIGNING_ALLOWED: NO
TARGETED_DEVICE_FAMILY: "1"
SWIFT_VERSION: "5.9"
AdaptiveFixtureUITests:
type: bundle.ui-testing
platform: iOS
deploymentTarget: "16.0"
sources:
- path: Tests/AdaptiveFixtureUITests
dependencies:
- target: AdaptiveSwiftUIFixture
- target: AdaptiveUIKitFixture
settings:
base:
PRODUCT_BUNDLE_IDENTIFIER: com.gstack.iosqa.adaptive.uitests
GENERATE_INFOPLIST_FILE: YES
CODE_SIGNING_ALLOWED: NO
SWIFT_VERSION: "5.9"
schemes:
AdaptiveFixtureUITests:
build:
targets:
AdaptiveSwiftUIFixture: all
AdaptiveUIKitFixture: all
AdaptiveFixtureUITests: [test]
test:
config: Debug
targets:
- AdaptiveFixtureUITests
environmentVariables:
GSTACK_IOS_QA_FLOW_PATH: $(GSTACK_IOS_QA_FLOW_PATH_VALUE)
GSTACK_IOS_QA_FLOW_JSON_BASE64: $(GSTACK_IOS_QA_FLOW_JSON_BASE64_VALUE)
GSTACK_IOS_QA_TARGET_KIND: $(GSTACK_IOS_QA_TARGET_KIND_VALUE)