Was macht swift-gui-verifiable-loop-skill?
Fähigkeit zum Erstellen und Ausführen einer deterministischen, agentenfreundlichen geschlossenen Schleife für SwiftUI-GUI-Änderungen auf macOS (AppKit) und iOS (UIKit) unter Verwendung von xcodebuild + .xcresult-Nachweisen + xcresulttool-Extraktion, ergänzt um Snapshot-Tests, Barrierefreiheitsprüfungen und kleine XCUITest-Rauchdurchläufe.
Überblick
Dieses Skill ermöglicht es KI-Agenten, eine automatisierte Closed-Loop-Prüfung von SwiftUI-Änderungen durchzuführen. Der Workflow umfasst:
- Kommunikation: Der Agent bietet an, eine Änderung zu validieren.
- Kompilieren und Testen: Führt
xcodebuild testaus, um die Änderung zu kompilieren und XCUITest-Smoke-Tests sowie Snapshot-Tests auszuführen. - Nachweis extrahieren: Extrahiert
.xcresult-Ergebnisse mitxcresulttool, um Testergebnisse, Fehler und Metadaten zu erhalten. - Bericht erstellen: Generiert einen prägnanten Bericht mit bestandenen/fehlgeschlagenen Tests, Snapshot-Unterschieden und Accessibility-Ergebnissen.
- Iteration: Bei Fehlern kann der Agent den Code reparieren, erneut testen und den Kreis schließen.
Unterstützte Plattformen
- macOS (AppKit)
- iOS (UIKit)
Voraussetzungen
- Xcode (mit installierten Kommandozeilenwerkzeugen)
- Ein gültiges SwiftUI/Xcode-Projekt mit Testschemata
xcresulttoolist in Xcode enthalten; keine separate Installation erforderlich
Verwendung
Schritt 1: Erstelle eine Teständerung
Der Agent schreibt oder aktualisiert eine SwiftUI-Ansicht und die zugehörigen Tests.
Schritt 2: Führe die Closed Loop aus
xcodebuild test \
-project MyApp.xcodeproj \
-scheme MyScheme \
-destination 'platform=iOS Simulator,name=iPhone 14' \
-resultBundlePath TestResults.xcresult
Schritt 3: Extrahiere Ergebnisse
xcresulttool get --path TestResults.xcresult --output-path report.json
Schritt 4: Analysiere und iteriere
Der Agent parst report.json, extrahiert bestandene/fehlgeschlagene Tests, Snapshot-Differenzen (falls vorhanden) und Accessibiliy-Verstöße, und iteriert dann basierend auf der Ausgabe.
Beispiel-Snapshot-Test
import XCTest
final class MySnapshotTests: XCTestCase {
func testMyViewSnapshot() throws {
let view = MyView()
let controller = UIHostingController(rootView: view)
controller.view.frame = CGRect(x: 0, y: 0, width: 375, height: 667)
let renderer = UIGraphicsImageRenderer(size: controller.view.bounds.size)
let image = renderer.image { ctx in
controller.view.drawHierarchy(in: controller.view.bounds, afterScreenUpdates: true)
}
// Snapshot-Vergleich (benutzerdefiniertes oder Bibliotheksunterstützung)
// XCTAssertEqual(image.pngData(), expectedSnapshot.pngData())
}
}
Accessibility-Audit (Beispiel)
import XCTest
final class AccessibilityTests: XCTestCase {
func testAccessibility() throws {
let app = XCUIApplication()
app.launch()
// Führe eine Accessibility-Inspektion durch
// (Erweiterung mit XCUIElement-Audit ist möglich)
}
}
Fehlerbehebung
- Stelle sicher, dass der Simulator oder das Gerät korrekt angegeben sind.
- Falls
xcodebuildfehlschlägt, überprüfe das Build-Log auf Syntax- oder Abhängigkeitsfehler. - Der Pfad zu
.xcresultmuss eindeutig sein; alte Ergebnisse sollten gelöscht werden. - Bei Snapshot-Fehlern: Überprüfe, ob die Ansichtsgröße und die Rendereinstellungen korrekt sind.
Lizenz
Dieses Skill ist Teil des zhutao100-Repos. Siehe die Lizenzdatei im Repository.
Beiträge
Beiträge sind willkommen! Reiche Issues oder Pull-Requests ein, um dieses Skill zu verbessern.