The issue is that the Dart packages reference Flutter SDK, so we need
Flutter installed to properly resolve dependencies and avoid formatting
differences.
The issue was that dart format applies different rules when it can't resolve
analysis_options.yaml dependencies. Using dart pub get (instead of flutter pub get)
avoids needing to install Flutter SDK in CI.
The formatting discrepancy was caused by missing Flutter packages in CI.
When analysis_options.yaml references flutter_lints but packages aren't resolved,
dart format uses different formatting rules than when packages are available.
- Add generate-bindings.sh script similar to spine-flutter
- Remove outdated CocoaPods example and podspecs
- Remove setup.sh (no longer needed as we use symlinks)
- CocoaPods users should use Swift Package Manager instead
- Enable debug extension on app startup for leak detection
- Add reportLeaks() calls when example views disappear
- Fix PMA flag handling by reading it from atlas page instead of hardcoding to false
- Add manual dispose() method to SpineController for explicit cleanup if needed
Note: SwiftUI view caching may show false positive leaks when views disappear,
as SwiftUI keeps views in memory for performance until they're truly no longer needed.
- Add NSObject inheritance to root classes for ObjC compatibility
- Add @objc(Spine<ClassName>) and @objcMembers annotations to all classes
- Fix property name conflicts (className -> rttiClassName, hash -> hashString)
- Use @nonobjc on subclass initializers to avoid selector conflicts
- Fix convenience init override modifiers
- Update ObjC example to use new API method names
- Update test to use rttiClassName property
- Remove AnimationStateWrapper (no longer needed with new SpineSwift API)
- Replace Spine.Generated+Extensions.swift with simplified SpineSwiftExtensions.swift
- Update SpineiOS to use SpineSwift API instead of direct SpineC calls
- Fix namespace conflicts (ContentMode → SpineContentMode, Alignment → SpineAlignment)
- Update texture mapping to use atlas page index from RenderCommand pointer
- Fix all Example app API calls to match new SpineSwift generated API:
- setAnimationByName → setAnimation
- addAnimationByName → addAnimation
- slot.color → slot.appliedPose.color.set()
- EventType enum cases instead of constants
- Physics enum with qualified name to avoid conflicts
- setSkin2() instead of property assignment
- Array iteration using indices instead of for-in
- bone.worldX → bone.appliedPose.worldX
- Update Objective-C imports from Spine to SpineiOS module
Note: SimpleAnimationViewController.m still needs updates for full ObjC compatibility
- Changed code generator to emit dispose() methods instead of deinit
- Add override keyword for dispose() in subclasses
- Keep deinit with _ownsMemory check for array types
- Fix SkinExtensions to use correct C++ class names for attachments
- Complete skeleton_drawable_test implementations with no warnings
- Add comprehensive bone pose transformation tests
- Fix skin entries test to properly show attachments
The memory management fix prevents Swift wrappers from accidentally
disposing C++ objects they don't own when created via fromPointer.
- Created SkeletonDrawable class wrapping spine_skeleton_drawable C functions
- Implemented AnimationStateEventManager singleton for event listener management
- Added helper types: Bounds and Vector structs
- Added extensions for Skeleton (bounds, getPosition)
- Added extensions for Skin (getEntries to iterate attachments)
- Added extensions for BonePose (coordinate transformations)
- Added extensions for AnimationState and TrackEntry (event listeners)
- Created skeleton_drawable_test_swift.swift using SpineSwift high-level API
- Updated test Package.swift to include SpineSwift dependency
- SpineSwift module now compiles with 0 errors
This completes the port of the high-level API from spine-flutter's spine_dart.dart
to SpineSwift, providing a clean Swift API that mirrors the Dart implementation.
- Fixed array wrapper generation to use correct pointer casting
- Changed array count/length properties to return Int instead of Int32
- Fixed buffer access for primitive and object arrays (no assumingMemoryBound needed)
- Corrected size_t parameters to use Int instead of Int32
- Updated module imports (SpineSwift instead of Spine)
- Reduced compilation errors from 17,500 to 0 for SpineSwift module
- Remaining 27 errors are iOS-specific (UIKit) in SpineiOS module
- Created clean module separation:
- SpineC: C/C++ compilation only (working)
- SpineSwift: Generated Swift bindings + platform-agnostic API
- SpineiOS: iOS-specific UI components only
- Updated Package.swift with proper target structure
- Moved generated Swift files to SpineSwift/Generated
- Removed redundant SpineModule
- Created test with skeleton_drawable_test.swift ported from Dart
- Test successfully runs using SpineC module directly
- Note: SpineSwift has Objective-C selector conflicts to be fixed