Restructure spine-ios modules: SpineC, SpineSwift, SpineiOS

- 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
This commit is contained in:
Mario Zechner 2025-08-11 17:21:45 +02:00
parent 0786af7586
commit ecbd700af4
160 changed files with 2929 additions and 4663 deletions

View File

@ -16,39 +16,56 @@ let package = Package(
products: [
// Products define the executables and libraries a package produces, making them visible to other packages.
.library(
name: "Spine",
targets: ["SpineModule"]
name: "SpineC",
targets: ["SpineC"]
),
.library(
name: "SpineSwift",
targets: ["SpineSwift"]
),
.library(
name: "SpineiOS",
targets: ["SpineiOS"]
)
],
targets: [
.target(
name: "SpineModule",
name: "SpineiOS",
dependencies: [
.byName(
name: "Spine",
condition: .when(platforms: [
.iOS
])
),
"SpineCppLite",
"SpineSwift",
"SpineShadersStructs",
],
path: "spine-ios/Sources/SpineModule"
path: "spine-ios/Sources/SpineiOS"
),
.target(
name: "Spine",
dependencies: [
"SpineCppLite", "SpineShadersStructs",
name: "SpineC",
path: "spine-ios/Sources/SpineC",
sources: [
"spine-c/src/extensions.cpp",
"spine-c/src/generated",
"spine-cpp/src/spine"
],
publicHeadersPath: "spine-c/include",
cxxSettings: [
.headerSearchPath("spine-c/include"),
.headerSearchPath("spine-c/src"),
.headerSearchPath("spine-c/src/generated"),
.headerSearchPath("spine-cpp/include"),
.headerSearchPath("spine-cpp/src"),
],
path: "spine-ios/Sources/Spine"
),
.target(
name: "SpineCppLite",
path: "spine-ios/Sources/SpineCppLite",
linkerSettings: [
.linkedLibrary("c++")
]
),
.target(
name: "SpineSwift",
dependencies: ["SpineC"],
path: "spine-ios/Sources/SpineSwift",
sources: [
"Generated",
"Extensions"
]
),
.systemLibrary(
name: "SpineShadersStructs",
path: "spine-ios/Sources/SpineShadersStructs"

View File

@ -0,0 +1,4 @@
module SpineC {
header "spine-c.h"
export *
}

View File

@ -1,29 +0,0 @@
// Spine Runtimes License Agreement
// Last updated April 5, 2025. Replaces all prior versions.
//
// Copyright (c) 2013-2025, Esoteric Software LLC
//
// Integration of the Spine Runtimes into software or otherwise creating
// derivative works of the Spine Runtimes is permitted under the terms and
// conditions of Section 2 of the Spine Editor License Agreement:
// http://esotericsoftware.com/spine-editor-license
//
// Otherwise, it is permitted to integrate the Spine Runtimes into software
// or otherwise create derivative works of the Spine Runtimes (collectively,
// "Products"), provided that each user of the Products must obtain their own
// Spine Editor license and redistribution of the Products in any form must
// include this license and copyright notice.
//
// THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC "AS IS" AND ANY
// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
// DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY
// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES,
// BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND
// ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
// THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
//
import Foundation

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1 @@
../../../spine-c

View File

@ -0,0 +1 @@
../../../spine-cpp

View File

@ -1,4 +0,0 @@
module SpineCppLite {
header "spine-cpp-lite.h"
export *
}

View File

@ -1 +0,0 @@
./../../../../spine-cpp/spine-cpp/include/spine

View File

@ -1 +0,0 @@
../../../../spine-cpp/spine-cpp-lite/spine-cpp-lite.h

View File

@ -1 +0,0 @@
./../../../spine-cpp/spine-cpp/src/spine

View File

@ -1 +0,0 @@
./../../../spine-cpp/spine-cpp-lite/spine-cpp-lite.cpp

View File

@ -1,14 +0,0 @@
//
// SpineModule.swift
// spine-ios
//
// Created by on 3/7/25.
//
@_exported import SpineCppLite
@_exported import SpineShadersStructs
#if canImport(Spine)
@_exported import Spine
#endif

View File

@ -0,0 +1,146 @@
/******************************************************************************
* Spine Runtimes License Agreement
* Last updated April 5, 2025. Replaces all prior versions.
*
* Copyright (c) 2013-2025, Esoteric Software LLC
*
* Integration of the Spine Runtimes into software or otherwise creating
* derivative works of the Spine Runtimes is permitted under the terms and
* conditions of Section 2 of the Spine Editor License Agreement:
* http://esotericsoftware.com/spine-editor-license
*
* Otherwise, it is permitted to integrate the Spine Runtimes into software
* or otherwise create derivative works of the Spine Runtimes (collectively,
* "Products"), provided that each user of the Products must obtain their own
* Spine Editor license and redistribution of the Products in any form must
* include this license and copyright notice.
*
* THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC "AS IS" AND ANY
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES,
* BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*****************************************************************************/
import Foundation
// MARK: - Version
/// The major version of the Spine runtime
public var majorVersion: Int {
return Int(spine_major_version())
}
/// The minor version of the Spine runtime
public var minorVersion: Int {
return Int(spine_minor_version())
}
/// The full version string of the Spine runtime
public var version: String {
return "\(majorVersion).\(minorVersion)"
}
// MARK: - Debug
/// Enable or disable the debug extension for memory leak detection
public func enableDebugExtension(_ enable: Bool) {
spine_enable_debug_extension(enable)
}
/// Report any memory leaks detected by the debug extension
public func reportLeaks() {
spine_report_leaks()
}
// MARK: - Atlas Loading
/// Load an Atlas from atlas data string
public func loadAtlas(_ atlasData: String) throws -> Atlas {
let result = spine_atlas_load(atlasData)
// Check for error
if let errorPtr = spine_atlas_result_get_error(result) {
let error = String(cString: errorPtr)
spine_atlas_result_dispose(result)
throw SpineError("Couldn't load atlas: \(error)")
}
// Get atlas
guard let atlasPtr = spine_atlas_result_get_atlas(result) else {
spine_atlas_result_dispose(result)
throw SpineError("Couldn't get atlas from result")
}
let atlas = Atlas(atlasPtr)
spine_atlas_result_dispose(result)
return atlas
}
// MARK: - SkeletonData Loading
/// Load skeleton data from JSON string
public func loadSkeletonDataJson(atlas: Atlas, jsonData: String, path: String = "") throws -> SkeletonData {
let result = spine_skeleton_data_load_json(atlas.wrappee, jsonData, path)
// Check for error
if let errorPtr = spine_skeleton_data_result_get_error(result) {
let error = String(cString: errorPtr)
spine_skeleton_data_result_dispose(result)
throw SpineError("Couldn't load skeleton data: \(error)")
}
// Get skeleton data
guard let skeletonDataPtr = spine_skeleton_data_result_get_data(result) else {
spine_skeleton_data_result_dispose(result)
throw SpineError("Couldn't get skeleton data from result")
}
let skeletonData = SkeletonData(skeletonDataPtr)
spine_skeleton_data_result_dispose(result)
return skeletonData
}
/// Load skeleton data from binary data
public func loadSkeletonDataBinary(atlas: Atlas, binaryData: Data, path: String = "") throws -> SkeletonData {
let result = binaryData.withUnsafeBytes { buffer in
spine_skeleton_data_load_binary(
atlas.wrappee,
buffer.bindMemory(to: UInt8.self).baseAddress,
Int32(buffer.count),
path
)
}
// Check for error
if let errorPtr = spine_skeleton_data_result_get_error(result) {
let error = String(cString: errorPtr)
spine_skeleton_data_result_dispose(result)
throw SpineError("Couldn't load skeleton data: \(error)")
}
// Get skeleton data
guard let skeletonDataPtr = spine_skeleton_data_result_get_data(result) else {
spine_skeleton_data_result_dispose(result)
throw SpineError("Couldn't get skeleton data from result")
}
let skeletonData = SkeletonData(skeletonDataPtr)
spine_skeleton_data_result_dispose(result)
return skeletonData
}
// MARK: - Error Type
public struct SpineError: Error, CustomStringConvertible {
public let description: String
public init(_ description: String) {
self.description = description
}
}

View File

@ -27,10 +27,11 @@
//
import Foundation
import SpineC
@objc(SpineAlphaTimeline)
@objcMembers
public final class AlphaTimeline: CurveTimeline1, SlotTimeline {
public final class AlphaTimeline: CurveTimeline1 {
internal let wrappee: spine_alpha_timeline
internal init(_ wrappee: spine_alpha_timeline) {

View File

@ -27,6 +27,7 @@
//
import Foundation
import SpineC
@objc(SpineAnimation)
@objcMembers

View File

@ -27,6 +27,7 @@
//
import Foundation
import SpineC
@objc(SpineAnimationState)
@objcMembers

View File

@ -27,6 +27,7 @@
//
import Foundation
import SpineC
@objc(SpineAnimationStateData)
@objcMembers

File diff suppressed because it is too large Load Diff

View File

@ -27,6 +27,7 @@
//
import Foundation
import SpineC
@objc(SpineAtlas)
@objcMembers

View File

@ -27,10 +27,11 @@
//
import Foundation
import SpineC
@objc(SpineAtlasAttachmentLoader)
@objcMembers
public final class AtlasAttachmentLoader: NSObject, AttachmentLoader {
public final class AtlasAttachmentLoader: NSObject {
internal let wrappee: spine_atlas_attachment_loader
internal init(_ wrappee: spine_atlas_attachment_loader) {

View File

@ -27,6 +27,7 @@
//
import Foundation
import SpineC
@objc(SpineAtlasPage)
@objcMembers

View File

@ -27,6 +27,7 @@
//
import Foundation
import SpineC
@objc(SpineAtlasRegion)
@objcMembers

View File

@ -27,6 +27,7 @@
//
import Foundation
import SpineC
@objc(SpineAttachment)
@objcMembers

View File

@ -27,6 +27,7 @@
//
import Foundation
import SpineC
@objc(SpineAttachmentLoader)
@objcMembers

View File

@ -27,10 +27,11 @@
//
import Foundation
import SpineC
@objc(SpineAttachmentTimeline)
@objcMembers
public final class AttachmentTimeline: Timeline, SlotTimeline {
public final class AttachmentTimeline: Timeline {
internal let wrappee: spine_attachment_timeline
internal init(_ wrappee: spine_attachment_timeline) {

View File

@ -27,10 +27,11 @@
//
import Foundation
import SpineC
@objc(SpineBone)
@objcMembers
public final class Bone: PosedActive, Posed, Update {
public final class Bone: PosedActive {
internal let wrappee: spine_bone
internal init(_ wrappee: spine_bone) {

View File

@ -27,6 +27,7 @@
//
import Foundation
import SpineC
@objc(SpineBoneData)
@objcMembers

View File

@ -27,6 +27,7 @@
//
import Foundation
import SpineC
@objc(SpineBoneLocal)
@objcMembers

View File

@ -27,10 +27,11 @@
//
import Foundation
import SpineC
@objc(SpineBonePose)
@objcMembers
public final class BonePose: BoneLocal, Update {
public final class BonePose: BoneLocal {
internal let wrappee: spine_bone_pose
internal init(_ wrappee: spine_bone_pose) {

View File

@ -27,6 +27,7 @@
//
import Foundation
import SpineC
@objc(SpineBoneTimeline)
@objcMembers

View File

@ -27,10 +27,11 @@
//
import Foundation
import SpineC
@objc(SpineBoneTimeline1)
@objcMembers
public final class BoneTimeline1: CurveTimeline1, BoneTimeline {
public final class BoneTimeline1: CurveTimeline1 {
internal let wrappee: spine_bone_timeline1
internal init(_ wrappee: spine_bone_timeline1) {

View File

@ -27,10 +27,11 @@
//
import Foundation
import SpineC
@objc(SpineBoneTimeline2)
@objcMembers
public final class BoneTimeline2: CurveTimeline, BoneTimeline {
public final class BoneTimeline2: CurveTimeline {
internal let wrappee: spine_bone_timeline2
internal init(_ wrappee: spine_bone_timeline2) {

View File

@ -27,6 +27,7 @@
//
import Foundation
import SpineC
@objc(SpineBoundingBoxAttachment)
@objcMembers

View File

@ -27,6 +27,7 @@
//
import Foundation
import SpineC
@objc(SpineClippingAttachment)
@objcMembers

View File

@ -27,6 +27,7 @@
//
import Foundation
import SpineC
@objc(SpineColor)
@objcMembers

View File

@ -27,10 +27,11 @@
//
import Foundation
import SpineC
@objc(SpineConstraint)
@objcMembers
public final class Constraint: Update {
public final class Constraint {
internal let wrappee: spine_constraint
internal init(_ wrappee: spine_constraint) {

View File

@ -27,6 +27,7 @@
//
import Foundation
import SpineC
@objc(SpineConstraintData)
@objcMembers

View File

@ -27,6 +27,7 @@
//
import Foundation
import SpineC
@objc(SpineConstraintTimeline)
@objcMembers

View File

@ -27,10 +27,11 @@
//
import Foundation
import SpineC
@objc(SpineConstraintTimeline1)
@objcMembers
public final class ConstraintTimeline1: CurveTimeline1, ConstraintTimeline {
public final class ConstraintTimeline1: CurveTimeline1 {
internal let wrappee: spine_constraint_timeline1
internal init(_ wrappee: spine_constraint_timeline1) {

View File

@ -27,6 +27,7 @@
//
import Foundation
import SpineC
@objc(SpineCurveTimeline)
@objcMembers

View File

@ -27,6 +27,7 @@
//
import Foundation
import SpineC
@objc(SpineCurveTimeline1)
@objcMembers

View File

@ -27,6 +27,7 @@
//
import Foundation
import SpineC
@objc(SpineDeformTimeline)
@objcMembers

View File

@ -27,6 +27,7 @@
//
import Foundation
import SpineC
@objc(SpineDrawOrderTimeline)
@objcMembers

View File

@ -27,6 +27,7 @@
//
import Foundation
import SpineC
public typealias AttachmentType = spine_attachment_type
public typealias BlendMode = spine_blend_mode

View File

@ -27,6 +27,7 @@
//
import Foundation
import SpineC
@objc(SpineEvent)
@objcMembers

View File

@ -27,6 +27,7 @@
//
import Foundation
import SpineC
@objc(SpineEventData)
@objcMembers

View File

@ -27,6 +27,7 @@
//
import Foundation
import SpineC
@objc(SpineEventQueueEntry)
@objcMembers

View File

@ -27,6 +27,7 @@
//
import Foundation
import SpineC
@objc(SpineEventTimeline)
@objcMembers

View File

@ -27,6 +27,7 @@
//
import Foundation
import SpineC
@objc(SpineFromProperty)
@objcMembers

View File

@ -27,6 +27,7 @@
//
import Foundation
import SpineC
@objc(SpineFromRotate)
@objcMembers

View File

@ -27,6 +27,7 @@
//
import Foundation
import SpineC
@objc(SpineFromScaleX)
@objcMembers

View File

@ -27,6 +27,7 @@
//
import Foundation
import SpineC
@objc(SpineFromScaleY)
@objcMembers

View File

@ -27,6 +27,7 @@
//
import Foundation
import SpineC
@objc(SpineFromShearY)
@objcMembers

View File

@ -27,6 +27,7 @@
//
import Foundation
import SpineC
@objc(SpineFromX)
@objcMembers

View File

@ -27,6 +27,7 @@
//
import Foundation
import SpineC
@objc(SpineFromY)
@objcMembers

View File

@ -27,10 +27,11 @@
//
import Foundation
import SpineC
@objc(SpineIkConstraint)
@objcMembers
public final class IkConstraint: PosedActive, Posed, Constraint {
public final class IkConstraint: PosedActive {
internal let wrappee: spine_ik_constraint
internal init(_ wrappee: spine_ik_constraint) {

View File

@ -27,10 +27,11 @@
//
import Foundation
import SpineC
@objc(SpineIkConstraintData)
@objcMembers
public final class IkConstraintData: PosedData, ConstraintData {
public final class IkConstraintData: PosedData {
internal let wrappee: spine_ik_constraint_data
internal init(_ wrappee: spine_ik_constraint_data) {

View File

@ -27,6 +27,7 @@
//
import Foundation
import SpineC
@objc(SpineIkConstraintPose)
@objcMembers

View File

@ -27,10 +27,11 @@
//
import Foundation
import SpineC
@objc(SpineIkConstraintTimeline)
@objcMembers
public final class IkConstraintTimeline: CurveTimeline, ConstraintTimeline {
public final class IkConstraintTimeline: CurveTimeline {
internal let wrappee: spine_ik_constraint_timeline
internal init(_ wrappee: spine_ik_constraint_timeline) {

View File

@ -27,10 +27,11 @@
//
import Foundation
import SpineC
@objc(SpineInheritTimeline)
@objcMembers
public final class InheritTimeline: Timeline, BoneTimeline {
public final class InheritTimeline: Timeline {
internal let wrappee: spine_inherit_timeline
internal init(_ wrappee: spine_inherit_timeline) {

View File

@ -27,6 +27,7 @@
//
import Foundation
import SpineC
@objc(SpineLinkedMesh)
@objcMembers

View File

@ -27,6 +27,7 @@
//
import Foundation
import SpineC
@objc(SpineMeshAttachment)
@objcMembers

View File

@ -27,6 +27,7 @@
//
import Foundation
import SpineC
@objc(SpinePathAttachment)
@objcMembers

View File

@ -27,10 +27,11 @@
//
import Foundation
import SpineC
@objc(SpinePathConstraint)
@objcMembers
public final class PathConstraint: PosedActive, Posed, Constraint {
public final class PathConstraint: PosedActive {
internal let wrappee: spine_path_constraint
internal init(_ wrappee: spine_path_constraint) {

View File

@ -27,10 +27,11 @@
//
import Foundation
import SpineC
@objc(SpinePathConstraintData)
@objcMembers
public final class PathConstraintData: PosedData, ConstraintData {
public final class PathConstraintData: PosedData {
internal let wrappee: spine_path_constraint_data
internal init(_ wrappee: spine_path_constraint_data) {

View File

@ -27,10 +27,11 @@
//
import Foundation
import SpineC
@objc(SpinePathConstraintMixTimeline)
@objcMembers
public final class PathConstraintMixTimeline: CurveTimeline, ConstraintTimeline {
public final class PathConstraintMixTimeline: CurveTimeline {
internal let wrappee: spine_path_constraint_mix_timeline
internal init(_ wrappee: spine_path_constraint_mix_timeline) {

View File

@ -27,6 +27,7 @@
//
import Foundation
import SpineC
@objc(SpinePathConstraintPose)
@objcMembers

View File

@ -27,6 +27,7 @@
//
import Foundation
import SpineC
@objc(SpinePathConstraintPositionTimeline)
@objcMembers

View File

@ -27,6 +27,7 @@
//
import Foundation
import SpineC
@objc(SpinePathConstraintSpacingTimeline)
@objcMembers

View File

@ -27,10 +27,11 @@
//
import Foundation
import SpineC
@objc(SpinePhysicsConstraint)
@objcMembers
public final class PhysicsConstraint: PosedActive, Posed, Constraint {
public final class PhysicsConstraint: PosedActive {
internal let wrappee: spine_physics_constraint
internal init(_ wrappee: spine_physics_constraint) {

View File

@ -27,6 +27,7 @@
//
import Foundation
import SpineC
@objc(SpinePhysicsConstraintDampingTimeline)
@objcMembers

View File

@ -27,10 +27,11 @@
//
import Foundation
import SpineC
@objc(SpinePhysicsConstraintData)
@objcMembers
public final class PhysicsConstraintData: PosedData, ConstraintData {
public final class PhysicsConstraintData: PosedData {
internal let wrappee: spine_physics_constraint_data
internal init(_ wrappee: spine_physics_constraint_data) {

View File

@ -27,6 +27,7 @@
//
import Foundation
import SpineC
@objc(SpinePhysicsConstraintGravityTimeline)
@objcMembers

View File

@ -27,6 +27,7 @@
//
import Foundation
import SpineC
@objc(SpinePhysicsConstraintInertiaTimeline)
@objcMembers

View File

@ -27,6 +27,7 @@
//
import Foundation
import SpineC
@objc(SpinePhysicsConstraintMassTimeline)
@objcMembers

View File

@ -27,6 +27,7 @@
//
import Foundation
import SpineC
@objc(SpinePhysicsConstraintMixTimeline)
@objcMembers

View File

@ -27,6 +27,7 @@
//
import Foundation
import SpineC
@objc(SpinePhysicsConstraintPose)
@objcMembers

View File

@ -27,10 +27,11 @@
//
import Foundation
import SpineC
@objc(SpinePhysicsConstraintResetTimeline)
@objcMembers
public final class PhysicsConstraintResetTimeline: Timeline, ConstraintTimeline {
public final class PhysicsConstraintResetTimeline: Timeline {
internal let wrappee: spine_physics_constraint_reset_timeline
internal init(_ wrappee: spine_physics_constraint_reset_timeline) {

View File

@ -27,6 +27,7 @@
//
import Foundation
import SpineC
@objc(SpinePhysicsConstraintStrengthTimeline)
@objcMembers

View File

@ -27,10 +27,11 @@
//
import Foundation
import SpineC
@objc(SpinePhysicsConstraintTimeline)
@objcMembers
public final class PhysicsConstraintTimeline: CurveTimeline1, ConstraintTimeline {
public final class PhysicsConstraintTimeline: CurveTimeline1 {
internal let wrappee: spine_physics_constraint_timeline
internal init(_ wrappee: spine_physics_constraint_timeline) {

View File

@ -27,6 +27,7 @@
//
import Foundation
import SpineC
@objc(SpinePhysicsConstraintWindTimeline)
@objcMembers

View File

@ -27,6 +27,7 @@
//
import Foundation
import SpineC
@objc(SpinePointAttachment)
@objcMembers

View File

@ -27,6 +27,7 @@
//
import Foundation
import SpineC
@objc(SpinePolygon)
@objcMembers

View File

@ -27,6 +27,7 @@
//
import Foundation
import SpineC
@objc(SpinePosed)
@objcMembers

View File

@ -27,6 +27,7 @@
//
import Foundation
import SpineC
@objc(SpinePosedActive)
@objcMembers

View File

@ -27,6 +27,7 @@
//
import Foundation
import SpineC
@objc(SpinePosedData)
@objcMembers

View File

@ -27,6 +27,7 @@
//
import Foundation
import SpineC
@objc(SpineRegionAttachment)
@objcMembers

View File

@ -27,6 +27,7 @@
//
import Foundation
import SpineC
@objc(SpineRenderCommand)
@objcMembers

View File

@ -27,6 +27,7 @@
//
import Foundation
import SpineC
@objc(SpineRgb2Timeline)
@objcMembers

View File

@ -27,6 +27,7 @@
//
import Foundation
import SpineC
@objc(SpineRgbTimeline)
@objcMembers

View File

@ -27,6 +27,7 @@
//
import Foundation
import SpineC
@objc(SpineRgba2Timeline)
@objcMembers

View File

@ -27,6 +27,7 @@
//
import Foundation
import SpineC
@objc(SpineRgbaTimeline)
@objcMembers

View File

@ -27,6 +27,7 @@
//
import Foundation
import SpineC
@objc(SpineRotateTimeline)
@objcMembers

View File

@ -27,6 +27,7 @@
//
import Foundation
import SpineC
@objc(SpineRtti)
@objcMembers

View File

@ -27,6 +27,7 @@
//
import Foundation
import SpineC
@objc(SpineScaleTimeline)
@objcMembers

View File

@ -27,6 +27,7 @@
//
import Foundation
import SpineC
@objc(SpineScaleXTimeline)
@objcMembers

View File

@ -27,6 +27,7 @@
//
import Foundation
import SpineC
@objc(SpineScaleYTimeline)
@objcMembers

View File

@ -27,6 +27,7 @@
//
import Foundation
import SpineC
@objc(SpineSequence)
@objcMembers

View File

@ -27,10 +27,11 @@
//
import Foundation
import SpineC
@objc(SpineSequenceTimeline)
@objcMembers
public final class SequenceTimeline: Timeline, SlotTimeline {
public final class SequenceTimeline: Timeline {
internal let wrappee: spine_sequence_timeline
internal init(_ wrappee: spine_sequence_timeline) {

View File

@ -27,6 +27,7 @@
//
import Foundation
import SpineC
@objc(SpineShearTimeline)
@objcMembers

Some files were not shown because too many files have changed in this diff Show More