One .p8 for iOS + macOS?
I lost my .p8 file
Apple Distribution vs iPhone Distribution?
TestFlight processing time?
App Store review time?
Multiple teams on one Apple ID?
Why the first manual upload?
I lost my keystore
AAB vs APK?
Share a keystore across apps?
Play review time?
Skip tracks and jump to production?
App Store (iOS + macOS)
Do I need a paid Apple Developer account? #
Yes. A free Apple ID lets you build and run on your own Mac, but App Store Connect refuses uploads until your account is enrolled in the Apple Developer Program ($99/year). LingCode's preflight catches this — but you'll feel it the moment you try to generate a Distribution certificate, which requires enrollment.
Can I use the same .p8 file for both iOS and macOS? #
Yes. The .p8 is an App Store Connect API key; it's not platform-specific. LingCode picks --type macos or --type ios automatically from the scheme's SUPPORTED_PLATFORMS, so the same key authenticates uploads for both.
What happens if I lose my .p8 file? #
Revoke the key at appstoreconnect.apple.com/access/api and generate a new one. The .p8 is downloadable only once at creation — Apple doesn't keep a copy on their side. Any machine using the lost key stops working; replace with the new one and you're back.
What's the difference between "Apple Distribution" and "iPhone Distribution"? #
Apple Distribution is the modern unified cert — works for iOS, macOS, tvOS, and watchOS. iPhone Distribution and Mac App Distribution are older platform-specific variants still valid for legacy projects. LingCode's preflight accepts any of them.
Why does TestFlight processing take so long? #
Apple runs server-side validation, extracts metadata, symbolicates crash info, and scans for private API usage before the build becomes distributable. Typical time is 5–30 minutes, but it can stretch to an hour during peak windows. This happens entirely on Apple's side — nothing LingCode does (or doesn't do) changes it.
How long does App Store review take? #
First submissions for a new app average 24–48 hours. Subsequent updates are usually faster (6–24 hours). Apple publishes current review times at developer.apple.com/app-store/review. Independent of TestFlight processing — review is a separate, human-run step.
I'm on multiple Apple teams. Which one should I use? #
The team that owns the App Store Connect app record for this specific app. The Team ID, the signing cert, and the app record must all match — a cert for Team A signing a build for Team B's app record fails at export time. Double-check which team owns the app before copying the Team ID.
Google Play
Is the $25 Google Play signup really required? #
Yes, one-time. Without an active Play Console account you cannot create apps, upload builds, or generate service accounts. No workarounds.
Why can't my service account upload the first build? #
Google's anti-fraud model requires a human-originated upload to establish trust for a new package name. Until that first upload, the API silently accepts requests but never processes them. Build a signed AAB locally, drag it into Play Console → Internal testing → Create new release, once. After that, service-account uploads work normally.
What happens if I lose my Android keystore? #
If you opted into Play App Signing (Google holds the release key for you), you can request an upload-key reset in Play Console → Setup → App signing. Google reviews these manually — usually within a few days. If you didn't opt into Play App Signing, you cannot update the app under the same package name; you'd have to ship a new one. This is why every keystore guide screams about backing up to two places.
What's the difference between AAB and APK? #
An APK is a single file containing every resource for every device — ships as-is to users. An AAB is a modular bundle; Google Play slices it server-side and delivers a device-specific APK at install time, dramatically shrinking download size. Google required AAB for new apps from August 2021. LingCode produces AABs via ./gradlew bundleRelease.
Can I share one keystore across multiple apps? #
Technically yes — one .keystore file can hold multiple aliases, each for a different app. In practice, most teams use one keystore per app to keep blast radius narrow: a leaked keystore only compromises one app's ability to ship updates.
How long does Google Play review take? #
Internal testing: no review, instant. Closed/open testing or production for a first release: usually <24 hours, but Google has shifted to up to 7 days for new apps in recent years. Subsequent updates to production apps that pass automated checks often go live in 2–3 hours.
Can I skip tracks and jump straight to production? #
Yes — you can upload directly to production, or promote a build from any track to any other. Good practice: start on internal, verify it runs, then promote. That's what Magic Deploy defaults to. Nothing stops you from picking production on day one.
Web platforms
Which web platform should I use? #
Depends what you're shipping. Next.js / React / Vue static sites: Vercel or Netlify (generous free tiers, excellent framework detection). Long-running Node/Python/Go servers with a database: Railway or Fly.io. Rails, multi-process Node apps, or Python workers with cron: Heroku. If in doubt, try Vercel — cheapest to set up, and you can migrate later.
Can I get preview deploys per branch? #
Yes, depending on the platform. Vercel and Netlify generate preview URLs for every branch out of the box (when git-integrated). Railway and Fly.io support per-environment deploys but require explicit config. Heroku has review apps via GitHub integration. LingCode always deploys the currently-checked-out code; preview-per-branch is a platform feature, not a LingCode feature.
How do I set env vars my app reads at runtime? #
Through the platform's dashboard, not LingCode. LingCode passes tokens to the CLI at deploy time — those aren't visible to your running app. Use: Vercel → Project → Settings → Environment Variables; Netlify → Site settings → Environment; Railway → Project → Variables; Fly.io → fly secrets set; Heroku → heroku config:set.
Do these platforms have free tiers? #
Vercel and Netlify: generous free tiers with bandwidth limits. Railway: $5/mo in free credits — exhausts fast. Fly.io: "free allowance" of small shared-cpu machines (~3 VMs). Heroku: no free tier since Nov 2022 — eco dynos are $5/mo. Check current pricing on each dashboard.
How do I add a custom domain? #
Through the platform's dashboard, not LingCode. Each platform's docs cover the DNS records you need (usually a CNAME or ALIAS). Once the domain is live on the platform, LingCode's next deploy goes there automatically.
How do I roll back a deploy? #
Use the platform's dashboard, not LingCode. Vercel, Netlify, Railway, and Heroku all have a "Deployments" or "Releases" list with a one-click rollback button. For Fly.io: fly deploy --image <old-image-tag>. LingCode deploys forward; rollback is a dashboard operation.
LingCode-specific
Where does LingCode store my credentials? #
In macOS UserDefaults on your Mac, scoped to the LingCode app. Nothing is uploaded to any LingCode server — credentials go directly from your Mac to Apple's / Google's / the platform's servers at deploy time. A hardening pass to move secrets into the Keychain is on the roadmap.
Can I deploy automatically on git push? #
Not from LingCode directly. LingCode is a desktop IDE, so deploys are human-triggered from the Magic Deploy button. For push-triggered deploys, use the platform's native git integration (Vercel, Netlify, Railway, and Heroku all support it) or a CI pipeline.
Does LingCode work with CI / GitHub Actions? #
LingCode doesn't run in CI itself (it's a Mac desktop app). But every deploy target LingCode uses is just a CLI invocation — the exact commands are in Magic Deploy's progress log. Copy them into a GitHub Action or your CI of choice and you get the same flow, minus the live UI.
My deploy failed mid-way. Is my app in a weird state? #
Usually no. For App Store: if the archive or export fails, nothing was uploaded — safe. If upload fails, nothing's visible in App Store Connect either. For Play: if gradle succeeds but upload or commit fails, you might have an uncommitted edit in Play Console — open the app's release dashboard and discard it manually, then retry. For web platforms: each platform has its own rollback/retry behavior; the previous deploy stays live until the new one fully succeeds.
Can one project deploy to multiple targets? #
Yes. LingCode persists Magic Deploy config per project, and you can reconfigure and re-run the Deploy button as many times as you want — to Vercel for the web frontend, to App Store for the iOS app, to Google Play for the Android sibling. The in-app settings are independent for each target.
Can I deploy offline? #
No. Every deploy target involves uploading something to a remote service (Apple, Google, Vercel, etc.), which obviously needs internet. The build step (archive, bundleRelease, npm run build) runs locally and works offline; only the upload fails without a connection.
Didn't find your question?
Open an issue or ask in the Support page. If it's a concept you want explained in more depth, see the deep-dive posts or the glossary.