The Speech Route job started with an empty App Store Connect account. No app record. No products. The client wanted a subscription and a listing. There was nowhere to attach either.

There is nothing to fetch

StoreKit talks to products on an app record. If the record is missing, every paywall test is theatre. I did not understand that on day one. I understood it after Guideline 2.1 read an empty purchase screen as an incomplete app.

The record is the listing

Name, bundle ID, privacy URL, screenshots, age rating — those are the record. On Speech Route some of that information sat with the client. I could write StoreKit. I could not invent a privacy policy URL they had not hosted. A file is not a URL.

What I open first now

Before the feature, I want an app record with the same bundle ID as Xcode. Then products. Then the paywall. Hangar went through on the first try because I owned that record. Speech Route did not. The sequence is in the eight-rejections post.