Conversation
NativeGlassPoCTests drives the actual Capacitor demo app: a parity-mode native overlay mounts UIKit references (buttons, toggle, segmented control, slider, tab bar) while the native-glass-poc page reports DOM frames over the WebKit bridge, so geometry is compared live in one run. - AppDelegate/ParityMode mount references and merge web metrics into a JSON report label; XCTest asserts frames with tolerances. - Known gaps (button height, segment height, tab pill x) are wrapped in XCTExpectFailure so real differences stay visible without red CI. - Workflow runs the parity script on macos-26 (iOS 26.5), manual + weekly. - Simulator setup script is fetched from the pinned ionic-theme-utils sha. - Regenerate demo/ios/App on the Capacitor 8 SPM layout (Pods removed). Generated with [Devin](https://devin.ai) Co-Authored-By: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>
The report label mounts empty; waitForExistence returned before web metrics arrived, so CI parsed an empty string. Wait on a non-empty label predicate instead. DerivedData (multi-GB index caches) also lived inside VERIFY_ARTIFACTS_DIR and was uploaded wholesale; move it to a separate scratch dir. Generated with [Devin](https://devin.ai) Co-Authored-By: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>
| { | ||
| path: 'native-glass-poc', | ||
| loadComponent: () => import('./native-glass-poc/native-glass-poc.page').then((m) => m.NativeGlassPocPage), | ||
| }, |
| selector: 'app-native-glass-poc', | ||
| templateUrl: './native-glass-poc.page.html', | ||
| styleUrls: ['./native-glass-poc.page.scss'], | ||
| standalone: true, |
| const timer = setInterval(() => { | ||
| if ((window as any).webkit?.messageHandlers?.parity) { | ||
| clearInterval(timer); | ||
| void this.#router.navigateByUrl('/native-glass-poc'); | ||
| } | ||
| }, 200); | ||
| setTimeout(() => clearInterval(timer), 10_000); |
Playwright test resultsDetails
|
|
📊 Ionic 9 Playwright Test Report View the detailed Ionic 9 report: https://rdlabo-dev.github.io/ionic-theme-ios27/pr-180/ Ionic 8 runs against the same screenshots in a separate matrix job. View both results in the workflow run. |
|
📊 Ionic 9 Playwright Test Report View the detailed Ionic 9 report: https://rdlabo-dev.github.io/ionic-theme-ios27/pr-180/ Ionic 8 runs against the same screenshots in a separate matrix job. View both results in the workflow run. |
Replace the standalone native-glass-poc page with the same /main/index/native-ui-shell audit page used on the iOS 27 branch so both themes are measured against one real demo surface. Web metrics now live in the app component and the parity harness resizes its UIKit references to the measured web widths, so segment division is asserted strictly while known tab-pill anchoring differences stay non-strict. Generated with [Devin](https://devin.ai) Co-Authored-By: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>
|
📊 Ionic 9 Playwright Test Report View the detailed Ionic 9 report: https://rdlabo-dev.github.io/ionic-theme-ios27/pr-180/ Ionic 8 runs against the same screenshots in a separate matrix job. View both results in the workflow run. |
|
📊 Ionic 9 Playwright Test Report View the detailed Ionic 9 report: https://rdlabo-dev.github.io/ionic-theme-ios27/pr-180/ Ionic 8 runs against the same screenshots in a separate matrix job. View both results in the workflow run. |
rdlabo
left a comment
There was a problem hiding this comment.
The live UIKit/Web geometry comparison is an interesting experiment, but this PR is no longer a practical merge candidate. It is based on the old ios26 branch and combines the parity test with a large demo iOS project regeneration, an application-only bridge, and several expected failures.
That creates substantial production-demo and maintenance surface for checks that overlap with the existing native shell suites and do not currently act as strict regression gates. I’m closing this PR rather than rebasing the whole harness. If a specific geometry invariant still needs coverage, it should be added as a focused assertion to the current native fixture or shell suite from main.
Summary
NativeGlassPoCTests(XCTest) drives the actual Capacitor demo app: with-parity,ParityMode.swiftmounts UIKit reference controls (Save button, 3-item segmented control, 4-item tab bar) and the app component reports DOM frames of the real/main/index/native-ui-shellpage + shellion-tab-barover aWKScriptMessageHandler, so web↔native geometry is compared live in a single run — no JSON fixtures, no separate fixture app.native-ui-shellpage (same as the iOS 27 branch's focused test): back button, Save, segment, menu/actions buttons, and the shell tab bar. The harness resizes each reference to the measured web width so item divisions compare like for like.XCTExpectFailureso they stay visible without red CI.scripts/verify-ios26-parity.shbuilds the demo,cap syncs, installs on the simulator, generates the test project with XcodeGen, and runsxcodebuild test. DerivedData is kept outside the uploaded artifacts dir.workflow_dispatch+ weekly (Mon 03:00 JST) onmacos-26/ iOS 26.5.ci-simulator.shis fetched from the pinned ionic-theme-utils sha (ec42938).demo/ios/Appregenerated on the Capacitor 8 SPM layout (CocoaPods files removed).Test plan
sh scripts/verify-ios26-parity.shlocally: 2 tests, 0 failures (expected-failure annotations only)Generated with Devin