Agent skills for iOS, iPadOS, Swift, SwiftUI, and modern Apple framework development.
71
89%
Does it follow best practices?
Impact
—
No eval scenarios have been run
Advisory
Suggest reviewing before use
Common runtime crashes and build errors when using #Predicate with SwiftData.
#Predicate compiles Swift expressions into a query representation. Only a subset of Swift is supported. Unsupported expressions compile but crash at runtime.
| Pattern | Crash? | Fix |
|---|---|---|
$0.name.uppercased() == "PARIS" | Runtime crash | Use localizedStandardContains or caseInsensitiveCompare |
$0.name.count > 5 | Runtime crash | Store length in a separate property or filter after fetch |
$0.tags.count == 0 | Runtime crash | Use $0.tags.isEmpty (iOS 17.4+) or a stored flag |
$0.name.isEmpty on optional String | Runtime crash on some OS versions | Use $0.name == nil || $0.name == "" |
| Custom computed property | Runtime crash | Only stored @Attribute properties work in predicates |
Date.now captured by value | Stale predicate | Create a let now = Date() before the predicate and capture it |
| Enum raw value comparison | Runtime crash (pre-iOS 18) | Store the raw value as a separate property, or target iOS 18+ |
if/else, switch, for | Build error | Not valid inside #Predicate |
| Arbitrary method calls | Runtime crash | Only supported methods (see below) work |
Comparisons: ==, !=, <, <=, >, >=
Logic: &&, ||, !
String: localizedStandardContains(_:), contains(_:), starts(with:), caseInsensitiveCompare(_:)
Collections: contains(where:), allSatisfy(_:), filter(_:), .isEmpty
Other: optional chaining, nil coalescing (??), ternary (? :), arithmetic (+, -, *, /), type casting (as?, is)
func tripPredicate(searchText: String, favoritesOnly: Bool) -> Predicate<Trip> {
let now = Date()
return #Predicate<Trip> { trip in
(searchText.isEmpty || trip.destination.localizedStandardContains(searchText))
&& (!favoritesOnly || trip.isFavorite)
&& trip.startDate > now
}
}Capture all external values as let bindings outside the predicate closure. The predicate captures them by value at creation time.
When a predicate crashes at runtime with SwiftData.PredicateError or NSInvalidArgumentException:
skills
accessorysetupkit
references
activitykit
references
adattributionkit
references
alarmkit
references
app-clips
app-intents
references
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-localization
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
spritekit
references
storekit
swift-api-design-guidelines
swift-architecture
swift-charts
references
swift-codable
swift-concurrency
swift-formatstyle
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