ios-god-level-developer/SKILL.md
Team-lead level iOS development mastery for modern iOS/iPadOS (iOS 26+), Xcode 16+, and Swift 6+. Covers architecture, SwiftUI/UIKit, Swift concurrency (Sendable/actors), iOS 26 Liquid Glass, FoundationModels (on-device AI), SwiftData class inheritance, Charts 3D, AppIntents Visual Intelligence, AlarmKit, native WebView, testing, performance, security, accessibility, CI/CD, release engineering, and technical leadership. Use when the user asks for "best practices", "team lead" guidance, architecture decisions, Swift 6 migration, iOS 26 adoption, on-device AI integration, code review checklists, production debugging, setting standards for an iOS team, MVVM vs TCA, modular architecture, SPM packages, dependency injection, MainActor, Sendable, strict concurrency, async/await patterns, URLSession networking, SwiftData vs Core Data, SwiftData inheritance, test pyramid, snapshot testing, Instruments profiling, Keychain security, VoiceOver accessibility, Fastlane CI/CD, or App Store release process.
npx skillsauth add abanoub-ashraf/manus-skills-import ios-god-level-developerInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
4 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
When this skill activates, behave like a pragmatic iOS tech lead: optimize for shipping high-quality apps while building a codebase that scales across features, teams, and years.
This skill provides team-lead-level breadth. For deep dives, delegate to specialized skills:
| Domain | When to delegate | Suggested skill |
|--------|------------------|-----------------|
| Swift 6 concurrency | Complex actor isolation, Sendable migration, data races | ios-swift6, swift-concurrency |
| Persistence | SwiftData migrations, CloudKit sync, Core Data performance | ios-persistence-complete, ios-data-persistence |
| Testing | Test architecture, mocking strategies, snapshot setup | ios-testing, test-driven-development |
| Performance | Instruments deep-dive, hang analysis, memory profiling | ios-performance, native-app-performance |
| Security | Keychain architecture, certificate pinning, threat modeling | ios-security |
| Networking | Retry strategies, auth flows, background downloads | ios-networking |
| Widgets/Extensions | WidgetKit, Live Activities, App Intents | ios-widgets, app-intents-architect |
| App Store/Release | Submission, metadata, review risks, Fastlane | ios-app-store, ci-cd-apple |
| Architecture | TCA deep-dive, modular boundaries | ios-clean-architecture, swiftui-architecture |
| Build issues | Xcode errors, signing, scheme configuration | xcode-build-helper, systematic-debugging |
Rule: If a question requires more than 2–3 paragraphs of specialized explanation, delegate to the appropriate skill for a complete answer.
Choose one as your team standard, and document it.
Rule: the best architecture is the one your team will apply consistently.
A scalable default:
App (composition root, app lifecycle, top-level navigation)Features/* (one package per feature or per bounded context)Core/* (shared abstractions)
CoreDomain (entities, use cases, protocols)CoreNetworking (URLSession wrappers, auth, retries)CorePersistence (SwiftData/Core Data wrappers)CoreUI (design system)CoreObservability (logging/metrics)Boundary rules:
MyApp/
├── App/ # Main app target
│ ├── Sources/
│ │ ├── AppDelegate.swift
│ │ ├── SceneDelegate.swift
│ │ ├── CompositionRoot.swift # Builds the object graph
│ │ └── Navigation/
│ │ └── AppCoordinator.swift
│ └── Package.swift
├── Features/
│ ├── Home/
│ │ ├── Sources/
│ │ │ ├── HomeView.swift
│ │ │ ├── HomeViewModel.swift
│ │ │ └── HomeUseCase.swift
│ │ ├── Tests/
│ │ │ └── HomeViewModelTests.swift
│ │ └── Package.swift
│ └── Profile/
│ └── ...
├── Core/
│ ├── CoreDomain/
│ │ ├── Sources/
│ │ │ ├── Entities/
│ │ │ │ └── User.swift
│ │ │ └── Protocols/
│ │ │ └── UserRepository.swift
│ │ └── Package.swift
│ ├── CoreNetworking/
│ │ ├── Sources/
│ │ │ ├── APIClient.swift
│ │ │ ├── Endpoint.swift
│ │ │ └── NetworkError.swift
│ │ └── Package.swift
│ ├── CorePersistence/
│ │ └── ...
│ └── CoreUI/
│ ├── Sources/
│ │ ├── DesignTokens.swift
│ │ └── Components/
│ │ ├── PrimaryButton.swift
│ │ └── LoadingView.swift
│ └── Package.swift
└── Package.swift # Workspace manifest
struct AppEnvironment {
var api: APIClient
var persistence: Persistence
var analytics: Analytics
var clock: any Clock
}
Prefer:
Environment only for UI-scoped concernsAvoid:
@MainActor
final class HomeViewModel: ObservableObject {
@Published private(set) var items: [Item] = []
func refresh() async {
do {
items = try await api.fetchItems()
} catch {
// update error UI state
}
}
}
If you must hop:
let data = try await service.load()
await MainActor.run {
self.state = .loaded(data)
}
@Sendable.@unchecked Sendable only with a documented thread-safety mechanism.task = Task { [weak self] in
guard let self else { return }
do {
try Task.checkCancellation()
let items = try await api.fetchItems()
self.items = items
} catch is CancellationError {
// ignore
} catch {
self.error = error
}
}
@State for simple local UI state.@StateObject for long-lived reference models.@Observable) when your toolchain supports it.Common failure mode: “massive view model” (too many responsibilities). Fix with:
NavigationStack / NavigationSplitView.Use UIKit when:
Pattern:
if #available(iOS 26, *) {
content
.glassEffect()
} else {
content
.background(.regularMaterial)
}
struct Endpoint {
let path: String
let method: String
}
protocol APIClient {
func request<T: Decodable>(_ endpoint: Endpoint) async throws -> T
}
Do not leak persistence objects (SwiftData models / NSManagedObject) into your domain/UI.
Use async XCTest APIs; avoid sleeps.
Use snapshot tests for:
Recommended repo: pointfreeco/swift-snapshot-testing.
body cheap.body.On every PR:
fastlane/fastlane) for build/sign/release automation.sergdort/ModernCleanArchitectureSwiftUIkhoren93/SwiftHubpointfreeco/swift-composable-architecturepointfreeco/swift-snapshot-testingrealm/SwiftLintfastlane/fastlaneapple/swift-logIf the user doesn’t specify constraints, default to:
Use this checklist to ensure the team-lead guidance covers the full iOS surface:
iOS 26 introduces significant new frameworks. Here's how to adopt them responsibly at scale.
// Wrapper for testability and fallback
protocol AIService {
func generate(prompt: String) async throws -> String
var isAvailable: Bool { get }
}
final class OnDeviceAIService: AIService {
private let session = LanguageModelSession()
var isAvailable: Bool {
SystemLanguageModel.default.isAvailable
}
func generate(prompt: String) async throws -> String {
guard isAvailable else {
throw AIServiceError.unavailable
}
return try await session.respond(to: prompt).content
}
}
// Mock for testing
final class MockAIService: AIService {
var isAvailable = true
var stubbedResponse = "Mock response"
func generate(prompt: String) async throws -> String {
stubbedResponse
}
}
isAvailable before every usecontentFiltered errors appropriately// Phase 1: Add base class
@Model
class BaseItem {
var id: UUID
var createdAt: Date
}
// Phase 2: Migrate existing models to inherit
@Model
final class Document: BaseItem {
var title: String
var content: String
}
// Phase 3: Update queries incrementally
// Old: @Query var documents: [Document]
// New: @Query var items: [BaseItem] // When polymorphism needed
// Keep intent thin, delegate to use case
struct ScanDocumentIntent: AppIntent {
static var title: LocalizedStringResource = "Scan Document"
@Dependency private var scanner: DocumentScannerUseCase
func perform() async throws -> some IntentResult {
let document = try await scanner.scan()
return .result(value: document.summary)
}
}
// Use case is testable, reusable
final class DocumentScannerUseCase {
func scan() async throws -> ScannedDocument { ... }
}
For any iOS 26 framework:
// Standard pattern
@MainActor
final class FeatureViewModel: ObservableObject {
@Published private(set) var state: FeatureState = .loading
private let service: FeatureService
private let featureFlags: FeatureFlags
func load() async {
guard featureFlags.isNewFrameworkEnabled else {
state = .legacy
return
}
guard service.isAvailable else {
state = .unavailable
return
}
do {
let result = try await service.perform()
state = .loaded(result)
} catch {
state = .error(error)
analytics.track(.featureError(error))
}
}
}
Learn from common mistakes. When reviewing code, flag these patterns:
// BAD: ViewModel does everything
class HomeViewModel: ObservableObject {
@Published var users: [User] = []
@Published var posts: [Post] = []
@Published var notifications: [Notification] = []
@Published var settings: Settings?
func fetchUsers() { ... }
func fetchPosts() { ... }
func sendNotification() { ... }
func updateSettings() { ... }
func trackAnalytics() { ... }
// 500+ lines...
}
Fix: Split into focused ViewModels per screen/feature. Extract use cases for business logic.
// BAD: Global state everywhere
class NetworkManager {
static let shared = NetworkManager()
// Used directly in views, viewmodels, everywhere
}
// Usage scattered across codebase
NetworkManager.shared.fetch(...)
Fix: Use dependency injection. Pass dependencies through initializers.
// BAD: SwiftData model exposed to UI
struct ProfileView: View {
let user: PersistentUser // SwiftData @Model leaked to view
}
Fix: Map to domain models at repository boundary.
// BAD: Task created but never stored/cancelled
func loadData() {
Task {
await fetchData() // What if view disappears?
}
}
Fix: Store task, cancel on disappear.
// BAD: Sync file I/O on main thread
func viewDidLoad() {
let data = try! Data(contentsOf: hugeFileURL) // Blocks UI!
}
Fix: Use async I/O, move to background.
// BAD: Suppressing compiler warnings without thread-safety
class Cache: @unchecked Sendable {
var items: [String: Data] = [:] // Not thread-safe!
}
Fix: Use proper synchronization (actor, lock) or make truly immutable.
// BAD: Expensive work in body
var body: some View {
let sortedItems = items.sorted { ... } // Runs on every render
let filtered = sortedItems.filter { ... }
List(filtered) { ... }
}
Fix: Compute in ViewModel, cache with @State or memoize.
// BAD: Creates new instance on every parent render
struct ParentView: View {
var body: some View {
ChildView(viewModel: ChildViewModel()) // New VM each render!
}
}
Fix: Use @StateObject for owned ViewModels, inject via Environment or init.
// BAD: Flaky and slow
func testAsyncLoad() {
viewModel.load()
Thread.sleep(forTimeInterval: 2) // Hope it's done!
XCTAssertEqual(viewModel.items.count, 5)
}
Fix: Use async test methods, expectations, or testing clocks.
// BAD: Test breaks when refactoring
func testViewModel() {
XCTAssertTrue(viewModel.didCallPrivateMethod) // Coupling to internals
}
Fix: Test behavior and outputs, not internal implementation.
// BAD: API key in source
let apiKey = "sk-1234567890abcdef" // Committed to git!
Fix: Use Keychain, environment variables, or secure configuration.
// BAD: User email in logs
logger.info("User logged in: \(user.email)") // Privacy violation!
Fix: Log user IDs or anonymized identifiers only.
| Smell | Fix |
|-------|-----|
| ViewModel > 300 lines | Extract use cases, split features |
| static let shared for app logic | Dependency injection |
| @Model in View | Repository pattern, map to domain |
| Unowned Task { } | Store in property, cancel on deinit |
| Thread.sleep in tests | Async tests, expectations |
| @unchecked Sendable | Actor, lock, or true immutability |
| Hardcoded strings in UI | Localization files |
| print() statements | Structured logging (os_log / swift-log) |
development
Design principles for building polished, native-feeling SwiftUI apps and widgets. Use this skill when creating or modifying SwiftUI views, iOS widgets (WidgetKit), or any native Apple UI. Ensures proper spacing, typography, colors, and widget implementations that look and feel like quality apps rather than AI-generated slop.
data-ai
Design and implement SwiftUI views, components, and app architecture. Use when creating new SwiftUI views, implementing MVVM/TCA patterns, managing state with @Observable, @State, @Binding, or @Environment, designing navigation flows, or structuring iOS app architecture. Triggers on SwiftUI, view model, state management, navigation, coordinator pattern.
development
Implement, review, or improve SwiftUI animations and transitions. Use when adding implicit or explicit animations with withAnimation, configuring spring animations (.smooth, .snappy, .bouncy), building phase or keyframe animations with PhaseAnimator/KeyframeAnimator, creating hero transitions with matchedGeometryEffect or matchedTransitionSource, adding SF Symbol effects (bounce, pulse, variableColor, breathe, rotate, wiggle), implementing custom Transition or CustomAnimation types, or ensuring animations respect accessibilityReduceMotion.
testing
Audit SwiftUI views for accessibility (iOS + macOS) with patch-ready fixes