DEV Community

Cover image for I Promised an iOS App. Kiro CLI and Xcode MCP Built It in Hours.
Vivek V. Subscriber for AWS Heroes

Posted on • Originally published at Medium

I Promised an iOS App. Kiro CLI and Xcode MCP Built It in Hours.

Recap

In my previous blog post, I shared a weekend vibe coding project. An AI-powered Costco Receipt Scanner and Price Match Agent. Completely serverless with Amazon Bedrock AgentCore. Nova AI parsing receipts. CDK deploying everything. Weekly email reports with price adjustment opportunities.

My post on LinkedIn got more traction than anything I’d ever shared. More views than all my previous posts combined, which says more about my previous posts than this one. The blog was also featured in DEV’s Top 7 posts of the week, along with a Top-7 badge which got automatically added to my dev.to profile.

I also promised a native iOS app for the frontend. This is that follow-up. But the story took a turn I didn't expect.

10 Years Apart

In 2016, I built my first iOS app as a side project while learning Swift, which had recently debuted as Apple’s programming language for iOS. I outsourced a complex functionality to a developer for around $500. The whole development cycle took months but that is how I learn something new by building it myself. Getting the iOS app approved by Apple was its own ordeal if you know what I mean.

In February 2026, Apple released Xcode 26.3 with MCP support. I pointed Kiro CLI (using latest Claude Opus 4.6 model) at Xcode through the MCP bridge and built the entire iOS app in hours.

Not a toy. Not a single-screen demo. A full four-tab app with receipt scanning, deal tracking, AI-powered price match analysis with streaming responses, and a settings screen with BYOI configuration.

The Xcode MCP Bridge

Apple's official documentation explains how to give agentic coding tools access to Xcode. The Kiro (IDE + CLI) setup is just three lines in your MCP config:

"mcpServers": {
  "xcode-tools": {
    "command": "xcrun",
    "args": ["mcpbridge"]
  }
}
Enter fullscreen mode Exit fullscreen mode

Prerequisites: Xcode 26.3 or later. That's it.

The bridge exposes about 20 MCP tools to the AI agent. BuildProject runs incremental builds in 0.9 seconds. XcodeRead, XcodeWrite, and XcodeUpdate handle file operations directly in the project structure. XcodeGrep searches code. GetBuildLog surfaces compiler errors. RenderPreview shows SwiftUI previews. RunSomeTests executes test suites.

The development loop changes completely. I describe what I want in natural language. The agent writes Swift code, triggers a build through MCP, reads the compiler errors, fixes them, rebuilds. The whole cycle takes seconds.

Here's the actual prompt that kicked it off:

Build me an iOS app using Amplify SDK for Swift, leverage all the backend APIs we already have. Use the Xcode MCP tools. Make it professional and state of the art. I want to publish it, but I don't want to use my AWS infra. Let the user put their API endpoint into Settings, and everything gets picked up from there. That way whoever deploys the stack can use the app from their own infra. I don't worry about scaling or charging them for tokens by being just an Uber or Airbnb of this thing.

That's it. That was the prompt. Kiro CLI took it from there with a few iterations and refinements to polish it up.

Same Backend, New Frontend

The original post described the full serverless backend: Lambda running FastAPI, API Gateway with JWT auth, DynamoDB for receipts and deals, S3 for PDF storage, Bedrock for Nova AI parsing and analysis, AgentCore Runtime for the weekly agent, EventBridge Scheduler firing every Friday at 9pm, SES for email reports.

All of that stays exactly the same. The iOS app just connects to the existing API Gateway endpoint. Same Cognito auth. Same routes. Same everything.

I originally planned to use Amplify Library for Swift. I tried it. Build times jumped to 18 seconds. The SDK pulled in a lot of dependencies I didn't need for this use case.

So I ripped it out. Zero third-party packages. Pure URLSession for API calls. Direct Cognito REST API calls for authentication using USER_PASSWORD_AUTH flow. Build time dropped to 0.9 seconds.

BYOI: Bring Your Own Infrastructure

This is the part that changed my thinking about app distribution.

CostScanner is not a SaaS. I don't host anything for users. I don't run servers. I don't store anyone's data. Note: I had to change the name with no Costco word in it due to obvious trademark and app publising reasons.

Users deploy their own AWS CDK stack. Three stacks: one for DynamoDB tables and S3 bucket, one for Lambda and API Gateway and Cognito, one for the weekly AgentCore agent. One cdk deploy command.

cd infra && npm install
NOTIFY_EMAIL=you@example.com ./deploy.sh
Enter fullscreen mode Exit fullscreen mode

Then they paste their API Gateway URL into the app's Settings screen. The app calls a /api/config endpoint, fetches the Cognito pool details and credentials from Secrets Manager, signs in programmatically, and starts working.

No sign-in screen. No account/user creation flow. No "forgot password" emails. The infrastructure IS the account/user. I would love to see a "sign-in with AWS" or "Builder ID" API from Amazon for the login flows!

The privacy policy literally says "we collect nothing." Because we don't. Every receipt, every deal, every AI analysis result lives in the user's own AWS account. They can cdk destroy and everything disappears.

Here's what this means for scaling: nothing. I don't worry about it. Unlike Airbnb or Uber, I don't provision capacity for peak load. I don't manage database connections. I don't handle multi-tenant data isolation. Each user's infrastructure scales independently through AWS serverless services. If one user uploads 500 receipts, that's their Tokens, Lambda and their DynamoDB handling it.

The Numbers

  • 15 Swift files
  • 0 third-party dependencies
  • 0.9 second incremental builds
  • 3 CDK stacks
  • Under $1 per month AWS cost per user
  • Bedrock Nova tokens: $0.10-0.20 per week
  • Lambda, DynamoDB, API Gateway, S3: free tier for personal use

What I Learned

The original backend and web app were built in hours with Kiro CLI. The iOS frontend? Even faster, thanks to the MCP bridge. The difference isn't just speed. It's the feedback loop.

With the MCP bridge, the AI agent doesn't just write code. It builds it, reads the errors, and fixes them. I'm not copying compiler output into a chat window. The agent sees what Xcode sees. It knows when the build succeeds. It knows when a type doesn't conform to a protocol. It fixes it and moves on.

The BYOI model is something I want to explore more. For personal tools and utilities, the SaaS model adds complexity that nobody asked for. User management, billing, support, scaling, compliance. BYOI sidesteps all of it. The user owns their stack. You ship the app and the CDK templates. Done.

Ten years between my first iOS app and this one. Back then I paid $500 to outsource functionality and spent months shipping it. This time I used Kiro Pro at $20/month, connected through IAM Identity Center (IdC) login to seamlessly use my AWS credits (thanks to the AWS Heroes program). The whole iOS app was done in hours.

In ten years, almost everything about building software feels completely different. The tools have evolved. The cost of building has significantly dropped. Even how software reaches users feels different now.

But the hot dog combo is still $1.50 and the rotisserie chicken is still $7.99 (in Canada). Now I scan my receipt before I leave the Costco parking lot!

❤️ Built with Kiro CLI, Amazon Bedrock, AWS CDK, and Apple's Xcode MCP bridge.

🔗 Full source code: github.com/awsdataarchitect/costco-price-match

📱 Download CostScanner: App Store

What are you going to build with Kiro CLI and Xcode MCP bridge ? Let me know in the comments.

Top comments (0)