Thanks for being a part of WWDC25!

How did we do? We’d love to know your thoughts on this year’s conference. Take the survey here

run XCUITest with an SKStoreReviewController

I'm building out a number of XCUITests.

At one stage in my app, we present an SKStoreReviewController to ask the user if they'd like to review the app now.

All I'd like to do is dismiss the view, by hitting the "Not Now" button.

Normally, for other "system" views, I'd something like this:

let springboard = XCUIApplication(bundleIdentifier: "com.apple.springboard")
let notNowButton = springboard.buttons["Not Now"]

And then I'd do an appropriate 'wait' and tap action. But for some reason, this isn't working. Looking for advice on how to properly handle this screen.

It seems that the SKStoreReviewController is being spawned from a non-springboard process

If you know the bundle identifier of that process, you can interact with it using XCUIApplication

If you have a screenshot of the screen, we can try to investigate which bundle it is a part of

The identifier was com.apple.ios.StoreKitUIService I'm sorry to say that I don't remember how exactly I dumped this value out to the log. But that's the bundle-id for the app that asks the user to review the app.

run XCUITest with an SKStoreReviewController
 
 
Q