From vfm-agent-company
iOS development mastery with Swift from Apple. Build native iOS apps with SwiftUI, UIKit, and Apple's design principles. Expertise from the iOS Platform Team.
npx claudepluginhub duylinhdang1998/claude-template-agent --plugin vfm-agent-companyThis skill uses the workspace's default tool permissions.
**Expert**: David Park (Apple iOS Platform Team, 15 years)
Searches, retrieves, and installs Agent Skills from prompts.chat registry using MCP tools like search_skills and get_skill. Activates for finding skills, browsing catalogs, or extending Claude.
Searches prompts.chat for AI prompt templates by keyword or category, retrieves by ID with variable handling, and improves prompts via AI. Use for discovering or enhancing prompts.
Checks Next.js compilation errors using a running Turbopack dev server after code edits. Fixes actionable issues before reporting complete. Replaces `next build`.
Expert: David Park (Apple iOS Platform Team, 15 years) Level: 10/10 - Contributed to iOS Camera app, SwiftUI framework
Swift and iOS development from Apple - the company that created both. Build apps that feel native, respect user privacy, and deliver Apple-quality design.
Apple's declarative UI framework:
import SwiftUI
// Apple-quality SwiftUI app
struct ContentView: View {
@StateObject private var viewModel = ContentViewModel()
@Environment(\.colorScheme) var colorScheme
var body: some View {
NavigationStack {
ScrollView {
LazyVStack(spacing: 16) {
ForEach(viewModel.items) { item in
ItemRow(item: item)
.onTapGesture {
viewModel.selectItem(item)
}
}
}
.padding()
}
.navigationTitle("Items")
.searchable(text: $viewModel.searchText)
.refreshable {
await viewModel.refresh()
}
}
}
}
// MVVM pattern (Apple recommended)
@MainActor
class ContentViewModel: ObservableObject {
@Published var items: [Item] = []
@Published var searchText: String = ""
func refresh() async {
do {
items = try await APIClient.shared.fetchItems()
} catch {
// Handle error
}
}
}
Modern Swift concurrency:
// Apple's async/await pattern
actor ImageCache {
private var images: [String: UIImage] = [:]
func image(for url: URL) async throws -> UIImage {
if let cached = images[url.absoluteString] {
return cached
}
let (data, _) = try await URLSession.shared.data(from: url)
guard let image = UIImage(data: data) else {
throw ImageError.invalidData
}
images[url.absoluteString] = image
return image
}
}
// Usage
Task {
do {
let image = try await imageCache.image(for: url)
imageView.image = image
} catch {
// Handle error
}
}
Human Interface Guidelines:
SF Symbols (Apple's icon system):
Image(systemName: "heart.fill")
.symbolRenderingMode(.multicolor)
.font(.largeTitle)
Last Updated: 2026-02-03 Expert: David Park (Apple, 15 years) - iOS Camera app, SwiftUI contributor