anastasiyaw/codex-claude-code-config/ios-development

Claude Code and agent skill by anastasiyaw/codex-claude-code-config

Trust tier 2
  • community
LLM review pending
Source check pending

Checking that the SKILL.md file is still in the repository.

Comprehensive iOS app development skill. Use this skill for ANY iOS-related task: writing Swift/SwiftUI/UIKit code, architecting apps, debugging crashes, setting up navigation, networking, data persistence, animations, performance optimization, App Store submission, Xcode configuration. Trigger when user mentions: iOS, Swift, SwiftUI, UIKit, Xcode, iPhone/iPad app, Combine, CoreData, SwiftData, MVVM, TCA, URLSession, async/await, @State/@Binding/@ObservableObject, NavigationStack, XCTest, TestFlight, provisioning profiles, or any Apple platform development. Always use this skill before writing iOS code or architecture. Do NOT use for web frontends (HTML/CSS/JS, React/Vue, browser UI) — even a WebView's page content is web work; use frontend-design for that. This skill is native Apple-platform code only.

Install

npx vskill@latest install anastasiyaw/codex-claude-code-config/ios-development

SKILL.md

iOS Development Skill

Quick orientation

Before anything else, identify:

  1. UI framework → SwiftUI / UIKit / mixed?
  2. Architecture → MVVM / TCA / VIPER / Clean / MVC?
  3. iOS target → iOS 16 / 17 / 18? (affects API availability)
  4. Task type → new feature / debug / refactor / architecture / performance / release?
  5. Graphics intensity → стандартный UI / средняя 3D / тяжёлая графика / Metal?

Если задача связана с Metal, GPU, рендерингом, шейдерами, TBDR, MetalFX, GPU profiling, frame pacing, PSO, heaps, ICB, MTLIO → читать references/metal-graphics.md первым.

Then read the relevant reference file before writing code.


Reference files — read when needed

TopicFileWhen to read
SwiftUI pipelinereferences/swiftui.mdSwiftUI views, state, bindings, modifiers, animations
UIKit pipelinereferences/uikit.mdUIViewController, Auto Layout, delegates, storyboards
Architecturereferences/architecture.mdMVVM, TCA, VIPER, Clean, Coordinator
Networkingreferences/networking.mdURLSession, async/await, REST/GraphQL, auth
Data persistencereferences/data.mdCoreData, SwiftData, UserDefaults, Keychain, FileManager
Navigationreferences/navigation.mdNavigationStack, Coordinator, deep links, sheets
Performancereferences/performance.mdInstruments, memory, launch time, rendering
Metal & Heavy Graphicsreferences/metal-graphics.mdMetal, GPU рендер, TBDR, PSO/heaps/argument buffers, ICB, MTLIO, MetalFX, терморегуляция, профилирование GPU

iOS version matrix (API availability)

FeatureMin iOS
SwiftUIiOS 13
async/awaitiOS 15
NavigationStackiOS 16
SwiftDataiOS 17
@Observable macroiOS 17
RippleEffect, ScrollView phasesiOS 18

Always check target before using newer APIs. Use #available guards for backward compatibility:

swift
if #available(iOS 17, *) {
// SwiftData or @Observable
} else {
// fallback
}

Core Swift patterns (always apply)

Concurrency — async/await first
swift
// Prefer this
func loadUser() async throws -> User {
let data = try await URLSession.shared.data(from: url).0
return try JSONDecoder().decode(User.self, from: data)
}
// Call site
Task {
do {
user = try await loadUser()
} catch {
errorMessage = error.localizedDescription
}
}
Error handling — typed errors
swift
enum AppError: LocalizedError {
case networkUnavailable
case decodingFailed(String)
case unauthorized
var errorDescription: String? {
switch self {
case .networkUnavailable: return "No internet connection"
case .decodingFailed(let detail): return "Data error: \(detail)"
case .unauthorized: return "Please sign in again"
}
}
}
Value types first

Prefer struct over class unless you need reference semantics, inheritance, or @Observable.


Architecture decision tree

Is the screen purely data-display with simple interaction?
YES → MVC / simple SwiftUI View with @State is fine
NO ↓
Is business logic testable without UI?
Required → use ViewModel (MVVM) or Store (TCA)
Is navigation/routing complex (deep links, coordinator)?
YES → read references/navigation.md → Coordinator pattern
Is the team large or is this a long-lived product?
YES → Clean Architecture or TCA → read references/architecture.md
Default for most apps: MVVM + Coordinator

State management quick reference

SwiftUI state hierarchy
Local transient state → @State
Passed from parent → @Binding
Shared across views → @StateObject / @ObservedObject (iOS 16-)
→ @State with @Observable class (iOS 17+)
App-wide environment → @EnvironmentObject / @Environment
iOS 17+ preferred (@Observable)
swift
@Observable
class UserStore {
var users: [User] = []
var isLoading = false
}
// In View — no property wrapper needed
struct UserListView: View {
var store: UserStore // just pass it
var body: some View {
List(store.users) { Text($0.name) }
}
}
iOS 16 and below (ObservableObject)
swift
class UserViewModel: ObservableObject {
@Published var users: [User] = []
@Published var isLoading = false
}
struct UserListView: View {
@StateObject private var vm = UserViewModel()
}

Xcode & project setup checklist

New project:

  • [ ] Set deployment target explicitly
  • [ ] Enable Swift strict concurrency warnings (SWIFT_STRICT_CONCURRENCY = complete)
  • [ ] Add .gitignore for Xcode (xcuserdata, DerivedData)
  • [ ] Configure signing (automatic vs manual)
  • [ ] Set bundle ID and version/build numbers

Capabilities to enable when needed:

  • Push Notifications → add Push Notifications capability
  • Background fetch → Background Modes
  • iCloud/CloudKit → iCloud
  • Sign in with Apple → Sign In with Apple

Testing baseline

swift
// Unit test — ViewModel
@MainActor
final class UserViewModelTests: XCTestCase {
func testLoadUsers() async throws {
let vm = UserViewModel(service: MockUserService())
await vm.loadUsers()
XCTAssertFalse(vm.users.isEmpty)
}
}
// UI test — basic
func testLoginFlow() {
let app = XCUIApplication()
app.launch()
app.textFields["Email"].tap()
app.textFields["Email"].typeText("test@example.com")
app.buttons["Continue"].tap()
XCTAssertTrue(app.navigationBars["Home"].exists)
}

Common pitfalls

PitfallFix
Purple warning: "Publishing changes from background thread"Wrap in await MainActor.run { } or mark func @MainActor
View re-renders too oftenAudit @State/@Published — split large ViewModels
Memory leak in closuresUse [weak self] captures in escaping closures
@StateObject recreatedMove object creation up the tree; don't init in body
Keyboard covering text fieldUse .ignoresSafeArea(.keyboard, edges: .bottom) or ScrollView
Slow listUse LazyVStack or List with id: stability
Simulator ≠ device behaviorAlways test on real device before submission
Metal: CPU↔GPU stallTriple buffer + DispatchSemaphore; никогда не ждать GPU синхронно в draw()
Metal: PSO компилируется в рантаймеСоздавать все PSO до первого кадра, кешировать
Metal: лишние load/storestoreAction = .dontCare для transient (depth buffer)
Metal: OOM jetsamМониторить currentAllocatedSize vs recommendedMaxWorkingSetSize; освобождать при warning
Metal: статтер при загрузкеMTLIO + MTLSharedEvent вместо блокирующей загрузки; ODR для тяжёлых ассетов
Metal: перегревПодписаться на thermalStateDidChangeNotification, адаптировать render scale + FPS

Hardware budget ориентиры (GPU capability levels)

Планировать по capability-уровням, не под конкретную модель. Всегда включать adaptive quality.

УровеньSoCРеалистичный targetКлючевые ограничения
Широкий охватA13–A15 (iPhone SE, 13, 14)30–60 FPS, агрессивный render scaleСтрогий бюджет RT; MetalFX обязателен для сложных сцен
СреднийA16 (iPhone 15), M160 FPS при хорошем пайплайнеMetalFX + динамический render scale
ФлагманA17 Pro (iPhone 15 Pro), M3+60–120 FPS, тяжёлые эффектыRay tracing (аппаратный); всё равно нужен thermal management

Важно: даже флагманы упираются в термальную стабильность при длительной нагрузке, а не в пиковую мощность GPU.


App Store submission checklist

  • [ ] Increment build number for every TestFlight upload
  • [ ] Privacy manifest (PrivacyInfo.xcprivacy) required for sensitive APIs
  • [ ] App icons all sizes provided (use Asset Catalog)
  • [ ] Screenshots for all required device sizes
  • [ ] Export compliance (encryption questions)
  • [ ] App Review Information filled in
  • [ ] No UIRequiresFullScreen = NO without iPad support reasoning

Security

  • Security scanPassed, 100 of 100Pattern checks on the skill's files.
  • Model reviewNot runA model review is scheduled for the next rescan.

Quality evaluation

  • Task evaluationNot runNo evaluation yet. Run one in Skill Studio.

Source

Popularity

Repository stars
150
Repository forks
24
7-day trend score
25

Stars and forks are for the whole GitHub repository, not this skill alone. Not refreshed yet.

Works with

Any agent vskill installs to: 56 targets in all. These 39 have a page on this site.

  • Claude Code
  • Cursor
  • GitHub Copilot
  • Windsurf
  • Codex
  • Gemini CLI
  • Cline
  • Amp
  • Roo Code
  • Goose
  • Continue
  • Kilo Code
  • Junie
  • Trae
  • OpenHands
  • Qwen Code
  • AI Agent
  • Tabnine Chat
  • Sourcegraph Cody
  • Amazon Q
  • Firebase Genkit
  • Sweep
  • Devin
  • Phind
  • Mentat
  • Claude Desktop
  • Aider
  • GPT Pilot
  • Plandex
  • bolt.new
  • v0
  • Replit Agent
  • Anse
  • TypingMind
  • BetterChatGPT
  • LibreChat
  • Warp AI
  • Pieces
  • Fig AI
Embed badge
vskill VERIFIED badge
[![vskill VERIFIED](https://verified-skill.com/api/v1/skills/anastasiyaw/codex-claude-code-config/ios-development/badge)](https://verified-skill.com/skills/anastasiyaw/codex-claude-code-config/ios-development)

Something wrong with this skill or its page? Tell us.