passkit-suppression
v0.3.0
Published
Toggles suppresion of automatic passkit presentations
Maintainers
Readme
PassKit Suppression
An Expo native module for iOS that wraps PKPassLibrary.requestAutomaticPassPresentationSuppression to prevent Apple Wallet from appearing when near NFC readers.
Installation
npm install passkit-suppressionThen run:
npx expo prebuildRequirements
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.
Entitlement Setup
1. Request the entitlement from Apple
The pass presentation suppression entitlement is restricted and must be requested from Apple. Submit a request at:
https://developer.apple.com/contact/request/pass-presentation-suppression
Apple will review your use case and, if approved, enable the entitlement for your App ID in the Apple Developer Portal.
2. Configure in your Expo app
Add the entitlement to your app.json or app.config.js:
{
"expo": {
"ios": {
"entitlements": {
"com.apple.developer.passkit.pass-presentation-suppression": true
}
}
}
}Then regenerate your native project:
npx expo prebuild --clean3. Verify in Xcode (optional)
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:
<key>com.apple.developer.passkit.pass-presentation-suppression</key>
<true/>Troubleshooting
If requestSuppression() returns "denied":
- Verify the entitlement has been approved by Apple for your App ID
- Ensure your provisioning profile includes the entitlement (regenerate it in the Apple Developer Portal if needed)
- Check that the entitlement is correctly set in
app.json - Run
npx expo prebuild --cleanto regenerate native files
Usage
With useFocusEffect
import { useCallback } from "react";
import { useFocusEffect } from "@react-navigation/native";
import { requestSuppression, endSuppression } from "passkit-suppression";
function MyScreen() {
useFocusEffect(
useCallback(() => {
requestSuppression();
return () => {
endSuppression();
};
}, [])
);
return <View>{/* ... */}</View>;
}Basic Usage
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();Result Values
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
Platform Support
This module is iOS-only. The underlying PKPassLibrary API is not available on Android or web.
License
MIT
