◉RORK LABJP
●GPT-6.1 SOL — Added to Rork's model menu (09-29) with Low, Medium and High effort; included on Pro and Max●SONNET 5.5 — Claude Sonnet 5.5 is selectable: strong at UI design and faster than Sonnet 5 (09-28)●SDK 58 — Beta since 09/15 with no stable date yet; running projects in Expo Go has required login since 09/03●WIDGET — A write-up traces an iOS widget that renders black only in production builds●OBSERVE — EAS Observe now records native crashes too (SDK 57.0.21 or later, 10/07)●NEW — My App Open Ad Only Showed When the App…●GPT-6.1 SOL — Added to Rork's model menu (09-29) with Low, Medium and High effort; included on Pro and Max●SONNET 5.5 — Claude Sonnet 5.5 is selectable: strong at UI design and faster than Sonnet 5 (09-28)●SDK 58 — Beta since 09/15 with no stable date yet; running projects in Expo Go has required login since 09/03●WIDGET — A write-up traces an iOS widget that renders black only in production builds●OBSERVE — EAS Observe now records native crashes too (SDK 57.0.21 or later, 10/07)●NEW — My App Open Ad Only Showed When the App…
Articles/Dev Tools
⬡ Dev Tools/2026-04-09Intermediate

Rork Max EAS Build and App Store Submission Errors: Complete Troubleshooting Guide

Solve every error blocking your Rork Max app from reaching the App Store—code signing failures, expired certificates, ITMS upload errors, and App Store review rejections—with step-by-step fixes and commands.

Rork Max236EAS Build22certificatesApp Store91code signingtroubleshooting69provisioning

You've built a polished app in Rork Max—and now you're blocked by a code signing error, an ITMS validation failure, or an App Store review rejection. These are the most technically demanding parts of the app publishing process, and they have a reputation for being opaque.

EAS Build Code Signing Errors

Error Category 1: Certificate Issues

Symptom: Error: No matching signing credentials found for com.yourapp.bundleid

Your Apple Distribution Certificate isn't configured in EAS Credentials.

Resolution

Check your current credential state:

eas credentials
# Or view at: https://expo.dev/accounts/[username]/projects/[slug]/credentials

If no certificate exists, let EAS manage it automatically—this is the simplest path:

// eas.json
{
  "build": {
    "production": {
      "ios": {
        "credentialsSource": "remote"
      }
    }
  }
}

Then regenerate:

eas credentials --platform ios
# Select "Remove credentials" → then "Set up credentials"

Symptom: Certificate has expired or is not yet valid

Apple Distribution Certificates are valid for one year. This error means yours has expired.

eas credentials --platform ios
# Navigate to "Distribution Certificate" → "Generate new certificate"

You may also need to delete the expired certificate from the Apple Developer Console first to avoid conflicts.

Error Category 2: Provisioning Profile Issues

Symptom: Provisioning profile doesn't match the bundle identifier

The app's Bundle Identifier in app.json doesn't match the profile.

# Verify in app.json
# ios.bundleIdentifier must exactly match what's in Apple Developer Console
 
# Regenerate the provisioning profile
eas credentials --platform ios
# → "Provisioning Profile" → "Create a new provisioning profile"

Symptom: Device is not included in the provisioning profile (development builds only)

The test device's UDID isn't registered in the provisioning profile.

# Register the device
eas device:create
 
# Sync devices into provisioning profile
eas credentials --platform ios
# → "Provisioning Profile" → "Sync devices from Apple portal"

Error Category 3: App Store Connect API Key

EAS needs an App Store Connect API key to automatically upload builds. Without it, you'll get authentication errors during the submit step.

Set up the API key

1. Go to https://appstoreconnect.apple.com/access/api
2. Click "+" to create a new key
3. Name: "EAS Build" (or similar), Role: "App Manager"
4. Download the .p8 file — this can only be downloaded once
5. Copy the Key ID and Issuer ID
eas credentials --platform ios
# → "App Store Connect API Key" → "Add an API key"
# Enter: path to .p8 file, Key ID, Issuer ID

App Store Connect Submission (ITMS) Errors

After a successful EAS Build, the upload to App Store Connect can still fail with ITMS errors.

Common ITMS Errors

ITMS-90725: Minimum SDK version not met

App Store's current minimum deployment target requirement isn't satisfied.

// app.json — update to current Apple requirement
{
  "expo": {
    "ios": {
      "deploymentTarget": "16.0"
    }
  }
}

ITMS-90426: Invalid code signing entitlements

The entitlements in your binary don't match what's configured in your App ID.

Open the Apple Developer Console, find your App ID, and verify that every capability your app uses (Push Notifications, In-App Purchases, Sign in with Apple, etc.) is enabled there. Mismatches cause this error.

ITMS-90161: Swift version too old

The build toolchain is outdated. Update your EAS build image:

// eas.json
{
  "build": {
    "production": {
      "ios": {
        "image": "latest"
      }
    }
  }
}

App Store Review Rejections

A successful upload doesn't guarantee approval. Here are the most common rejection categories and what to do about each.

Guideline 4.x: Design and Functionality Rejections

4.2 / 4.3: Minimum Functionality

Apple considers the app to have insufficient unique value or functionality. Apps built with Rork Max that are very simple or closely mirror an existing website are at risk.

The most effective response is to incorporate at least one meaningful native capability—push notifications, camera access, location services, or on-device processing. Update the App Review notes to clearly articulate the app's unique value and use case.

Crash During Review

An immediate rejection. Any crash during the review process results in a 4.2 rejection. Test thoroughly on a physical device before submitting. Use the distribution build (not the development build) for final testing.

Guideline 5.x: Legal and Content Rejections

5.1.1: Privacy Policy Missing or Inaccessible

Any app that collects user data—including analytics, advertising, or even crash reporting—requires a privacy policy URL. This must be a live, accessible URL, not a placeholder.

5.1.2: Vague Permission Descriptions

Usage description strings in Info.plist must specifically explain why the app needs the permission.

// app.json — specific, honest permission descriptions
{
  "expo": {
    "ios": {
      "infoPlist": {
        "NSCameraUsageDescription": "Used to take and upload your profile photo",
        "NSLocationWhenInUseUsageDescription": "Used to show nearby locations relevant to your search"
      }
    }
  }
}

Descriptions like "required for app functionality" are no longer accepted.

Pre-Submission Checklist

Run through these before every production submission.

Technical validation Test on a physical iPhone and iPad. Zero crashes across all screens. All network requests succeed or fail gracefully. App functions without an internet connection where expected.

Content review Privacy policy URL is live and accurate. App description matches actual functionality. Screenshots reflect the current UI (not old designs). Age rating is appropriate for the content.

App Store Connect configuration Category is accurate (affects discoverability). Pricing and regional availability are set correctly. Promotional text and what's new section are complete.

Responding to Rejections

When a rejection arrives, find the specific guideline number in the Resolution Center notification in App Store Connect. This tells you exactly what needs to change.

Address the issue and explain your fix in the Resolution Center before resubmitting. If the rejection reason is unclear, you can ask for clarification directly through the Resolution Center—Apple's review team does respond.

For Guideline 4.x rejections, a phone call through the Apple Developer Program support line often resolves ambiguity faster than message-based back-and-forth.

Looking back

App Store publishing failures with Rork Max fall into three phases: EAS Build code signing, App Store Connect upload validation, and App Store review.

Code signing errors are almost always credential configuration problems—regenerating certificates and provisioning profiles through eas credentials resolves most of them. ITMS upload errors come from mismatches between your build settings and Apple's current requirements—update deploymentTarget, build images, and entitlements to match. Review rejections require reading the specific guideline cited, making a targeted fix, and communicating clearly what you changed.

When you're stuck, paste the exact error message into Rork and ask what it means and how to fix it. The combination of this guide and Rork's AI response gets most issues resolved without needing external help.

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 →

If you found this article helpful, a small tip ($1.50) would mean a lot to us. Your support helps keep this site ad-free and covers server and hosting costs.

Related Articles

⬡ Dev Tools2026-08-20
A beta-SDK build can reach TestFlight, but it can't reach review
Builds made with a beta Xcode can be distributed through TestFlight, but they cannot be submitted for App Store review. Here is how to check which SDK produced your build, and how to protect your release profile in eas.json.
⬡ Dev Tools2026-08-18
Version code 1 has already been used — who owns that number, app.json or EAS?
When a Play upload stops on versionCode, check where the number actually lives before bumping it. A one-command way to tell whether app.json, EAS, or build.gradle wins.
⬡ Dev Tools2026-05-15
Rork Max Android App Crashes Only on Older OS Versions: Java 8 Desugaring Fix
Diagnose why your Rork Max Android app crashes only on older OS versions (Android 6–8) and fix it permanently with Java 8 core library desugaring. Includes the two cases where the fix alone was not enough.