TL;DR I am hiding promoted IAP products and I can verify that StoreKit thinks they are hidden by fetching the current visibility. However in the app store my promoted IAP products are still available.
I have some promoted IAPs which I hide for users who have already purchased them (or cannot purchase them). But this doesn't seem to be working. At first I thought maybe I was doing something wrong so I added some logging to my app to figure out what was happening behind the scenes and then distributed through the app store.
Basically the process is:
1. On launch of the app I request products from StoreKit
2. Once I get back products from the App Store I then determine should the products be hidden or "default" (which specifies to use the ITC setting for that product).
3. I then have my own API that I call for each product with the appropriate visibility (hide or default) based on the status of the user.
4. In that API I first get the current visibility by calling: `fetchStorePromotionVisibilityForProduct:completionHandler:`
5. In the completion for the fetch call I log the "current visibility" and the error (if there was one) and then I check the visibility that I got back against what I am setting it to, if they differ then I call: `updateStorePromotionVisibility:forProduct:completionHandler:`
6. In the completion handler for that call I log that the visibility was updated (and what it was updated to) and the error if there was one.
Ok so now, on device using the app store build with these logs, I can now see what's going on. I see that the user has purchased the products and so they should be hidden. I see that after the products are received back from the App Store my code attempts to hide the products (a call to my API with the visibility `.hide` is made. The API checks the current visibility which is `.default`, no errors are returned. It then updates the visibility to `.hide`, the completion logs it and no errors are received.
I then went to the app store and I see my promoted IAPs are visibile and tapable.
I then fresh launch my app again, because this will enable me to check what the visibility is now. It goes through the same process as above and calls my API to hide the products. It checks current visibility, which is now `.hide` so it doesn't do anything more. I go back to the app store and I see they are still visible.
Has anyone seen this particular behavior/issue, what have you done to resolve it? Is this just a bug? I can submit all this info in a Radar but since it is not testable outside of the App Store I can't submit a sample project for it so I am not sure how much attention I'd get.