fix(tests): reset Photos access before the previous app instance lingers - #746
Merged
Conversation
`AccessKeyBackupSmokeTests.testAccessKeyBackup_saveToPhotos` fails in the `AllTargets` plan run with `Expected "Allow" Button to be hittable within 30.0s` (`BaseUITestCase.swift:101`) while passing alone. In the plan it runs right after `testAccessKeyBackup_copyToClipboard` in the same runner, so `setUp` resets Photos access while the previous test's app instance can still be running, and the reset API only promises that a running app "might" be terminated during the reset. The plan run also executes UI tests on a throwaway simulator clone, where the Photos alert took 12.5s to become hittable against about 6s on the base device. - `BaseUITestCase.setUp` terminates the app before resetting permissions. - `allowSystemAlertIfNeeded(orUntil:)` waits up to 60s for either the springboard "Allow" button or the app moving on without one, and taps Allow only when it shows. - `testAccessKeyBackup_saveToPhotos` uses it in place of the hard 30s wait. - Reflection added: the base simulator's `TCC.db` says nothing about a plan run that used a clone.
bmc08gt
added a commit
that referenced
this pull request
Sep 11, 2026
…discrete-curve * origin/main: (27 commits) fix(database): share one SQLite writer per owner and take write locks up front (#759) feat(chat): declare the payment action on tip DM payments (#752) refactor(chat): drop the deprecated new_messages overlay (#757) feat(notifications): write prefetched messages into the shared store (#756) refactor(store): move the persistence layer into a shared FlipcashStore package (#755) feat(database): move the SQLite store into the App Group container (#754) feat(database): open the store on demand, close it on background (#753) feat(nse): extension crash reporting, a WAL checkpoint, and on-device push hooks (#751) feat(home): long-press the You tab to open the account switcher (#749) fix(tests): reset Photos access before the previous app instance lingers (#746) chore: bump version to 2026.9.2 (#745) revert: back out the Coinbase Stable Swapper authority migration (#747) (#750) fix(swap): follow the Coinbase Stable Swapper authority migration (#747) fix(tests): cancel a cash link through the details screen (#744) fix(chat): make the whole Send Cash pill tappable while it stands alone (#743) fix(username): drop a leading @ in the validator (#742) fix(chat): scope the send-button spring to the button (#741) fix(transactions): tighten the details card stack and drop the header badge (#740) fix(transactions): draw View in Chat as a card, not the primary action (#739) feat(chat): flash the message a reply-quote jump lands on (#738) ... # Conflicts: # Code.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved # FlipcashCore/Package.swift
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Problem
AccessKeyBackupSmokeTests.testAccessKeyBackup_saveToPhotosfails in the fullAllTargetsplan run withExpected "Allow" Button to be hittable within 30.0satBaseUITestCase.swift:101, and passes when run alone. In the plan it runs second, right aftertestAccessKeyBackup_copyToClipboardin the same runner process.Two things differ from the isolated run:
setUpcallsresetAuthorizationStatus(for: .photos)while the previous test's app instance can still be running. The XCUIAutomation header only says a running app "might get terminated while the reset occurs".FlipcashTestsparallelizable, soxcodebuildruns every target, UI tests included, on a throwawayClone 1 of iPhone 17. On that clone the Photos alert took 12.5s to become hittable (xcresult activities: "Save to Photos" tapped at +0, "Allow" tapped at +12.5s); on the base device it takes about 6s. A busier plan run leaves less headroom under the 30s wait.The exact plan-run failure did not reproduce in class-level runs. Measured on the base device with a
tccdlog stream and aTCC.dbpoller, the reset deleted thekTCCServicePhotosAddrow and the alert appeared with the test alone, with the whole class after pre-launching the app, and after a fresh install wheretccdlogsbundleRecordWithBundleIdentifier failed ... -10814and still publishes the delete.Fix
Harness only, no app changes.
BaseUITestCase.setUpterminates the app before resetting permissions when the test resets any, so the reset runs against a stopped process.allowSystemAlertIfNeeded(timeout:orUntil:)polls up to 60s for either the springboard "Allow" button or the caller's settled condition, tapping Allow only when the alert shows, and fails with a message naming both outcomes otherwise.testAccessKeyBackup_saveToPhotosuses it with!saveButton.existsas the settled condition, then keeps the existing success-state assertion.2026-09-09-ui-test-tcc-evidence-on-clones.md: a plan run's UI tests run on a clone, so the base simulator'sTCC.dbis not evidence about it.