# Stilllight · StoreKit product configuration

Bundle identifier: `com.gallaxgames.stilllight`. No subscriptions or paid random items. Product identifiers are exact and must match App Store Connect. Prices below are proposed UK base prices; the app displays Apple's localised price, never a hard-coded checkout price.

| Suffix (after com.gallaxgames.stilllight.) | Name | Type | UK base | Delivery |
|---|---|---|---:|---|
| drops100 | 100 Stardrops | Consumable | £0.99 | Add exactly 100 Stardrops once |
| drops550 | 550 Stardrops | Consumable | £3.99 | Add exactly 550 Stardrops once |
| quiet | Quiet skies | Non-consumable | £3.99 | Replace optional videos with instant free 2× Light for 10 minutes; 30-minute cooldown |
| radiance | Lasting radiance | Non-consumable | £4.99 | Permanent 2× all Light from taps, companions and offline production |
| sanctuary | Open sanctuary | Non-consumable | £2.99 | Set maximum offline gathering to 24 hours |

Quiet Skies removes the need to watch the game's only advertising format. The free game already has no forced ads, banners or interstitials. It does not remove the cooldown or create a subscription. All three non-consumables survive both prestige layers and support restoration. Family Sharing is not enabled in the local catalogue; set production consistently.

Stardrops can also be earned: 8 per constellation, 2 per Reflection and 10 per Renewal growth. Spend 25 on two hours of current ordinary production or 40 per alternate star colour. Intervals do not multiply temporary boosts; colours are purely visual and permanent. There are no purchasable Insight packs or exclusive constellations.

## Implementation

StoreKit 2 loads Apple's product metadata. Only verified transactions deliver. The transaction ID and resulting balance are saved atomically before finish(). Unfinished transactions recover on launch; Transaction.updates handles pending approvals. A revision guard prevents an older entitlement refresh from undoing a newer purchase. Revocations remove non-consumable entitlements. Restore uses AppStore.sync and currentEntitlements. Saving failures leave delivery unfinished for retry.

## Local test evidence

The bundled Configuration/Stilllight.storekit catalogue uses the Xcode StoreKit environment. Eight app-host StoreKit tests passed on the iOS 26.5 simulator: both currency packs with exact persistent delivery; all permanent products through both resets and restoration; Ask to Buy; interrupted delivery; refund/revocation; cancellation; unavailable purchase; and a verified delivery that stays unfinished during save failure and succeeds after recovery. No real payment was made. UI purchase copy and prices are captured separately.

Local StoreKit success does not establish live App Store product availability, Sandbox/TestFlight success, agreements, bank/tax status or Apple review. Create the five production records, localisations, price schedules, availability and review screenshots in the owning Apple Developer account; attach first purchases to the first version submission. See Apple's instructions: https://developer.apple.com/help/app-store-connect/manage-submissions-to-app-review/submit-an-in-app-purchase/.

## Advertising setup

Debug uses Google's published sample iOS rewarded identifiers. Release identifiers are intentionally unset until a dedicated Stilllight app and rewarded unit are configured in the owner's AdMob account. Never reuse another game's units. Publish applicable UMP privacy messages, confirm content/privacy choices, add and verify app-ads.txt for the real publisher, then set the two identifiers, `STILLLIGHT_ADS_CONDITION = REWARDED_ADS` and `STILLLIGHT_ADS_LDFLAGS = -ObjC` in the ignored local configuration. Debug overrides IDs with the Google samples. By default Release compiles out the adapter and its startup code, and offers a friendly unavailable message; Quiet Skies continues to grant the advertised boost. The build rejects enabled Release advertising with missing or sample IDs. Validate earned, early-close, no-fill, consent and Quiet Skies paths with test devices before enabling live ads.

## App Store short descriptions (45 characters or fewer)

- drops100: 100 Stardrops for intervals and star colours.
- drops550: 550 Stardrops for intervals and star colours.
- quiet: Instant video rewards. The same cooldown.
- radiance: Permanent 2× Light, online and offline.
- sanctuary: Gather up to 24 hours of offline Light.
