motioneyes-animation-debug/SKILL.md
Diagnose and fix SwiftUI animation and scroll behavior by temporarily instrumenting views with MotionEyes, capturing console traces over time, and comparing motion data to user intent. Use when users report bugs such as wrong direction, premature fade, timing or easing mismatch, unexpected movement, missing movement, incorrect relative movement between views, scroll jumps, scroll restoration drift, or content-offset desynchronization. Prefer XcodeBuildMCP log capture first and fallback to CLI log streaming; remove only agent-added MotionEyes instrumentation after validation.
npx skillsauth add abanoub-ashraf/manus-skills-import motioneyes-animation-debugInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Use MotionEyes as temporary observability for SwiftUI animation debugging. Instrument targeted values and geometry, capture time-series logs, compare observed motion against expected motion, apply fixes, re-validate, and clean up all agent-added tracing.
Follow this exact order:
.motionTrace(...) instrumentation with Trace.value, Trace.geometry, and (for scroll issues) Trace.scrollGeometry metrics named after user intent.Add instrumentation only to the minimum set of views needed to test the complaint.
ScrollView offset, visible region, content size, insets, or restoration behavior.Trace.scrollGeometry on the ScrollView container (or an immediate descendant bound to the same scroll context), not on unrelated overlays.Choose geometry mode based on intent:
space: .swiftUI(.global), source: .layoutspace: .window, source: .layoutspace: .screen, source: .presentationExample template:
import MotionEyes
import SwiftUI
struct CardMotionExample: View {
@State private var opacity = 1.0
@State private var offset = CGSize.zero
var body: some View {
RoundedRectangle(cornerRadius: 16)
.fill(.orange)
.frame(width: 180, height: 120)
.opacity(opacity)
.offset(offset)
.motionTrace("Card Motion", fps: 30) {
Trace.value("opacity", opacity)
Trace.value("offset", CGPoint(x: offset.width, y: offset.height))
Trace.geometry(
"cardFrame",
properties: [.minX, .minY, .width, .height],
space: .swiftUI(.global),
source: .layout
)
}
.onTapGesture {
withAnimation(.easeInOut(duration: 0.6)) {
opacity = opacity == 1 ? 0.4 : 1
offset = offset == .zero ? CGSize(width: 0, height: 36) : .zero
}
}
}
}
Scroll-focused template:
ScrollView {
content
}
.motionTrace("Chat Scroll", fps: 30) {
Trace.scrollGeometry(
"scrollMetrics",
properties: [.contentOffsetY, .visibleRectMinY, .visibleRectHeight]
)
}
Prefer XcodeBuildMCP:
mcp__XcodeBuildMCP__session_show_defaults.mcp__XcodeBuildMCP__session_set_defaults.mcp__XcodeBuildMCP__build_run_sim if needed.mcp__XcodeBuildMCP__start_sim_log_cap:
captureConsole: truesubsystemFilter: "MotionEyes" (or broader "all" when needed)mcp__XcodeBuildMCP__stop_sim_log_cap and inspect returned logs.Fallback CLI if MCP is unavailable:
xcrun simctl spawn booted log stream \
--style compact \
--level debug \
--predicate 'subsystem == "MotionEyes"'
Use these signatures:
[MotionEyes][View][Metric] key=value ...[MotionEyes][View][Metric] -- Start timestamp --[MotionEyes][View][Metric] -- End timestamp --Analyze:
Start and to End.Do not force fixed thresholds globally; evaluate against the user’s stated expectation.
At the end of every run:
import MotionEyes only if it was added solely for temporary tracing and is no longer needed.opacity and verify fade begins/ends when expected.Trace.scrollGeometry on the ScrollView and verify contentOffset/visibleRect progression through navigation and return paths.Load references/motioneyes-observability-patterns.md when choosing metrics or interpreting trace behavior.
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