Your $99 order is paid and waiting. Apple took the order on 1 November 2026 for Francis Ani-Johnson, enrollment ID 4ZC75KM4TW. They said processing can take up to two business days. The activation email will arrive at [email protected]. Check that inbox and the spam folder. Until that email says the membership is active, App Store Connect, the Codemagic upload key, and the Apple push key will not work. Firebase can be prepared before that email. Do not press Start in Codemagic yet.
What is already done, and what only you can click
The iPhone project already exists in the GitHub repo you connected to Codemagic. The app is named LinkUp Room. Its bundle id, which is Apple’s permanent name for this app, is com.adamantisstudios.linkuproom. Sign in with Apple is already written into the login screen. The camera, microphone, and photo explanations Apple requires are already in the project. Account deletion, the 18+ checkbox, and the content filter are already in the code.
Nobody else can finish the next part for you, including an assistant on this computer. Apple, Codemagic, and Firebase each ask you to sign in as yourself. Apple also takes a card payment and sometimes a photo of an ID. Those screens will not accept a login from anyone but you. After you finish the clicks below, the cloud Mac at Codemagic builds the app and sends it to Apple. You do not need to buy a Mac.
Pay Apple once a year, not once per app. The $99 is for a developer membership. That membership can hold LinkUp Room and every other app you publish later. Updates to LinkUp Room do not cost another $99. If you skip the renewal next year, Apple removes all of your apps until you pay again. The trademark you already have is separate. It helps if someone argues about the name. It does not replace the $99.
Codemagic, and whether updates are free
Codemagic is a Mac that lives on the internet. Your Windows computer cannot produce the file Apple accepts. Codemagic can. You already created the account and connected the repo. That was the right first move.
The free personal plan gives you 500 minutes every month on an M2 Mac. The minutes reset on the first day of the month. They are not a bonus that grows when you ship an update. Every build, including a failed one, spends some of those minutes. A LinkUp Room iOS build usually takes somewhere around 15 to 25 minutes, so the free plan is enough for roughly twenty builds in a month. That is plenty for normal updates.
If you go past 500 minutes, Codemagic does not stop you forever. Extra minutes are about 9.5 US cents each, and only if you have turned billing on. Leave billing off if you want a hard stop at the free minutes. Do not press Start ten times in a row while a build is failing. Fix the error, then start once.
An update later is the same button. The version number in the project is raised, you press Start on the LinkUp Room iOS workflow again, and a new build arrives in TestFlight. Same Apple membership. Same Codemagic minutes. No second $99.
1. Pay for the Apple Developer Program
Go to developer.apple.com/programs/enroll in Safari if you can. Sign in with the Apple ID you want to own the apps. Use an Apple ID whose email you will still have next year. Turn on two-factor authentication when Apple asks. That is a code sent to your iPhone or to a trusted phone number.
Apple then asks whether you are an individual or an organization.
Individual is the faster choice. Apple checks your legal name and your card. Approval is often within two days, sometimes the same day. The name shown as the seller on the App Store is your personal legal name, not “Adamantis Studios,” unless that is already your legal name. Your trademark can still be the app name LinkUp Room. Customers see the app name in large type and the seller name in smaller type.
Organization puts the company name on the store. Apple asks for a D-U-N-S number, which is a business ID from Dun & Bradstreet, and proof that you can sign for the company. This can take weeks. Choose it only if the company name on the store matters more than shipping soon.
The price is 99 US dollars for one year. Apple charges the card in dollars. Your bank may add a small foreign-exchange fee. One payment covers every app on that account.
When the membership says Active, open developer.apple.com/account and confirm you can see Certificates, Identifiers & Profiles. If you only see a “purchase” button, the membership is not active yet. Wait. Do not start the Codemagic build before this is active, because signing will fail and you will spend free minutes on a build that cannot succeed.
2. Create the app record and copy the number
Open appstoreconnect.apple.com with the same Apple ID. Choose Apps, then the plus button, then New App.
- Platforms: iOS.
- Name: LinkUp Room. If Apple says the name is taken, try LinkUp Room Ghana. The name on the store can differ from the bundle id.
- Primary language: English.
- Bundle ID: choose com.adamantisstudios.linkuproom. If it is not in the list, go to Certificates, Identifiers & Profiles, Identifiers, plus, App IDs, and register that exact text. Then come back. The list refreshes after you register it.
- SKU: type linkuproom-ios. This is only your private stock code. Users never see it.
- User access: Full Access.
After you create it, open the app, then App Information, in the left sidebar under General. There is a field called Apple ID. It is a number, often ten digits, not an email. That number is what Codemagic needs. It also appears in the page address after /apps/.
Send that number back in the chat, or open codemagic.yaml in the project and replace the 0 next to APP_STORE_APPLE_ID with the number. Leave the quotes off. It should look like APP_STORE_APPLE_ID: 1234567890. Until that zero is replaced, Codemagic can build the file but cannot hand it to TestFlight.
3. Give Codemagic a key named appstore
Codemagic is not allowed to upload on your behalf until you create a key in App Store Connect and show that key to Codemagic. The workflow in the repo already looks for a key whose name is exactly appstore.
- In App Store Connect, open Users and Access, then Integrations, then App Store Connect API.
- If Apple asks you to request access, request it and wait until it is approved. This is a one-time switch on the account.
- Generate a Team Key. Name it LinkUp Room. Access: App Manager. That role can upload builds. It cannot delete the whole account.
- Download the file that ends in .p8. Apple lets you download it once. Keep a copy somewhere safe, such as a folder you do not share.
- On the same page, copy the Issuer ID and the Key ID.
- In Codemagic, open the team or user settings, then Integrations, then App Store Connect, then Add key. The integration name must be appstore. Paste the Issuer ID and Key ID, and upload the .p8 file.
- Open the LinkUp Room app in Codemagic. Confirm it is using the file codemagic.yaml from the repo. Start the workflow named LinkUp Room iOS. Do not turn on “build on every push” yet. A push build would spend minutes before the Apple key exists.
The first successful run produces an .ipa file and, once the Apple ID number is filled in, uploads it to TestFlight. TestFlight is Apple’s private testing shelf. The app is not public until you submit it for review and Apple accepts it. Review often takes one to three days. Apple may reject it and ask for a change. That is normal for a first app. The rejection message tells us the exact line to fix, and the next upload is another Codemagic build, not another $99.
4. Firebase, and why the phone stays quiet without it
Firebase is Google’s service that carries a short alert from our server to a phone. LinkUp Room already uses it on Android, in a Firebase project named careerstudio-9c9d5. Android and iPhone are two doors into the same project. Adding the iPhone door costs nothing. You do not buy Firebase to send chat alerts. The free Spark plan is enough for this.
Think of it as a post office. Our server writes “you have a new message.” Firebase looks up the iPhone’s token and asks Apple to show the banner. Apple will not deliver that banner unless three things exist: the iOS app registered inside this Firebase project, a file called GoogleService-Info.plist inside the app, and an Apple push key uploaded to Firebase. The app still opens if the file is missing. It just never rings.
- Open console.firebase.google.com and select the project careerstudio-9c9d5. If you do not see it, you are in the wrong Google account. Try the Google account that already receives the Android alerts.
- Click the gear, then Project settings. Under Your apps, click Add app, then the iOS button.
- Apple bundle ID: com.adamantisstudios.linkuproom. App nickname: LinkUp Room. Skip the App Store ID for now if Apple has not issued the number yet. You can paste it later.
- Download GoogleService-Info.plist. Do not rename it. Send that file back in the chat, or place it in the folder ios/Runner in the project. I will wire it into the Xcode project. I cannot download it myself, because Firebase will only give it to the Google account that owns the project.
- Still in Firebase, open Project settings, then Cloud Messaging. Under Apple app configuration, upload an APNs Authentication Key. You create that key at developer.apple.com under Keys, with Apple Push Notifications service turned on. Download that .p8 as well. It is a different file from the Codemagic key. Upload the Key ID and the Team ID with it. The Team ID is on the membership page. It is ten letters and numbers.
After the plist is in the project and the APNs key is in Firebase, the next Codemagic build is the one that can ring. Older TestFlight builds will stay silent.
5. Sign in with Apple, and Sign in with Google
The login screen now has Continue with Apple beside email and password. On an iPhone it uses Apple’s own system sheet, which is what App Review expects. Apple gives us the person’s name only the first time they accept. After that Apple hides the name, so the app saves it on that first login.
The button will fail until Supabase is told to trust Apple. This is a dashboard click, not more code.
- At developer.apple.com, open Identifiers and select the App ID com.adamantisstudios.linkuproom. Turn on Sign in with Apple. Save.
- Create a Key, enable Sign in with Apple, and attach it to that App ID. Download the .p8 once. Note the Key ID.
- Open the Supabase project, Authentication, then Sign In / Providers, then Apple. Turn it on.
- Client IDs: com.adamantisstudios.linkuproom.
- Use Supabase’s secret generator. It asks for the Team ID, the Key ID, and the contents of the .p8 file. Save the provider.
Sign in with Google is already written in the app, and it is switched off on purpose. If it is shown before Google’s client IDs are saved in Supabase, every tap fails. Apple’s rule is that an app which offers Google login must also offer Apple login as an equal choice. Apple login is now the equal choice, so Google can be switched on later without a policy problem. When you want that, we add the Google iOS client ID. Do not turn the flag on before then.
Email and password keep working either way. People who do not want an Apple ID can still register with email. New accounts still have to confirm they are 18 or older.
6. The database line that makes Delete account real
The app has a Delete account button, which Apple requires. It calls a function named delete_own_account. That function is in the file supabase/phase15_ios_compliance.sql in the repo. Open the Supabase SQL editor, paste the whole file, and run it once. Until you do, the button will show an error instead of deleting the account. The same file also blocks sexual, threatening, and hateful text on the server, so a modified app cannot skip the filter.
7. What to type when you submit for review
When a build appears under TestFlight, open the app in App Store Connect and submit that build for review. Apple’s reviewer needs a working login. Create a normal member account in the app, confirm you can see the home screen with it, and type that email and password into App Review Information. Do not give them your admin account.
In the notes box, paste this:
LinkUp Room is a free app for professional networking and for ordering human writing services (CVs, cover letters, career coaching) from our team in Ghana. Payment, when a service is ordered, is for that real-world service performed by people outside the app and is taken by Paystack in the browser. No digital content or app feature is sold. Sign in with the demo account below. Account deletion is under Account, Delete account.
Also fill in the privacy policy URL https://linkuproom.com/privacy, a support URL, and the support email [email protected]. Age rating: 17+, because the app has chat and members must be 18. Encryption question: yes, the app uses standard secure connections, and it qualifies for the exemption. That matches the setting already in the project.
The order to do this in
Pay Apple and wait until the membership is active. Create the app record and send the numeric Apple ID. Create the App Store Connect key and name the Codemagic integration appstore. Run the SQL file. Add the iOS app in Firebase and send the plist, plus the push key. Then press Start once in Codemagic. When TestFlight shows the build, install it on your own iPhone first and try Apple login, a chat alert, and Delete account on a throwaway user. After those three work, submit for review.
If a screen does not match these words, stop and send a photo of the screen. Apple moves buttons around. Guessing on a paid account wastes the free Codemagic minutes.