Toggles suppresion of automatic passkit presentations
npm install passkit-suppressionAn Expo native module for iOS that wraps PKPassLibrary.requestAutomaticPassPresentationSuppression to prevent Apple Wallet from appearing when near NFC readers.
``bash`
npm install passkit-suppression
Then run:
`bash`
npx expo prebuild
This module requires the com.apple.developer.passkit.pass-presentation-suppression entitlement from Apple. Without it, requests will return "denied".
Note: Returns "notSupported" on simulator - requires a physical iOS device for testing.
The pass presentation suppression entitlement is restricted and must be requested from Apple. Submit a request at:
Apple will review your use case and, if approved, enable the entitlement for your App ID in the Apple Developer Portal.
Add the entitlement to your app.json or app.config.js:
`json`
{
"expo": {
"ios": {
"entitlements": {
"com.apple.developer.passkit.pass-presentation-suppression": true
}
}
}
}
Then regenerate your native project:
`bash`
npx expo prebuild --clean
After running prebuild, you can verify the entitlement is set by opening the Xcode project and checking the .entitlements file in your app target. It should contain:
`xml`
If requestSuppression() returns "denied":
1. Verify the entitlement has been approved by Apple for your App ID
2. Ensure your provisioning profile includes the entitlement (regenerate it in the Apple Developer Portal if needed)
3. Check that the entitlement is correctly set in app.jsonnpx expo prebuild --clean
4. Run to regenerate native files
`typescript
import { useCallback } from "react";
import { useFocusEffect } from "@react-navigation/native";
import { requestSuppression, endSuppression } from "passkit-suppression";
function MyScreen() {
useFocusEffect(
useCallback(() => {
requestSuppression();
return () => {
endSuppression();
};
}, [])
);
return
}
`
`typescript
import {
requestSuppression,
endSuppression,
isSuppressing,
} from "passkit-suppression";
// Request suppression
const result = await requestSuppression();
if (result === "success") {
console.log("Is suppressing:", isSuppressing());
}
// End suppression when done
endSuppression();
`
The result field is one of:
- "success" - Suppression is active"notSupported"
- - Device/simulator doesn't support suppression"alreadyPresenting"
- - A pass is already being presented"denied"
- - Missing required entitlement"cancelled"
- - Request was cancelled
This module is iOS-only. The underlying PKPassLibrary` API is not available on Android or web.
MIT