Agent skills for iOS, iPadOS, Swift, SwiftUI, and modern Apple framework development.
80
100%
Does it follow best practices?
Run evals on this skill
Adds up to 20 points to the overall score
View guide
Advisory
Suggest reviewing before use
Casing conventions, complexity documentation, free function exceptions, overload safety, and tuple/closure naming.
Types and protocols use UpperCamelCase. Everything else — functions, methods, properties, variables, constants, enum cases, argument labels — uses lowerCamelCase.
Acronyms that appear as all-uppercase in common American English usage are uniformly upper- or lower-cased based on their position in the name.
// At the start of a lowerCamelCase name — all lowercase
var utf8Bytes: [UTF8.CodeUnit]
var htmlParser: HTMLParser
var urlSession: URLSession
// In the middle or end — follows the case of its position
var isRepresentableAsASCII = true
var userSMTPServer: SMTPServer
// Type names — acronym stays uppercase
struct HTTPRequest { ... }
class URLSessionTask { ... }
enum UTF8 { ... }Words that started as acronyms but are now common words follow standard casing:
// These are words, not acronyms
var radarDetector: RadarDetector // not "RADARDetector"
var laserPrinter: LaserPrinter // not "LASERPrinter"
var scubaGear: ScubaGear // not "SCUBAGear"Callers assume computed properties are O(1). Document the complexity of any computed property or subscript that does more work.
/// The total number of nodes in the tree.
///
/// - Complexity: O(*n*), where *n* is the number of nodes.
var nodeCount: Int {
root.descendants.count
}/// The element at the given offset from the start.
///
/// - Complexity: O(*k*), where *k* is the offset.
subscript(offset: Int) -> Element {
var current = startIndex
for _ in 0..<offset { current = index(after: current) }
return self[current]
}Properties that are genuinely O(1) do not need a complexity note — the default assumption is correct.
// O(1) — no note needed
var count: Int { storage.count }
var isEmpty: Bool { count == 0 }
var first: Element? { storage.first }Prefer methods and properties to free functions. Use a free function only when one of these three conditions holds:
1. No obvious self
// GOOD — neither argument is more "self" than the other
min(x, y)
max(a, b)
zip(sequence1, sequence2)2. Unconstrained generic
// GOOD — works on anything
print(value)
debugPrint(value)3. Established domain notation
// GOOD — mathematical convention
sin(x)
cos(x)
abs(value)If none of these apply, make it a method.
// BAD — has an obvious self
calculateDistance(from: pointA, to: pointB)
// GOOD
pointA.distance(to: pointB)Methods may share a base name when they operate in different type domains or when their meaning is clear from context.
// GOOD — different parameter types, same semantic operation
extension Collection {
func contains(_ element: Element) -> Bool
func contains(where predicate: (Element) -> Bool) -> Bool
}Overloads that differ only in return type create ambiguity when the compiler cannot infer the expected type.
// BAD — ambiguous at call site
func transform() -> Int { ... }
func transform() -> String { ... }
let result = transform() // error: ambiguous// GOOD — different first argument labels disambiguate
func fetch(id: Int) -> User
func fetch(name: String) -> User
// GOOD — different argument types
func draw(_ rect: CGRect)
func draw(_ path: CGPath)Label tuple members and closure parameters in public API signatures. Positional access (.0, .1) is fragile and unreadable.
// GOOD — labeled
func position() -> (x: Double, y: Double)
func range() -> (lower: Int, upper: Int)
let pos = item.position()
pos.x // clear
pos.y // clear
// BAD — unlabeled
func position() -> (Double, Double)
let pos = item.position()
pos.0 // what is this?
pos.1 // what is this?Name closure parameters where they appear in the API, especially for higher-order functions.
// GOOD
func filter(_ isIncluded: (Element) -> Bool) -> [Element]
func map<T>(_ transform: (Element) -> T) -> [T]
func sort(by areInIncreasingOrder: (Element, Element) -> Bool)
// BAD
func filter(_ predicate: (Element) -> Bool) -> [Element] // acceptable but less descriptive
func sort(by compare: (Element, Element) -> Bool) // "compare" is vagueBe careful with overloads involving Any, AnyObject, or unconstrained generics. They can silently match when a more specific overload was intended.
// DANGEROUS — both overloads match array literals
struct Container {
func append(_ element: Element)
func append(_ sequence: some Sequence<Element>)
}
values.append([2, 3, 4]) // which overload? ambiguous if Element is ArrayResolve with distinct argument labels:
// GOOD — unambiguous
struct Container {
func append(_ element: Element)
func append(contentsOf sequence: some Sequence<Element>)
}
values.append(singleValue)
values.append(contentsOf: [2, 3, 4]) // always clear.tessl-plugin
skills
accessorysetupkit
references
activitykit
references
adattributionkit
references
alarmkit
references
app-clips
app-intents
app-store-optimization
app-store-review
apple-on-device-ai
appmigrationkit
references
audioaccessorykit
references
authentication
references
avkit
references
background-processing
references
browserenginekit
references
callkit
references
carplay
references
cloudkit
references
contacts-framework
references
core-bluetooth
references
core-data
core-motion
references
core-nfc
references
coreml
references
cryptokit
references
cryptotokenkit
references
debugging-instruments
device-integrity
references
dockkit
references
energykit
references
eventkit
references
financekit
references
focus-engine
gamekit
references
healthkit
references
homekit
references
ios-accessibility
ios-ettrace-performance
ios-localization
ios-memgraph-analysis
ios-networking
ios-simulator
references
mapkit
metrickit
references
musickit
references
natural-language
references
paperkit
references
passkit
references
pdfkit
references
pencilkit
references
permissionkit
references
photokit
push-notifications
realitykit
references
relevancekit
references
scenekit
references
sensorkit
references
speech-recognition
references
spritekit
references
storekit
swift-api-design-guidelines
swift-architecture
references
swift-charts
references
swift-codable
references
swift-concurrency
swift-formatstyle
references
swift-language
swift-security
references
swift-testing
swiftdata
swiftlint
swiftui-animation
swiftui-gestures
references
swiftui-layout-components
swiftui-liquid-glass
references
swiftui-patterns
swiftui-performance
swiftui-uikit-interop
swiftui-webkit
tabletopkit
references
tipkit
references
vision-framework
weatherkit
references
widgetkit
references