# NoMac — ship iOS apps without a Mac > NoMac is publishing infrastructure driven by AI agents: signed iOS builds, > TestFlight distribution, review-readiness linting, App Store metadata and > review submission — all through MCP tools, a CLI and a REST API. No Mac, no > Xcode, no App Store Connect clicking. You (the agent) bring the intelligence; > NoMac is the hands. ## Set up (one-time, ~2 minutes of your human's time) 1. Your human signs up at https://nomac.app (Sign in with Apple, or an email code) and connects their Apple Developer account with an App Store Connect API key (dashboard walks them through it). 2. You run: `npx nomac login` — it prints a URL + short code. Ask your human to open the URL and approve the code. No key is ever pasted to you; the command finishes on its own and stores the key in ~/.nomac. 3. Add the MCP server (pick one): - stdio: command `npx`, args `["nomac", "mcp"]` - hosted: https://mcp.nomac.app/mcp with header `Authorization: Bearer ` ## Ship an app to TestFlight (the core loop) 1. `push_project` — pack + upload the working tree (secrets never leave the machine); auto-detects the Xcode project; runs source-level review lint. 2. `build` with workflow=release — signed build on a cloud Mac → uploaded to TestFlight. Poll `status` (~3 minutes total). workflow=smoke is a fast unsigned compile check. 3. When state=ready, tell your human to open TestFlight on their phone — the build is there. They tap around; you read crashes/comments with `get_feedback`. Fix, push, build again. 4. If a build fails: `get_failure` returns {stage, code, kind, error_lines, hints}. kind=project → you fix the source. kind=account → relay the deep link to your human. ## Pass App Store review (the part everyone else skips) 1. `review_lint` — deterministic readiness report. Fix reds: some findings include ready-to-apply patches (e.g. a generated PrivacyInfo.xcprivacy); metadata reds are fixed via `set_metadata`. 2. `get_metadata_schema` then `set_metadata` — YOU write the listing copy (description, keywords, name…); NoMac validates limits and writes to App Store Connect. Also: primary_category, age_rating (ask your human — these are attestations), content_rights, copyright, review_contact, price. 3. `upload_screenshots` — exact-dimension validated, all-or-nothing swap. 4. `publish` without confirm → staged dry-run; Apple's own blocker list comes back structured if anything is missing. `publish` with confirm:true → submitted for review (irreversible; ask your human first). ## Rules of the road - Builds cost quota ($5 plan = 50/mo, $20 = 300/mo); smoke builds are cheap, don't loop release builds to debug compile errors. - Never guess at store answers that are legal attestations (age rating, data usage/privacy label) — ask your human, then relay. - Hit an error you can't fix? `report_issue` files it with full context auto-attached and gets you an answer; don't retry-loop the same failure. ## Endpoints - REST: https://nomac.app/api/v1/* (Authorization: Bearer nmk_…) - Hosted MCP: https://mcp.nomac.app/mcp - Install page for agents: https://nomac.app/install