I bought a MacBook specifically for the Speech Route job, and I had never used macOS before.
The subscription code was not the hardest part of being new. Signing was. Builds failed for reasons that had nothing to do with the feature I'd been hired to write, and the errors assumed I already knew the vocabulary: certificates, identifiers, provisioning profiles, the app record. Four names. I did not know what any of them were, or that they had to agree with each other.
I got through it with the editor in front of me and a lot of searching, one error at a time. I will not pretend I had a clean mental model then. That came later, after doing it again on my own apps. This is the model I wish someone had drawn for me on day one.
Four things that have to say the same app
A certificate is Apple confirming you are a developer it has issued an identity to. It lives in your keychain. Without it, Xcode cannot sign a build, and a build that isn't signed cannot be uploaded.
An identifier is the app's bundle ID — the unique name of this app, not of you. It has to match across Xcode, the Developer portal, and App Store Connect. If one of those three has a different string, the others will not accept the build.
A provisioning profile is the permission slip that ties the certificate to the identifier (and, for device builds, to specific devices). It is the piece I found most confusing, because it is not a setting I wrote. It is a file Apple generates after the other two exist, and Xcode then has to be using that file for this bundle ID. A profile for a different identifier, or an expired one, fails in a way that does not mention the profile.
The app record in App Store Connect is the store listing. Its bundle ID has to be the same identifier as the binary you upload. On Speech Route, App Store Connect was empty when I opened it. There was no record to match against, which made every signing error look like a local problem.
Those four have to describe the same app. When they don't, the failure shows up in Xcode or in a Transporter/upload error, not in your Swift.
What I was actually stuck on
I was debugging code that compiled. The red errors were about signing, and I kept treating them as environment noise on a new Mac. They weren't noise. They were the system telling me two of the four names didn't match, in a language I hadn't learned.
The other rejections on that submission — the empty paywall, the paywall you couldn't close, the privacy policy that was a file — at least arrived as App Store review notes. Signing never got that far. The build wouldn't leave my machine.
What I'd set up first next time
Before writing the feature, I would make the four names exist and match: certificate in the keychain, bundle ID decided and used everywhere, a profile generated for that ID, an app record in App Store Connect with the same ID. Then I'd try a blank upload. If that succeeds, the signing is out of the way, and the next failures are review failures, which are a different job.
I still wouldn't call myself fluent in this. I can get through it now without the panic of not knowing what the words mean. That was the actual blocker on a first Mac, and it had nothing to do with StoreKit.