The split failure is the nasty part, because a CI job that only checks screenshots will keep passing while every tap silently does nothing. A cheap guard is a smoke step at the start of the run that taps a known element and asserts the screen changed, so a moved framework path fails loudly in the first minute. Pinning the Xcode version per runner image until the tools catch up also helps.
StackShortlist
Proof Over Promises.
The split failure is the nasty part, because a CI job that only checks screenshots will keep passing while every tap silently does nothing. A cheap guard is a smoke step at the start of the run that taps a known element and asserts the screen changed, so a moved framework path fails loudly in the first minute. Pinning the Xcode version per runner image until the tools catch up also helps.