QA Wolf installs unreleased iOS builds by resigning your app, which works for most tests. A few features cannot be tested on a resigned app, including:
- Push notifications
- Universal links (associated domains)
These features depend on capabilities that require a provisioning profile tied to your app’s bundle ID. Because you own the bundle ID, only you can produce that profile — so for these tests you sign the app for QA Wolf’s devices instead of letting QA Wolf resign it. Devices set up this way are called allowlisted devices.
Contact your QA Wolf representative to enable allowlisted devices for your team.
Sign the app for QA Wolf’s devices
QA Wolf shares a set of device UDIDs with you. Add these devices to the provisioning profile for your app’s bundle ID.
Build and sign the app for those devices using that profile.
Include QA Wolf instrumentation
When QA Wolf resigns an app, it injects an instrumentation library that lets your tests mock system behavior. When you sign the app yourself, include this library so mocking still works.
After injecting the instrumentation library, resign the IPA. Fastlane users can use the Fastlane resign action; otherwise resign the IPA with whatever your pipeline already uses.
Target allowlisted devices
Set targetDevices to Allowlisted Device in your workflow’s target configuration so the run is scheduled on the devices you signed the app for. deviceModel and iosVersion depend on the devices QA Wolf allocated for your team.
{
platform: "ios",
schemaVersion: 1,
meta: {
deviceModel: "iPhone 15",
iosVersion: "26",
targetDevices: "Allowlisted Device",
},
}
Disable resigning
Because you signed the app yourself, disable QA Wolf’s resigning when the app launches by setting the qawolf:disableResigning capability:
import { flow } from "@qawolf/flows/ios";
export default flow(
"Test push notifications",
{
target: {
platform: "ios",
schemaVersion: 1,
meta: {
deviceModel: "iPhone 15",
iosVersion: "26",
targetDevices: "Allowlisted Device",
},
},
launch: {
app: { env: "IPA_BUILD_LOCATION" },
capabilities: {
"qawolf:disableResigning": true,
},
},
},
async ({ driver, test }) => {
await test("notification is received", async () => {
// your test steps
});
},
);