RORK LABJP
MAX — Rork Max generates native Swift for iPhone, iPad, Apple Watch, Apple TV, and Vision Pro, with 2-click App Store publishing and no Xcode requiredSTACK — Standard Rork builds cross-platform mobile apps with React Native (Expo); choosing between the two by use case is the key decisionFOCUS — Unlike web-first tools such as Bolt or Lovable, Rork specializes in native iOS and Android app generationBUGS — A hands-on review reports Rork resolved about 70% of bugs without manual help, with the remaining 30% needing edits in the exported codebaseFUNDING — Rork raised $2.8M from a16z (Andreessen Horowitz)PRICING — It is free to start, with paid plans from $25/month, so you can try before committingMAX — Rork Max generates native Swift for iPhone, iPad, Apple Watch, Apple TV, and Vision Pro, with 2-click App Store publishing and no Xcode requiredSTACK — Standard Rork builds cross-platform mobile apps with React Native (Expo); choosing between the two by use case is the key decisionFOCUS — Unlike web-first tools such as Bolt or Lovable, Rork specializes in native iOS and Android app generationBUGS — A hands-on review reports Rork resolved about 70% of bugs without manual help, with the remaining 30% needing edits in the exported codebaseFUNDING — Rork raised $2.8M from a16z (Andreessen Horowitz)PRICING — It is free to start, with paid plans from $25/month, so you can try before committing
Articles/Business
Business/2026-06-15Advanced

Managing Store Metadata as Code with the App Store Connect API — Turning Manual Edits into a Monthly System

As the apps you ship with Rork pile up, the time spent hand-editing store descriptions and prices stops being negligible. This walks through managing metadata as code with the App Store Connect API and rolling it out across a dozen apps, including the authentication pitfalls.

App Store Connect9API4Operations3Automation7App Business

Premium Article

Back when I was running about ten apps in parallel, I once burned half a day adding a seasonal campaign line to every app's description. Open App Store Connect, pick the app, switch between each language tab, add a sentence at a fixed spot in the description, save. Repeat for every language, for every app. It is not just tedious; a missed paste or a typo always slips in somewhere.

Once a generative tool like Rork lets you mass-produce apps, this "post-launch operation" becomes the bottleneck. Building got fast, but growing them stayed manual. Here I share a design that manages store metadata as code with the App Store Connect API, turning manual edits into a monthly system.

The boundary where manual edits break down

For two or three apps, by hand is fine. The problem is that as the count grows, the work scales as the product of app count and language count. Run five apps in two languages and one wording change means ten edits.

In my experience, past five apps the manual route stops being worth it. And not only on time. Manual work breeds mistakes, and mistakes become review rejections or broken layouts that steal even more time in the end. So systematizing this is less an efficiency play than an investment in accident prevention.

The first wall of the App Store Connect API is authentication

Almost everyone trips on auth first. The App Store Connect API authenticates with a JWT (JSON Web Token), and the way you build that JWT has fine rules; miss one and you get a 401 with no clue why.

Three points to nail. The token expiry is at most 20 minutes, and a longer value is rejected instantly. The aud (audience) is fixed to appstoreconnect-v1. And swap the issuer ID and key ID and it will not pass.

import jwt from "jsonwebtoken";
import fs from "node:fs";
 
// Issue the .p8 private key under "Users and Access > Keys" in App Store Connect
const privateKey = fs.readFileSync(process.env.ASC_KEY_PATH, "utf8");
 
export function makeToken() {
  const now = Math.floor(Date.now() / 1000);
  return jwt.sign(
    {
      iss: process.env.ASC_ISSUER_ID,   // Issuer ID (the team-wide UUID)
      iat: now,
      exp: now + 19 * 60,               // 19 minutes, margin under the 20-min cap
      aud: "appstoreconnect-v1",
    },
    privateKey,
    {
      algorithm: "ES256",              // Not RS256. Must be ES256
      header: { kid: process.env.ASC_KEY_ID, typ: "JWT" },
    }
  );
}

I set exp to 19 minutes to avoid the accident of crossing 20 minutes in the slim gap between generation and the request landing. I myself set it to exactly 20 and spent half a day on intermittent 401s that appeared only on slow-network days. Forgetting to set the algorithm to ES256 is another classic pitfall. The .p8 key is an elliptic-curve key, so specifying RS256 fails at the signing stage.

Thank you for reading this far.

Continue Reading

What follows includes implementation code, benchmarks, and practical content we hope you'll find useful. This site runs without ads — server and development costs are supported entirely by members like you. If it's been helpful, we'd be truly grateful for your support.

WHAT YOU'LL LEARN
The expiry and scope pitfalls of App Store Connect API JWT auth that trip nearly everyone, with the code that avoids them
A minimal-script design that holds descriptions, keywords, and prices in one JSON source and pushes only the diff to a dozen apps
Criteria for staged rollout and pre-production verification so a bulk push does not break every app at once
Secure payment via Stripe · Cancel anytime

Unlock This Article

Get full access to the rest of this article. Buy once, read anytime. This site is ad-free — your support goes directly toward keeping it running.

or
Unlock all articles with Membership →
Share

Thank You for Reading

Rork Lab is ad-free, supported entirely by members like you. We publish practical guides daily with implementation code, benchmarks, and production-ready patterns. If you've found it useful, we'd love to have you on board.

  • Copy-paste ready implementation code
  • New advanced guides published daily
  • $5/mo or $10 for lifetime access
View Membership →

Related Articles

Business2026-06-13
Getting to the Real Revenue Number — A Pipeline that Reconciles AdMob, App Store, Google Play, and Stripe
Dashboard revenue and the money that actually lands in your account do not match. Here is an aggregation pipeline that absorbs currency, timezone, and the gap between estimated and finalized figures across four revenue sources — with the implementation and operating judgment from running six apps.
Business2026-05-22
Three Months of Letting Claude in Chrome Help with App Store Review Replies
For most of my twelve years as an indie developer, App Store and Google Play review replies kept slipping to the bottom of the list. I spent three months letting Claude in Chrome help with the drafting, and the way I face one-star reviews changed in ways I didn't expect.
Business2026-04-24
Maximizing Rork-Built App Revenue with App Store Connect's 100+ Metrics
A practical analytics workflow that narrows App Store Connect's 100+ metrics down to twelve revenue-critical signals, diagnoses funnel weaknesses, and pairs targeted Rork Max changes with Product Page Optimization A/B tests to grow ARPU, LTV, and retention.
📚RECOMMENDED BOOKS
Build a Large Language Model (From Scratch)
Sebastian Raschka
LLM Dev
Prompt Engineering for LLMs
Berryman & Ziegler
Prompting
AI Engineering
Chip Huyen
AI Eng
* Contains affiliate links
See all →