Post

Replies

Boosts

Views

Activity

Reply to Compliant implementation of dynamic pricing tiers for upgrades and extensions via StoreKit
You are computing the delta in one currency, but each SKU carries a different price in every storefront, picked from that currency's own price-point ladder. I suggest to record what the user actually paid from the signed transaction itself. Also good to decide a rounding rule up front. The gaps between Apple price points are not uniform and get wider as prices go up, so many deltas will not have an exact SKU. Rounding down to the nearest SKU means you never overcharge, at the cost of a small loss on some upgrades. Regarding consumable vs non-renewing: a consumable models "pay a one-off amount", a non-renewing subscription models "buy a fixed period of access". Since your extension buys time, non-renewing may describe it more honestly, but I have seen both used. In any case, I highly recommend to localize your prices. The store only does currency conversion, localization is instead price adjustment based on affordability per each country. Try free tools like https://pricepush.app/price-localizer to have an idea of how much to charge.
2w
Reply to TestFlight: StoreKit 1 and 2 return USD prices, but purchase sheet shows JPY
As far as I know, 143462 is the storefront ID for Japan, not the US (I believe the US one is 143441), and your StoreKit 1 identifier 143462-9,29 also carries a -9 language suffix. If that mapping is right, your numeric storefront ID says Japan while countryCode says USA, which would mean the storefront object itself is inconsistent in that session rather than your lookup code being wrong. Other data that can help: Log Storefront.current (both id and countryCode) immediately before Product.products(for:), and again right after the purchase sheet is dismissed. Check whether a sandbox account is also signed in on the device (Settings > Developer > Sandbox Apple Account) and which region it is set to. TestFlight and sandbox pricing behavior is not documented very precisely, so I would treat the purchase sheet price as the one that reflects what a real customer would be charged.
Topic: App & System Services SubTopic: StoreKit Tags:
2w
Reply to Does changing the price of an approved In-App Purchase trigger a new App Review?
No, a price change on its own does not go through App Review. I push price changes to already-approved in-app purchases regularly and none of them have triggered a review. What does go to review is the in-app purchase's metadata: the localized display name and description, plus the review screenshot and notes. That is the "localized information" the Help page refers to. The price lives in the price schedule, which sits outside that, so once you save it the new price applies without a submission. Something else useful to know for your case: Non-renewing subscriptions have no customer consent step. The consent flow for price increases only applies to auto-renewable subscriptions, so nothing is shown to your users. Anyone who already bought keeps what they paid. The new price only applies to new purchases. If you want to control the timing, you can set the change for a future start date instead of immediately. It can take a little while for the new price to show up on devices, but there is no review in between. In any case, be aware that when using the store price auto-conversion feature, prices are only adjusted based on currency conversion and not affordability. If you want to optimize your prices per each country and increase your chances of converting more users, try a price localizer too like PricePush https://pricepush.app Good Luck
Topic: App & System Services SubTopic: StoreKit Tags:
2w
Reply to Compliant implementation of dynamic pricing tiers for upgrades and extensions via StoreKit
You are computing the delta in one currency, but each SKU carries a different price in every storefront, picked from that currency's own price-point ladder. I suggest to record what the user actually paid from the signed transaction itself. Also good to decide a rounding rule up front. The gaps between Apple price points are not uniform and get wider as prices go up, so many deltas will not have an exact SKU. Rounding down to the nearest SKU means you never overcharge, at the cost of a small loss on some upgrades. Regarding consumable vs non-renewing: a consumable models "pay a one-off amount", a non-renewing subscription models "buy a fixed period of access". Since your extension buys time, non-renewing may describe it more honestly, but I have seen both used. In any case, I highly recommend to localize your prices. The store only does currency conversion, localization is instead price adjustment based on affordability per each country. Try free tools like https://pricepush.app/price-localizer to have an idea of how much to charge.
Replies
Boosts
Views
Activity
2w
Reply to TestFlight: StoreKit 1 and 2 return USD prices, but purchase sheet shows JPY
As far as I know, 143462 is the storefront ID for Japan, not the US (I believe the US one is 143441), and your StoreKit 1 identifier 143462-9,29 also carries a -9 language suffix. If that mapping is right, your numeric storefront ID says Japan while countryCode says USA, which would mean the storefront object itself is inconsistent in that session rather than your lookup code being wrong. Other data that can help: Log Storefront.current (both id and countryCode) immediately before Product.products(for:), and again right after the purchase sheet is dismissed. Check whether a sandbox account is also signed in on the device (Settings > Developer > Sandbox Apple Account) and which region it is set to. TestFlight and sandbox pricing behavior is not documented very precisely, so I would treat the purchase sheet price as the one that reflects what a real customer would be charged.
Topic: App & System Services SubTopic: StoreKit Tags:
Replies
Boosts
Views
Activity
2w
Reply to Does changing the price of an approved In-App Purchase trigger a new App Review?
No, a price change on its own does not go through App Review. I push price changes to already-approved in-app purchases regularly and none of them have triggered a review. What does go to review is the in-app purchase's metadata: the localized display name and description, plus the review screenshot and notes. That is the "localized information" the Help page refers to. The price lives in the price schedule, which sits outside that, so once you save it the new price applies without a submission. Something else useful to know for your case: Non-renewing subscriptions have no customer consent step. The consent flow for price increases only applies to auto-renewable subscriptions, so nothing is shown to your users. Anyone who already bought keeps what they paid. The new price only applies to new purchases. If you want to control the timing, you can set the change for a future start date instead of immediately. It can take a little while for the new price to show up on devices, but there is no review in between. In any case, be aware that when using the store price auto-conversion feature, prices are only adjusted based on currency conversion and not affordability. If you want to optimize your prices per each country and increase your chances of converting more users, try a price localizer too like PricePush https://pricepush.app Good Luck
Topic: App & System Services SubTopic: StoreKit Tags:
Replies
Boosts
Views
Activity
2w