Skip to main content
Question

why when I grant an entitlement in the sanbox environment, does it show up in the non-sandbox details for the user?

  • October 31, 2025
  • 3 replies
  • 43 views

Forum|alt.badge.img+8

The iOS sandbox is all messed up on my user/device - constantly hanging while getting offerings resulting in paywalls not being shown 99% of the time & if it does, should I try to subscribe it just hangs…

 

So i try to work around this by granting entitlements from the RC dashboard.  I choose SANDBOX environment, grant a subscription, and after the success message, I reload the page.  Nothing there...if I toggle OFF the sandbox, the entitlement I granted is there!?  

Is that expected?

This post has been closed for comments

3 replies

wes_clark
RevenueCat Staff
Forum|alt.badge.img+6
  • RevenueCat Staff
  • November 4, 2025

Hi! As we mention in the documentation, Granted Entitlements are always considered to be “Production” transactions, which is why they appear in the Dashboard in this way. As to why they are not granting access within your app, can you share how you are checking for the Entitlement within your code? Additionally, I would be happy to help debug the Offerings issue that you mentioned, could you share an app user ID where you were able to demonstrate this issue? If you would rather not share that publicly, you can also start a private support ticket through the Dashboard.


Forum|alt.badge.img+8
  • Author
  • Helper
  • November 5, 2025

> you can also start a private support ticket through the Dashboard.

I will try again on this, but it’s been months…

 

In terms of how I check in the app, all was fine months ago, i haven’t changed anything recently, but I use your example in the docs:

const getInfo = useCallback(async () => {
try {
await Purchases.invalidateCustomerInfoCache();

const info = await Purchases.getCustomerInfo();
packageRef.current =
info?.entitlements?.active?.[entitlementName]?.productIdentifier;

const isEntitled =
typeof info.entitlements.active[entitlementName] !== 'undefined'; setIsActive(isEntitled);
if (isEntitled) {
setSawPaywall(true);
}
return info;
} catch (e) {
if (__DEV__) {
console.error(e);
} else {
Bugsnag.notify({
name: 'getInfo Error in Purchase Provider',
message: (e as Error).message,
});
}
}
}, [setSawPaywall, setIsActive]);

 


chris_perriam
RevenueCat Staff
Forum|alt.badge.img+6
  • RevenueCat Staff
  • November 17, 2025

@lucksp we’ve been reviewing your ticket history and noticed the following log appear in multiple instances:

 INFO  [RevenueCat] ℹ️ Purchases instance already set. Did you mean to configure two Purchases objects?

Is this log still appearing in your latest application version? If the RevenueCat SDK is being inadvertently configured multiple times, it can lead to unexpected issues and may be contributing to the problems you report.

Also, I’d recommend resetting the purchase history for your sandbox account, waiting 30 minutes, then deleting the RevenueCat customer you’re using for testing. This isn’t a necessary step for RevenueCat to work correctly when testing, but it can help simplify the data associated with your sandbox account.

You can reset the purchase history for your sandbox account on your iOS device by going to:

Settings app > Developer > Scroll all the way down to Sandbox Apple Account > Tap your account > Manage