Using ChatGPT to Setup Cursor and Apple XCode for Vibing a Native iOS Prototype

I’ve been following the vibe coding threads online, but until now, I’ve only been dabbling here and there. This was my first serious experiment at vibe coding. It’s a multipart experiment with this first part focusing on using ChatGPT to assist in the the setup of Cursor (and XCode).
Vibe Coding
Cursor IDE
Native iOS App

Experiment goals

I’ve been feeling overwhelmed by all the new developments lately—exciting, yet intimidating. Keeping up can sometimes feel impossible. To ease my anxiety, I finally set aside some time to dive in. Initially, I wrote down everything I hoped to achieve with this experiment, but that quickly became overwhelming. Once I realized this first attempt didn’t require custom design kits or tokens, everything fell into place. Leveraging open-source kits and trusted components meant I could focus entirely on building a solid workflow. Since I knew I wanted this to be an iOS application, here’s where I landed…
➤ Leverage ChatGPT as a guide to conduct my first vibe coding experiment
➤ Learn my way around Cursor (Pro)
➤ Setup a new Cursor project and learn about the good practice principles for doing so
➤ Generate an iOS view within the new project
➤ Preview the generated iOS view in XCode

Tools and prerequisites

Since this experiment focused on setting up a workflow it’s important to mention the list of tools I started with and their purpose which included:
➤ ChatGPT (my guide through the process)
➤ Cursor (vibe coding IDE)
➤ Claude 4 Sonnet (code agent)
➤ Apple XCode (for previewing Claude code)
➤ Supabase (backend data repo and user authentication)
➤ GitHub (version control)

Getting started

I’d used coding IDEs before and was already somewhat familiar with Cursor going into this experiment. But since the goal was to learn something new, it would’ve been a missed opportunity not to treat ChatGPT like an engineering expert sitting beside me—ready to field questions as they came up. So I threw some basic questions at ChatGPT to get a conversation started. Here’s how some of that conversation unfolded:
➤ I asked ChatGPT…
On my local drive, i have a directory structure consisting of the following:
Projects Root
--> Code Project 1
--> Code Project 2
--> Code Project 3

I want to use Cursor to vibe code. I'm new to Cursor. Each code project listed above will use its own codebase. the projects folders are not related to each other.

If I want to work on Code Project 2, which folder should I open in Cursor? Which folder is considered the "Workspace" 
Some of ChatGPT’s responses to my basic questions were a little confusing and contradictory, but after a mild volley, we sorted it all out.

Informing Cursor of my goals

I have been reading about Rules and Model specifications a lot lately. The information I’ve seen on various social media threads give these artifacts merit so I wanted to dig into their value-add potential further with ChatGPT. I baked my desire to establish project-level rules and specs into a ChatGPT Goals prompt.
➤ I asked ChatGPT…
I've opened a project root folder in Cursor titled "PURE-EXPERIMENTAL-VIBE". it does not contain any files or folders. I am using a paid version of Cursor so I have access to a variety of coding agents and models.

##Goals
I want to use AI to build and design a native application using the Apple iOS design system
I want to adhere to Apple's Human Interface Guidelines and best practices
I want to establish rules and model specifications to ensure the engineering model I'm using has guard rails to build the code I request

What are the first steps I should take to achieving the goals outlined?
➤ ChatGPT response…
Step 1: Define the Project Foundation
Inside PURE-EXPERIMENTAL-VIBE, create:

- README.md
Project overview for developers and AI tools; links all other docs

- PROJECT_OVERVIEW.md
Describes the app’s goals, platform targets, architecture, and design assumptions

- API_INTEGRATION.md
Explains how real (Supabase) and simulated (Bluetooth, QR, mock data) systems are used

- SUPABASE_INTEGRATION_GUIDE.md
Technical guide for integrating Supabase (auth, data, storage, view models)

- HIG_REFERENCE.md
Your interpretation of Apple’s Human Interface Guidelines for layout, navigation, and interaction

- GLASS_EFFECT_IMPLEMENTATION.md
Defines your reusable glass effects system and how/when to apply each one

- SEMANTIC_COLOR_MIGRATION_SUMMARY.md
A log of how you transitioned from custom colors to Apple’s semantic system

- DESIGN_SYSTEM.md
Enforces layout, spacing, color, materials, responsiveness, and accessibility for UI components
ChatGPT went on to suggest instructions for all of the .md files. Here’s what was suggested for the READ_ME.md file…
# PlayingAround – iOS Native App

**PlayingAround** is a native iOS app built with Swift and SwiftUI, designed around Apple’s **iOS 26 Human Interface Guidelines**. It enables users to create, manage, and transfer digital **Vehicle Passports** — structured records that capture a vehicle's static and dynamic history.

The app supports peer-to-peer networking for digital vehicle handoff via simulated **Bluetooth notifications** and **QR code scans**, and is backed by a live **Supabase** instance for data warehousing and authentication.

---

## Project Structure & Documentation

All project constraints, architectural assumptions, and design rules are documented and enforced through the following files:

### Core Docs (`/Docs/`)

| File                                  | Purpose                                                                 |
| ------------------------------------- | ----------------------------------------------------------------------- |
| `PROJECT_OVERVIEW.md`                 | Defines architecture, SDKs, and app goals                               |
| `API_INTEGRATION.md`                  | Explains Supabase, mocked data, Bluetooth simulation, and QR flows      |
| `HIG_REFERENCE.md`                    | Interprets Apple’s Human Interface Guidelines (iOS 26) for this project |
| `SUPABASE_INTEGRATION_GUIDE.md`       | Developer guide to backend setup, auth, storage, and subscriptions      |
| `SEMANTIC_COLOR_MIGRATION_SUMMARY.md` | Historical record of semantic color migration and implementation impact |

### Visual System (`/Design/`)

| File               | Purpose                                                                 |
| ------------------ | ----------------------------------------------------------------------- |
| `DESIGN_SYSTEM.md` | Documents layout, component patterns, spacing rules, and visual styling |

These documents serve as the **source of truth** for developers, designers, and AI coding assistants (Cursor, Claude, GPT, etc.).

---

## AI/Assistant Usage Guidelines

Any AI agent or pair-programming assistant should:

* Use **Apple-native SwiftUI components only** unless otherwise specified
* Follow the rules in `Docs/HIG_REFERENCE.md` and `Design/DESIGN_SYSTEM.md`
* Support layout that adapts to **iPhone and iPad** in **portrait and landscape** orientations
* Prefer `.glassBackgroundEffect()` and other native iOS 26 materials
* Avoid using third-party libraries unless noted in `PROJECT_OVERVIEW.md`
* Avoid custom UI controls when a native SwiftUI solution exists

Reference comments may be placed at the top of view files to reinforce expectations:

```swift
// Reference: Docs/HIG_REFERENCE.md and Design/DESIGN_SYSTEM.md
// Constraints:
// - Use Apple-native SwiftUI controls
// - Follow iOS 26 Human Interface Guidelines
// - Avoid custom or third-party components unless explicitly allowed
```

---

## Current Prototype Status

* Supabase integrated for auth and vehicle data
* QR and Bluetooth interactions simulated
* Glass material views tested on iPhone 16 Pro (393x852)
* Local caching pending
* UI state loading refinements in progress

---

> This project evolves with Apple’s platform updates. For guidance, always consult the latest versions of the markdown files in `/Docs/` and `/Design/`.
…here are the instructions ChatGPT provided for the HIG_REFERENCE.md file…
HIG_REFERENCE.md

This document defines the design and development expectations for this app, which targets iOS 26 (public beta of iOS 18), using SwiftUI and Apple’s native iOS UI components.

Reference:
https://developer.apple.com/design/human-interface-guidelines
https://developer.apple.com/documentation/swiftui/view/glassbackgroundeffect/

Project Intent

This is a native iOS application using only Apple’s official SwiftUI controls, built to comply with the latest Human Interface Guidelines and optimized for the Liquid Glass UI introduced in iOS 26.
	•	Use Apple-native layout patterns — no custom navigation or component libraries
	•	Prioritize clarity, depth, deference, and accessibility
	•	Incorporate Liquid Glass styling using .glassBackgroundEffect() where appropriate
	•	Target iPhone 16 Pro layout (393x852) as default preview resolution
	•	Respect all system standards for font scaling, semantic colors, and material rendering
	•	Use semantic text styles and accessibility modifiers (e.g., accessibilityLabel)
	•	Use the entire available set of Apple-native SwiftUI components where applicable — including but not limited to TabView, List, Form, NavigationStack, Chart, Map, Gauge, Picker, and others

Core Principles

Apple’s design language follows three key principles:
	•	Clarity – Interfaces are precise and easy to understand
	•	Deference – UI supports the content without overpowering it
	•	Depth – Transitions and visual hierarchy reinforce navigation and context

Layout & Navigation

Adaptive Layout Requirements
	•	All views must adapt seamlessly to both portrait and landscape orientations
	•	Support compact and regular size classes — especially when transitioning between iPhone and iPad
	•	Use SwiftUI’s layout system (GeometryReader, .containerRelativeFrame(), adaptiveStack, etc.) to avoid fixed positioning
	•	Test across devices (e.g., iPhone 16 Pro, iPad Air, iPad Mini) in both orientations to ensure consistent spacing, alignment, and visual hierarchy
	•	Use SwiftUI-native containers: NavigationStack, TabView, Form, List
	•	Apply system spacing and safe areas using padding(), Spacer(), and .containerRelativeFrame()
	•	Avoid absolute positioning or fixed frames
	•	Support modal and sheet-based presentation with system transitions
	•	Use adaptive layouts that work in both compact and regular environments

Visual Style (iOS 26 UI + Liquid Glass)
	•	Use .glassBackgroundEffect() for surfaces and system containers (iOS 26+ only)
	•	Always wrap iOS 26-specific features in:

if #available(iOS 26, *) {
  // iOS 26 UI logic
}



Light & Dark Mode Support
	•	All views must support automatic theme switching
	•	Use only semantic colors (.primary, .background, .label, etc.)
	•	Avoid hardcoded Color.white or Color.black
	•	Maintain contrast with subtle border color shifts (~15% opacity) depending on mode
	•	Blur and shadow effects must appear native and consistent across modes

Accessibility

System Spacing Utility

Use the SystemSpacing view for consistent vertical gaps between views. This utility wraps a native Spacer(minLength: 8) to promote semantic spacing aligned with system layout rhythm.

SystemSpacing()

Avoid arbitrary spacing values like .padding(.top, 13) unless explicitly required for alignment or by Apple’s design documentation.
	•	Use Dynamic Type with Text roles like .title2, .body, .caption
	•	Implement accessibilityLabel, accessibilityValue, and accessibilityHint where appropriate
	•	Avoid fixed sizing or positioning that disrupts screen reader behavior

Avoid
	•	Third-party component libraries unless explicitly approved (e.g., Swift Charts is allowed)
	•	Custom shadows or blur that override system behavior
	•	Overuse of ZStack for layout layering
	•	Fixed positioning or hardcoded frame sizes

⸻

This document evolves with iOS 26 releases. Refer to Apple’s latest Human Interface Guidelines for new updates.

Using Claude 4 Sonnet in Cursor to generate my experiment’s native iOS app shell

Up until this point, I’ve been setting up the Cursor environment–it’s a solid start and my confidence is fairly high that I’m heading in the right direction. I’m not really “vibe coding” yet but, getting closer…
➤ I tell ChatGPT I’m ready to start coding in Cursor
let's start generating some views in Cursor. should I first ask the Cursor agent to setup the default, out-of-the-box, styles according to Apple's interface guidelines? should I ask the agent to compose a screen? what should I do first?
➤ ChatGPT response…
First Move: Ask the Agent to Scaffold a Native App Shell
Before composing a screen or writing styles, start with a scaffolded SwiftUI app that:
	1.	Uses Apple’s default navigation and app structuring
	2.	Organizes folders by MVVM (Models, Views, ViewModels)
	3.	Follows your .cursor/rules (HIG, SwiftUI, Accessibility, etc.)
A few more prompts and I was able to build-out four views and a working main navigation bar.
A first-generation UI with Cursor and Claude 4 Sonnet
Duration: ~3hrs.
View: Splash
View: My Garage
View: The Market
View: More
A second-generation UI with Cursor and Claude 4 Sonnet
Duration: ~1hrs.
View: My Garage
Cursor’s 1st draft
After vibe coding
Left ImageRight Image
View: The Market
Cursor’s 1st draft
After vibe coding
Left ImageRight Image

Setting up Apple XCode (IDE) to preview Cursor’s AI-coded work

Let’s recap. I’ve set up a Cursor environment, built the application shell, and generated a main navigation control along with the core iOS views. Now I’m ready to preview those views using Apple’s Xcode. I’m holding off on tools like Alex Sidebar for now—not just to avoid the extra cost, but because the goal of this experiment is to stay focused on what Cursor can do.
➤ I inquire about setting up XCode for previewing Cursor work…
Cursor is producing Swift code and generating views. I now want to preview the front-end using XCode. Walk me through the steps to accomplish this.

##Goals
Preference is to use a single source of truth for code across Cursor and XCode.
➤ ChatGPT response…
STEP 1: Create New Xcode Project
1. Open Xcode
2. Choose File > New > Project
3. Select App
4. Click Next
5. Use the following:
    • Product Name: [project-name]
    • Interface: SwiftUI
    • Language: Swift
6. For Team and Bundle Identifier, use defaults or fill if needed.
7. Uncheck “Include Tests”
8. Save it somewhere temporary (you’ll reference the real files later)
9. Once created, delete the default ContentView.swift and PureExperimentalApp.swift files from the Xcode project (but not your Cursor code).