
Ios Swift Development
- 1.4k installs
- 305 repo stars
- Updated March 4, 2026
- aj-geddes/useful-ai-prompts
ios-swift-development is an agent skill that apply ios-swift-development agent skill workflows from documented skill.md guidance.
About
ios-swift-development is an agent skill from aj-geddes/useful-ai-prompts that apply ios-swift-development agent skill workflows from documented skill.md guidance. # iOS Swift Development ## Table of Contents - [Overview](#overview) - [When to Use](#when-to-use) - [Quick Start](#quick-start) - [Reference Guides](#reference-guides) - [Best Practices](#best-practices) ## Overview Build high-performance native iOS applications using Swift with modern frameworks including SwiftUI, Combine, and async/await pat Developers invoke ios-swift-development during build/frontend work for frontend development tasks. The skill documents triggers, prerequisites, and step-by-step workflows grounded in SKILL.md. Compatible with Claude Code, Cursor, and Codex agent runtimes that load marketplace skills. Review the Security Audits panel on this listing before installing in production environments. Category Frontend Development with development vertical focus supports repeatable agent-guided delivery.
- [When to Use](#when-to-use)
- [Quick Start](#quick-start)
- [Reference Guides](#reference-guides)
- [Best Practices](#best-practices)
- Build high-performance native iOS applications using Swift with modern frameworks including SwiftUI, Combine, and async/
Ios Swift Development by the numbers
- 1,448 all-time installs (skills.sh)
- +15 installs in the week ending Aug 5, 2026 (Skillselion tracking)
- Ranked #298 of 2,245 Frontend Development skills by installs in the Skillselion catalog
- Security screen: LOW risk (skills.sh audit)
- Data as of Aug 5, 2026 (Skillselion catalog sync)
ios-swift-development capabilities & compatibility
- Capabilities
- [when to use](#when to use) · [quick start](#quick start) · [reference guides](#reference guides) · [best practices](#best practices) · build high performance native ios applications u
- Use cases
- orchestration
What ios-swift-development says it does
Build high-performance native iOS applications using Swift with modern frameworks including SwiftUI, Combine, and async/await patterns.
- Creating native iOS applications with optimal performance
- Leveraging iOS-specific features and APIs
npx skills add https://github.com/aj-geddes/useful-ai-prompts --skill ios-swift-developmentAdd your badge
Show developers this skill is listed on Skillselion. Paste this into your README.
| Installs | 1.4k |
|---|---|
| repo stars | ★ 305 |
| Security audit | 3 / 3 scanners passed |
| Last updated | March 4, 2026 |
| Repository | aj-geddes/useful-ai-prompts ↗ |
What it does
Apply ios-swift-development agent skill workflows from documented SKILL.md guidance.
Who is it for?
Developers working on frontend development during build tasks.
Skip if: Tasks outside Frontend Development scope described in SKILL.md.
When should I use this skill?
Apply ios-swift-development agent skill workflows from documented SKILL.md guidance.
What you get
Completed frontend development workflow aligned with SKILL.md steps.
- SwiftUI view code
- MVVM view models
- networking and persistence snippets
Files
iOS Swift Development
Table of Contents
Overview
Build high-performance native iOS applications using Swift with modern frameworks including SwiftUI, Combine, and async/await patterns.
When to Use
- Creating native iOS applications with optimal performance
- Leveraging iOS-specific features and APIs
- Building apps that require tight hardware integration
- Using SwiftUI for declarative UI development
- Implementing complex animations and transitions
Quick Start
Minimal working example:
import Foundation
import Combine
struct User: Codable, Identifiable {
let id: UUID
var name: String
var email: String
}
class UserViewModel: ObservableObject {
@Published var user: User?
@Published var isLoading = false
@Published var errorMessage: String?
private let networkService: NetworkService
init(networkService: NetworkService = .shared) {
self.networkService = networkService
}
@MainActor
func fetchUser(id: UUID) async {
isLoading = true
errorMessage = nil
// ... (see reference guides for full implementation)Reference Guides
Detailed implementations in the references/ directory:
| Guide | Contents |
|---|---|
| MVVM Architecture Setup | MVVM Architecture Setup |
| Network Service with URLSession | Network Service with URLSession |
| SwiftUI Views | SwiftUI Views |
Best Practices
✅ DO
- Use SwiftUI for modern UI development
- Implement MVVM architecture
- Use async/await patterns
- Store sensitive data in Keychain
- Handle errors gracefully
- Use @StateObject for ViewModels
- Validate API responses properly
- Implement Core Data for persistence
- Test on multiple iOS versions
- Use dependency injection
- Follow Swift style guidelines
❌ DON'T
- Store tokens in UserDefaults
- Make network calls on main thread
- Use deprecated UIKit patterns
- Ignore memory leaks
- Skip error handling
- Use force unwrapping (!)
- Store passwords in code
- Ignore accessibility
- Deploy untested code
- Use hardcoded API URLs
MVVM Architecture Setup
MVVM Architecture Setup
import Foundation
import Combine
struct User: Codable, Identifiable {
let id: UUID
var name: String
var email: String
}
class UserViewModel: ObservableObject {
@Published var user: User?
@Published var isLoading = false
@Published var errorMessage: String?
private let networkService: NetworkService
init(networkService: NetworkService = .shared) {
self.networkService = networkService
}
@MainActor
func fetchUser(id: UUID) async {
isLoading = true
errorMessage = nil
do {
user = try await networkService.fetch(User.self, from: "/users/\(id)")
} catch {
errorMessage = error.localizedDescription
}
isLoading = false
}
@MainActor
func updateUser(_ userData: User) async {
guard let user = user else { return }
do {
self.user = try await networkService.put(
User.self,
to: "/users/\(user.id)",
body: userData
)
} catch {
errorMessage = "Failed to update user"
}
}
func logout() {
user = nil
errorMessage = nil
}
}Network Service with URLSession
Network Service with URLSession
class NetworkService {
static let shared = NetworkService()
private let session: URLSession
private let baseURL: URL
init(
session: URLSession = .shared,
baseURL: URL = URL(string: "https://api.example.com")!
) {
self.session = session
self.baseURL = baseURL
}
func fetch<T: Decodable>(
_: T.Type,
from endpoint: String
) async throws -> T {
let url = baseURL.appendingPathComponent(endpoint)
var request = URLRequest(url: url)
request.addAuthHeader()
let (data, response) = try await session.data(for: request)
try validateResponse(response)
let decoder = JSONDecoder()
decoder.dateDecodingStrategy = .iso8601
return try decoder.decode(T.self, from: data)
}
func put<T: Decodable, Body: Encodable>(
_: T.Type,
to endpoint: String,
body: Body
) async throws -> T {
let url = baseURL.appendingPathComponent(endpoint)
var request = URLRequest(url: url)
request.httpMethod = "PUT"
request.addAuthHeader()
request.setValue("application/json", forHTTPHeaderField: "Content-Type")
let encoder = JSONEncoder()
encoder.dateEncodingStrategy = .iso8601
request.httpBody = try encoder.encode(body)
let (data, response) = try await session.data(for: request)
try validateResponse(response)
let decoder = JSONDecoder()
return try decoder.decode(T.self, from: data)
}
private func validateResponse(_ response: URLResponse) throws {
guard let httpResponse = response as? HTTPURLResponse else {
throw NetworkError.invalidResponse
}
switch httpResponse.statusCode {
case 200...299:
return
case 401:
throw NetworkError.unauthorized
case 500...599:
throw NetworkError.serverError
default:
throw NetworkError.unknown
}
}
}
enum NetworkError: LocalizedError {
case invalidResponse
case unauthorized
case serverError
case unknown
var errorDescription: String? {
switch self {
case .invalidResponse: return "Invalid response"
case .unauthorized: return "Unauthorized"
case .serverError: return "Server error"
case .unknown: return "Unknown error"
}
}
}
extension URLRequest {
mutating func addAuthHeader() {
if let token = KeychainManager.shared.getToken() {
setValue("Bearer \(token)", forHTTPHeaderField: "Authorization")
}
}
}SwiftUI Views
SwiftUI Views
struct ContentView: View {
@StateObject var userViewModel = UserViewModel()
var body: some View {
TabView {
HomeView()
.tabItem { Label("Home", systemImage: "house") }
ProfileView(viewModel: userViewModel)
.tabItem { Label("Profile", systemImage: "person") }
}
}
}
struct HomeView: View {
@State var items: [Item] = []
@State var loading = true
var body: some View {
NavigationView {
ZStack {
if loading {
ProgressView()
} else {
List(items) { item in
NavigationLink(destination: ItemDetailView(item: item)) {
VStack(alignment: .leading) {
Text(item.title).font(.headline)
Text(item.description).font(.subheadline).foregroundColor(.gray)
}
}
}
}
}
.navigationTitle("Items")
.task {
await loadItems()
}
}
}
private func loadItems() async {
do {
items = try await NetworkService.shared.fetch([Item].self, from: "/items")
} catch {
print("Error: \(error)")
}
loading = false
}
}
struct ItemDetailView: View {
let item: Item
@Environment(\.dismiss) var dismiss
var body: some View {
ScrollView {
VStack(alignment: .leading, spacing: 16) {
Text(item.title).font(.title2).fontWeight(.bold)
Text(item.description).font(.body)
Text("Price: $\(String(format: "%.2f", item.price))")
.font(.headline).foregroundColor(.blue)
Spacer()
}
.padding()
}
.navigationBarTitleDisplayMode(.inline)
}
}
struct ProfileView: View {
@ObservedObject var viewModel: UserViewModel
@State var isLoading = true
var body: some View {
NavigationView {
ZStack {
if viewModel.isLoading {
ProgressView()
} else if let user = viewModel.user {
VStack(spacing: 20) {
Text(user.name).font(.title).fontWeight(.bold)
Text(user.email).font(.subheadline)
Button("Logout") { viewModel.logout() }
.foregroundColor(.red)
Spacer()
}
.padding()
} else {
Text("No profile data")
}
}
.navigationTitle("Profile")
.task {
await viewModel.fetchUser(id: UUID())
}
}
}
}
struct Item: Codable, Identifiable {
let id: String
let title: String
let description: String
let price: Double
}#!/bin/bash
# validate-api.sh - Validate API specification
# Usage: ./validate-api.sh <openapi_spec>
set -euo pipefail
SPEC_FILE="${{1:?Usage: $0 <openapi_spec>}}"
echo "Validating API spec: $SPEC_FILE"
# TODO: Add API validation
# - Validate OpenAPI/Swagger syntax
# - Check endpoint naming conventions
# - Verify response schemas
# - Check for required headers
# - Validate authentication definitions
echo "API validation complete."
# API Endpoint Scaffold
# TODO: Customize for your API framework
openapi: "3.0.3"
info:
title: "API Service"
version: "1.0.0"
paths:
/api/v1/resource:
get:
summary: "List resources"
# TODO: Define parameters and responses
responses:
"200":
description: "Success"
post:
summary: "Create resource"
# TODO: Define request body and responses
responses:
"201":
description: "Created"
Related skills
How it compares
Choose ios-swift-development over generic mobile skills when the target is native Swift and Apple frameworks, not cross-platform UI toolkits.
FAQ
What does ios-swift-development do?
Apply ios-swift-development agent skill workflows from documented SKILL.md guidance.
When should I use ios-swift-development?
During build frontend work for frontend development.
Is ios-swift-development safe to install?
Review the Security Audits panel on this listing before production use.