diff --git a/.gitignore b/.gitignore index 330d167..5466cb2 100644 --- a/.gitignore +++ b/.gitignore @@ -2,6 +2,8 @@ # # gitignore contributors: remember to update Global/Xcode.gitignore, Objective-C.gitignore & Swift.gitignore +.DS_Store + ## User settings xcuserdata/ diff --git a/Example-iOS/Assets/bird.riv b/Example-iOS/Assets/bird.riv new file mode 100644 index 0000000..958755d Binary files /dev/null and b/Example-iOS/Assets/bird.riv differ diff --git a/Example-iOS/Assets/blend.riv b/Example-iOS/Assets/blend.riv new file mode 100644 index 0000000..c156c5e Binary files /dev/null and b/Example-iOS/Assets/blend.riv differ diff --git a/Example-iOS/Assets/funtime.riv b/Example-iOS/Assets/funtime.riv new file mode 100644 index 0000000..3c7694e Binary files /dev/null and b/Example-iOS/Assets/funtime.riv differ diff --git a/Example-iOS/Assets/juice.riv b/Example-iOS/Assets/juice.riv new file mode 100644 index 0000000..fa2244b Binary files /dev/null and b/Example-iOS/Assets/juice.riv differ diff --git a/Example-iOS/Assets/simple.riv b/Example-iOS/Assets/simple.riv new file mode 100644 index 0000000..625724a Binary files /dev/null and b/Example-iOS/Assets/simple.riv differ diff --git a/Example-iOS/Assets/truck.riv b/Example-iOS/Assets/truck.riv new file mode 100644 index 0000000..c9a238c Binary files /dev/null and b/Example-iOS/Assets/truck.riv differ diff --git a/Example-iOS/Assets/van.riv b/Example-iOS/Assets/van.riv new file mode 100644 index 0000000..59789db Binary files /dev/null and b/Example-iOS/Assets/van.riv differ diff --git a/Example-iOS/RiveExample.xcodeproj/project.pbxproj b/Example-iOS/RiveExample.xcodeproj/project.pbxproj new file mode 100644 index 0000000..d90eded --- /dev/null +++ b/Example-iOS/RiveExample.xcodeproj/project.pbxproj @@ -0,0 +1,472 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 50; + objects = { + +/* Begin PBXBuildFile section */ + C9696B1224FC704A0041502A /* juice.riv in Resources */ = {isa = PBXBuildFile; fileRef = C9696B1124FC704A0041502A /* juice.riv */; }; + C9696B1524FC71CE0041502A /* Utilities.swift in Sources */ = {isa = PBXBuildFile; fileRef = C9696B1424FC71CE0041502A /* Utilities.swift */; }; + C970484A250822F300CB3AB3 /* simple.riv in Resources */ = {isa = PBXBuildFile; fileRef = C9704847250822F300CB3AB3 /* simple.riv */; }; + C98F298B2513FD8C0076E802 /* blend.riv in Resources */ = {isa = PBXBuildFile; fileRef = C98F29882513FD8C0076E802 /* blend.riv */; }; + C9927C1B250986BF009F17F5 /* truck.riv in Resources */ = {isa = PBXBuildFile; fileRef = C9927C18250986BF009F17F5 /* truck.riv */; }; + C99E2FE3251E8DB4009227CA /* van.riv in Resources */ = {isa = PBXBuildFile; fileRef = C99E2FE0251E8DB4009227CA /* van.riv */; }; + C99E2FE8251E8E35009227CA /* bird.riv in Resources */ = {isa = PBXBuildFile; fileRef = C99E2FE6251E8E35009227CA /* bird.riv */; }; + C99E2FE9251E8E35009227CA /* funtime.riv in Resources */ = {isa = PBXBuildFile; fileRef = C99E2FE7251E8E35009227CA /* funtime.riv */; }; + C9C73E9824FC471E00EF9516 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = C9C73E9724FC471E00EF9516 /* AppDelegate.swift */; }; + C9C73E9A24FC471E00EF9516 /* SceneDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = C9C73E9924FC471E00EF9516 /* SceneDelegate.swift */; }; + C9C73E9C24FC471E00EF9516 /* ContentView.swift in Sources */ = {isa = PBXBuildFile; fileRef = C9C73E9B24FC471E00EF9516 /* ContentView.swift */; }; + C9C73E9E24FC471E00EF9516 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = C9C73E9D24FC471E00EF9516 /* Assets.xcassets */; }; + C9C73EA124FC471E00EF9516 /* Preview Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = C9C73EA024FC471E00EF9516 /* Preview Assets.xcassets */; }; + C9C73EA424FC471E00EF9516 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = C9C73EA224FC471E00EF9516 /* LaunchScreen.storyboard */; }; + C9E1AA45251E957F00BD52EC /* RiveRuntime.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C9E1AA3E251E94CC00BD52EC /* RiveRuntime.framework */; }; + C9E1AA46251E957F00BD52EC /* RiveRuntime.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = C9E1AA3E251E94CC00BD52EC /* RiveRuntime.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; +/* End PBXBuildFile section */ + +/* Begin PBXContainerItemProxy section */ + C9E1AA3D251E94CC00BD52EC /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = C9E1AA38251E94CC00BD52EC /* RiveRuntime.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = C9C73ED124FC478800EF9516; + remoteInfo = RiveRuntime; + }; + C9E1AA3F251E94CC00BD52EC /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = C9E1AA38251E94CC00BD52EC /* RiveRuntime.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = C9C73EDA24FC478900EF9516; + remoteInfo = RiveRuntimeTests; + }; +/* End PBXContainerItemProxy section */ + +/* Begin PBXCopyFilesBuildPhase section */ + C9C7420224FC53CF00EF9516 /* Embed Frameworks */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 10; + files = ( + C9E1AA46251E957F00BD52EC /* RiveRuntime.framework in Embed Frameworks */, + ); + name = "Embed Frameworks"; + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXCopyFilesBuildPhase section */ + +/* Begin PBXFileReference section */ + C9696B1124FC704A0041502A /* juice.riv */ = {isa = PBXFileReference; lastKnownFileType = file; path = juice.riv; sourceTree = ""; }; + C9696B1424FC71CE0041502A /* Utilities.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Utilities.swift; sourceTree = ""; }; + C9704847250822F300CB3AB3 /* simple.riv */ = {isa = PBXFileReference; lastKnownFileType = file; path = simple.riv; sourceTree = ""; }; + C98F29882513FD8C0076E802 /* blend.riv */ = {isa = PBXFileReference; lastKnownFileType = file; path = blend.riv; sourceTree = ""; }; + C9927C18250986BF009F17F5 /* truck.riv */ = {isa = PBXFileReference; lastKnownFileType = file; path = truck.riv; sourceTree = ""; }; + C99E2FE0251E8DB4009227CA /* van.riv */ = {isa = PBXFileReference; lastKnownFileType = file; path = van.riv; sourceTree = ""; }; + C99E2FE6251E8E35009227CA /* bird.riv */ = {isa = PBXFileReference; lastKnownFileType = file; path = bird.riv; sourceTree = ""; }; + C99E2FE7251E8E35009227CA /* funtime.riv */ = {isa = PBXFileReference; lastKnownFileType = file; path = funtime.riv; sourceTree = ""; }; + C9C73E9424FC471E00EF9516 /* RiveExample.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = RiveExample.app; sourceTree = BUILT_PRODUCTS_DIR; }; + C9C73E9724FC471E00EF9516 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; + C9C73E9924FC471E00EF9516 /* SceneDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SceneDelegate.swift; sourceTree = ""; }; + C9C73E9B24FC471E00EF9516 /* ContentView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ContentView.swift; sourceTree = ""; }; + C9C73E9D24FC471E00EF9516 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; + C9C73EA024FC471E00EF9516 /* Preview Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = "Preview Assets.xcassets"; sourceTree = ""; }; + C9C73EA324FC471E00EF9516 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; + C9C73EA524FC471E00EF9516 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + C9E1AA38251E94CC00BD52EC /* RiveRuntime.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RiveRuntime.xcodeproj; path = ../RiveRuntime.xcodeproj; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + C9C73E9124FC471E00EF9516 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + C9E1AA45251E957F00BD52EC /* RiveRuntime.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + C9696B0E24FC6FD10041502A /* Assets */ = { + isa = PBXGroup; + children = ( + C99E2FE6251E8E35009227CA /* bird.riv */, + C99E2FE7251E8E35009227CA /* funtime.riv */, + C99E2FE0251E8DB4009227CA /* van.riv */, + C98F29882513FD8C0076E802 /* blend.riv */, + C9927C18250986BF009F17F5 /* truck.riv */, + C9704847250822F300CB3AB3 /* simple.riv */, + C9696B1124FC704A0041502A /* juice.riv */, + ); + path = Assets; + sourceTree = ""; + }; + C9696B1324FC71B80041502A /* Helpers */ = { + isa = PBXGroup; + children = ( + C9696B1424FC71CE0041502A /* Utilities.swift */, + ); + path = Helpers; + sourceTree = ""; + }; + C9C73E8B24FC471E00EF9516 = { + isa = PBXGroup; + children = ( + C9E1AA38251E94CC00BD52EC /* RiveRuntime.xcodeproj */, + C9696B0E24FC6FD10041502A /* Assets */, + C9C73E9624FC471E00EF9516 /* Source */, + C9C73E9524FC471E00EF9516 /* Products */, + C9C741FF24FC53CF00EF9516 /* Frameworks */, + ); + sourceTree = ""; + }; + C9C73E9524FC471E00EF9516 /* Products */ = { + isa = PBXGroup; + children = ( + C9C73E9424FC471E00EF9516 /* RiveExample.app */, + ); + name = Products; + sourceTree = ""; + }; + C9C73E9624FC471E00EF9516 /* Source */ = { + isa = PBXGroup; + children = ( + C9696B1324FC71B80041502A /* Helpers */, + C9C73E9724FC471E00EF9516 /* AppDelegate.swift */, + C9C73E9924FC471E00EF9516 /* SceneDelegate.swift */, + C9C73E9B24FC471E00EF9516 /* ContentView.swift */, + C9C73E9D24FC471E00EF9516 /* Assets.xcassets */, + C9C73EA224FC471E00EF9516 /* LaunchScreen.storyboard */, + C9C73EA524FC471E00EF9516 /* Info.plist */, + C9C73E9F24FC471E00EF9516 /* Preview Content */, + ); + path = Source; + sourceTree = ""; + }; + C9C73E9F24FC471E00EF9516 /* Preview Content */ = { + isa = PBXGroup; + children = ( + C9C73EA024FC471E00EF9516 /* Preview Assets.xcassets */, + ); + path = "Preview Content"; + sourceTree = ""; + }; + C9C741FF24FC53CF00EF9516 /* Frameworks */ = { + isa = PBXGroup; + children = ( + ); + name = Frameworks; + sourceTree = ""; + }; + C9E1AA39251E94CC00BD52EC /* Products */ = { + isa = PBXGroup; + children = ( + C9E1AA3E251E94CC00BD52EC /* RiveRuntime.framework */, + C9E1AA40251E94CC00BD52EC /* RiveRuntimeTests.xctest */, + ); + name = Products; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + C9C73E9324FC471E00EF9516 /* RiveExample */ = { + isa = PBXNativeTarget; + buildConfigurationList = C9C73EBE24FC471E00EF9516 /* Build configuration list for PBXNativeTarget "RiveExample" */; + buildPhases = ( + C9C73E9024FC471E00EF9516 /* Sources */, + C9C73E9124FC471E00EF9516 /* Frameworks */, + C9C73E9224FC471E00EF9516 /* Resources */, + C9C7420224FC53CF00EF9516 /* Embed Frameworks */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = RiveExample; + productName = RiveExample; + productReference = C9C73E9424FC471E00EF9516 /* RiveExample.app */; + productType = "com.apple.product-type.application"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + C9C73E8C24FC471E00EF9516 /* Project object */ = { + isa = PBXProject; + attributes = { + LastSwiftUpdateCheck = 1160; + LastUpgradeCheck = 1200; + ORGANIZATIONNAME = Rive; + TargetAttributes = { + C9C73E9324FC471E00EF9516 = { + CreatedOnToolsVersion = 11.6; + }; + }; + }; + buildConfigurationList = C9C73E8F24FC471E00EF9516 /* Build configuration list for PBXProject "RiveExample" */; + compatibilityVersion = "Xcode 9.3"; + developmentRegion = en; + hasScannedForEncodings = 0; + knownRegions = ( + en, + Base, + ); + mainGroup = C9C73E8B24FC471E00EF9516; + productRefGroup = C9C73E9524FC471E00EF9516 /* Products */; + projectDirPath = ""; + projectReferences = ( + { + ProductGroup = C9E1AA39251E94CC00BD52EC /* Products */; + ProjectRef = C9E1AA38251E94CC00BD52EC /* RiveRuntime.xcodeproj */; + }, + ); + projectRoot = ""; + targets = ( + C9C73E9324FC471E00EF9516 /* RiveExample */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXReferenceProxy section */ + C9E1AA3E251E94CC00BD52EC /* RiveRuntime.framework */ = { + isa = PBXReferenceProxy; + fileType = wrapper.framework; + path = RiveRuntime.framework; + remoteRef = C9E1AA3D251E94CC00BD52EC /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + C9E1AA40251E94CC00BD52EC /* RiveRuntimeTests.xctest */ = { + isa = PBXReferenceProxy; + fileType = wrapper.cfbundle; + path = RiveRuntimeTests.xctest; + remoteRef = C9E1AA3F251E94CC00BD52EC /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; +/* End PBXReferenceProxy section */ + +/* Begin PBXResourcesBuildPhase section */ + C9C73E9224FC471E00EF9516 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + C99E2FE9251E8E35009227CA /* funtime.riv in Resources */, + C98F298B2513FD8C0076E802 /* blend.riv in Resources */, + C9696B1224FC704A0041502A /* juice.riv in Resources */, + C9C73EA424FC471E00EF9516 /* LaunchScreen.storyboard in Resources */, + C99E2FE3251E8DB4009227CA /* van.riv in Resources */, + C99E2FE8251E8E35009227CA /* bird.riv in Resources */, + C9C73EA124FC471E00EF9516 /* Preview Assets.xcassets in Resources */, + C970484A250822F300CB3AB3 /* simple.riv in Resources */, + C9C73E9E24FC471E00EF9516 /* Assets.xcassets in Resources */, + C9927C1B250986BF009F17F5 /* truck.riv in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + C9C73E9024FC471E00EF9516 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + C9C73E9824FC471E00EF9516 /* AppDelegate.swift in Sources */, + C9C73E9A24FC471E00EF9516 /* SceneDelegate.swift in Sources */, + C9696B1524FC71CE0041502A /* Utilities.swift in Sources */, + C9C73E9C24FC471E00EF9516 /* ContentView.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXVariantGroup section */ + C9C73EA224FC471E00EF9516 /* LaunchScreen.storyboard */ = { + isa = PBXVariantGroup; + children = ( + C9C73EA324FC471E00EF9516 /* Base */, + ); + name = LaunchScreen.storyboard; + sourceTree = ""; + }; +/* End PBXVariantGroup section */ + +/* Begin XCBuildConfiguration section */ + C9C73EBC24FC471E00EF9516 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 13.6; + MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; + MTL_FAST_MATH = YES; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = iphoneos; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + }; + name = Debug; + }; + C9C73EBD24FC471E00EF9516 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 13.6; + MTL_ENABLE_DEBUG_INFO = NO; + MTL_FAST_MATH = YES; + SDKROOT = iphoneos; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_OPTIMIZATION_LEVEL = "-O"; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; + C9C73EBF24FC471E00EF9516 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CODE_SIGN_STYLE = Automatic; + DEVELOPMENT_ASSET_PATHS = "\"Source/Preview Content\""; + ENABLE_PREVIEWS = YES; + INFOPLIST_FILE = Source/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + PRODUCT_BUNDLE_IDENTIFIER = rive.app.ios.runtime.example.RiveExample; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Debug; + }; + C9C73EC024FC471E00EF9516 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CODE_SIGN_STYLE = Automatic; + DEVELOPMENT_ASSET_PATHS = "\"Source/Preview Content\""; + ENABLE_PREVIEWS = YES; + INFOPLIST_FILE = Source/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + PRODUCT_BUNDLE_IDENTIFIER = rive.app.ios.runtime.example.RiveExample; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + C9C73E8F24FC471E00EF9516 /* Build configuration list for PBXProject "RiveExample" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + C9C73EBC24FC471E00EF9516 /* Debug */, + C9C73EBD24FC471E00EF9516 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + C9C73EBE24FC471E00EF9516 /* Build configuration list for PBXNativeTarget "RiveExample" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + C9C73EBF24FC471E00EF9516 /* Debug */, + C9C73EC024FC471E00EF9516 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = C9C73E8C24FC471E00EF9516 /* Project object */; +} diff --git a/Example-iOS/RiveExample.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/Example-iOS/RiveExample.xcodeproj/project.xcworkspace/contents.xcworkspacedata new file mode 100644 index 0000000..491b025 --- /dev/null +++ b/Example-iOS/RiveExample.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/Example-iOS/RiveExample.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/Example-iOS/RiveExample.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 0000000..18d9810 --- /dev/null +++ b/Example-iOS/RiveExample.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/Example-iOS/Source/AppDelegate.swift b/Example-iOS/Source/AppDelegate.swift new file mode 100644 index 0000000..75b387b --- /dev/null +++ b/Example-iOS/Source/AppDelegate.swift @@ -0,0 +1,37 @@ +// +// AppDelegate.swift +// RiveExample +// +// Created by Matt Sullivan on 8/30/20. +// Copyright © 2020 Rive. All rights reserved. +// + +import UIKit + +@UIApplicationMain +class AppDelegate: UIResponder, UIApplicationDelegate { + + + + func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool { + // Override point for customization after application launch. + return true + } + + // MARK: UISceneSession Lifecycle + + func application(_ application: UIApplication, configurationForConnecting connectingSceneSession: UISceneSession, options: UIScene.ConnectionOptions) -> UISceneConfiguration { + // Called when a new scene session is being created. + // Use this method to select a configuration to create the new scene with. + return UISceneConfiguration(name: "Default Configuration", sessionRole: connectingSceneSession.role) + } + + func application(_ application: UIApplication, didDiscardSceneSessions sceneSessions: Set) { + // Called when the user discards a scene session. + // If any sessions were discarded while the application was not running, this will be called shortly after application:didFinishLaunchingWithOptions. + // Use this method to release any resources that were specific to the discarded scenes, as they will not return. + } + + +} + diff --git a/Example-iOS/Source/Assets.xcassets/AppIcon.appiconset/Contents.json b/Example-iOS/Source/Assets.xcassets/AppIcon.appiconset/Contents.json new file mode 100644 index 0000000..9221b9b --- /dev/null +++ b/Example-iOS/Source/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -0,0 +1,98 @@ +{ + "images" : [ + { + "idiom" : "iphone", + "scale" : "2x", + "size" : "20x20" + }, + { + "idiom" : "iphone", + "scale" : "3x", + "size" : "20x20" + }, + { + "idiom" : "iphone", + "scale" : "2x", + "size" : "29x29" + }, + { + "idiom" : "iphone", + "scale" : "3x", + "size" : "29x29" + }, + { + "idiom" : "iphone", + "scale" : "2x", + "size" : "40x40" + }, + { + "idiom" : "iphone", + "scale" : "3x", + "size" : "40x40" + }, + { + "idiom" : "iphone", + "scale" : "2x", + "size" : "60x60" + }, + { + "idiom" : "iphone", + "scale" : "3x", + "size" : "60x60" + }, + { + "idiom" : "ipad", + "scale" : "1x", + "size" : "20x20" + }, + { + "idiom" : "ipad", + "scale" : "2x", + "size" : "20x20" + }, + { + "idiom" : "ipad", + "scale" : "1x", + "size" : "29x29" + }, + { + "idiom" : "ipad", + "scale" : "2x", + "size" : "29x29" + }, + { + "idiom" : "ipad", + "scale" : "1x", + "size" : "40x40" + }, + { + "idiom" : "ipad", + "scale" : "2x", + "size" : "40x40" + }, + { + "idiom" : "ipad", + "scale" : "1x", + "size" : "76x76" + }, + { + "idiom" : "ipad", + "scale" : "2x", + "size" : "76x76" + }, + { + "idiom" : "ipad", + "scale" : "2x", + "size" : "83.5x83.5" + }, + { + "idiom" : "ios-marketing", + "scale" : "1x", + "size" : "1024x1024" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Example-iOS/Source/Assets.xcassets/Contents.json b/Example-iOS/Source/Assets.xcassets/Contents.json new file mode 100644 index 0000000..73c0059 --- /dev/null +++ b/Example-iOS/Source/Assets.xcassets/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Example-iOS/Source/Base.lproj/LaunchScreen.storyboard b/Example-iOS/Source/Base.lproj/LaunchScreen.storyboard new file mode 100644 index 0000000..865e932 --- /dev/null +++ b/Example-iOS/Source/Base.lproj/LaunchScreen.storyboard @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Example-iOS/Source/ContentView.swift b/Example-iOS/Source/ContentView.swift new file mode 100644 index 0000000..e3570c5 --- /dev/null +++ b/Example-iOS/Source/ContentView.swift @@ -0,0 +1,25 @@ +// +// ContentView.swift +// RiveExample +// +// Created by Matt Sullivan on 8/30/20. +// Copyright © 2020 Rive. All rights reserved. +// + +import SwiftUI +import RiveRuntime + +struct ContentView: View { + var body: some View { + // Text("Hello, World!") + MyRive() + } +} + +struct MyRive: UIViewControllerRepresentable { + func makeUIViewController(context: Context) -> RiveViewController { + return RiveViewController(resource: "truck", withExtension: "riv") + } + + func updateUIViewController(_ uiViewController: RiveViewController, context: Context) {} +} diff --git a/Example-iOS/Source/Helpers/Utilities.swift b/Example-iOS/Source/Helpers/Utilities.swift new file mode 100644 index 0000000..3ae3fa0 --- /dev/null +++ b/Example-iOS/Source/Helpers/Utilities.swift @@ -0,0 +1,31 @@ +// +// Utilities.swift +// RiveExample +// +// Created by Matt Sullivan on 8/30/20. +// Copyright © 2020 Rive. All rights reserved. +// + +import Foundation + +func loadBytesFromFile(forResource res: String, withExtension ext: String) -> Data? +{ + guard let fileURL = Bundle.main.url(forResource: res, withExtension: ext) else { + print("Failed to create URL for file.") + return nil + } + do { + let data = try Data(contentsOf: fileURL) + return data + } + catch { + print("Error opening file: \(error)") + return nil + } +} + +extension Data { + var bytes : [UInt8]{ + return [UInt8](self) + } +} diff --git a/Example-iOS/Source/Info.plist b/Example-iOS/Source/Info.plist new file mode 100644 index 0000000..9742bf0 --- /dev/null +++ b/Example-iOS/Source/Info.plist @@ -0,0 +1,60 @@ + + + + + CFBundleDevelopmentRegion + $(DEVELOPMENT_LANGUAGE) + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + $(PRODUCT_BUNDLE_PACKAGE_TYPE) + CFBundleShortVersionString + 1.0 + CFBundleVersion + 1 + LSRequiresIPhoneOS + + UIApplicationSceneManifest + + UIApplicationSupportsMultipleScenes + + UISceneConfigurations + + UIWindowSceneSessionRoleApplication + + + UISceneConfigurationName + Default Configuration + UISceneDelegateClassName + $(PRODUCT_MODULE_NAME).SceneDelegate + + + + + UILaunchStoryboardName + LaunchScreen + UIRequiredDeviceCapabilities + + armv7 + + UISupportedInterfaceOrientations + + UIInterfaceOrientationPortrait + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + UISupportedInterfaceOrientations~ipad + + UIInterfaceOrientationPortrait + UIInterfaceOrientationPortraitUpsideDown + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + + diff --git a/Example-iOS/Source/Preview Content/Preview Assets.xcassets/Contents.json b/Example-iOS/Source/Preview Content/Preview Assets.xcassets/Contents.json new file mode 100644 index 0000000..73c0059 --- /dev/null +++ b/Example-iOS/Source/Preview Content/Preview Assets.xcassets/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Example-iOS/Source/SceneDelegate.swift b/Example-iOS/Source/SceneDelegate.swift new file mode 100644 index 0000000..a9c9761 --- /dev/null +++ b/Example-iOS/Source/SceneDelegate.swift @@ -0,0 +1,64 @@ +// +// SceneDelegate.swift +// RiveExample +// +// Created by Matt Sullivan on 8/30/20. +// Copyright © 2020 Rive. All rights reserved. +// + +import UIKit +import SwiftUI +import RiveRuntime + +class SceneDelegate: UIResponder, UIWindowSceneDelegate { + + var window: UIWindow? + + + func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) { + // Use this method to optionally configure and attach the UIWindow `window` to the provided UIWindowScene `scene`. + // If using a storyboard, the `window` property will automatically be initialized and attached to the scene. + // This delegate does not imply the connecting scene or session are new (see `application:configurationForConnectingSceneSession` instead). + + // Create the SwiftUI view that provides the window contents. + let contentView = ContentView() + + // Use a UIHostingController as window root view controller. + if let windowScene = scene as? UIWindowScene { + let window = UIWindow(windowScene: windowScene) + window.rootViewController = UIHostingController(rootView: contentView) + self.window = window + window.makeKeyAndVisible() + } + } + + func sceneDidDisconnect(_ scene: UIScene) { + // Called as the scene is being released by the system. + // This occurs shortly after the scene enters the background, or when its session is discarded. + // Release any resources associated with this scene that can be re-created the next time the scene connects. + // The scene may re-connect later, as its session was not neccessarily discarded (see `application:didDiscardSceneSessions` instead). + } + + func sceneDidBecomeActive(_ scene: UIScene) { + // Called when the scene has moved from an inactive state to an active state. + // Use this method to restart any tasks that were paused (or not yet started) when the scene was inactive. + } + + func sceneWillResignActive(_ scene: UIScene) { + // Called when the scene will move from an active state to an inactive state. + // This may occur due to temporary interruptions (ex. an incoming phone call). + } + + func sceneWillEnterForeground(_ scene: UIScene) { + // Called as the scene transitions from the background to the foreground. + // Use this method to undo the changes made on entering the background. + } + + func sceneDidEnterBackground(_ scene: UIScene) { + // Called as the scene transitions from the foreground to the background. + // Use this method to save data, release shared resources, and store enough scene-specific state information + // to restore the scene back to its current state. + } + + +} diff --git a/RiveRuntime.xcodeproj/project.pbxproj b/RiveRuntime.xcodeproj/project.pbxproj new file mode 100644 index 0000000..c6ffbd3 --- /dev/null +++ b/RiveRuntime.xcodeproj/project.pbxproj @@ -0,0 +1,1638 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 50; + objects = { + +/* Begin PBXBuildFile section */ + C9601F23250C143A0032AA07 /* RiveViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = C9601F21250C143A0032AA07 /* RiveViewController.h */; settings = {ATTRIBUTES = (Public, ); }; }; + C9601F24250C143A0032AA07 /* RiveViewController.mm in Sources */ = {isa = PBXBuildFile; fileRef = C9601F22250C143A0032AA07 /* RiveViewController.mm */; }; + C9601F27250C14560032AA07 /* RiveView.h in Headers */ = {isa = PBXBuildFile; fileRef = C9601F25250C14560032AA07 /* RiveView.h */; settings = {ATTRIBUTES = (Public, ); }; }; + C9601F28250C14560032AA07 /* RiveView.mm in Sources */ = {isa = PBXBuildFile; fileRef = C9601F26250C14560032AA07 /* RiveView.mm */; }; + C9601F2B250C25930032AA07 /* RiveRenderer.mm in Sources */ = {isa = PBXBuildFile; fileRef = C9601F2A250C25930032AA07 /* RiveRenderer.mm */; }; + C9601F69251004780032AA07 /* vec2d.hpp in Headers */ = {isa = PBXBuildFile; fileRef = C9601F2D251004770032AA07 /* vec2d.hpp */; }; + C9601F6C251004780032AA07 /* color.hpp in Headers */ = {isa = PBXBuildFile; fileRef = C9601F30251004770032AA07 /* color.hpp */; }; + C9601F6D251004780032AA07 /* transform_components.hpp in Headers */ = {isa = PBXBuildFile; fileRef = C9601F31251004770032AA07 /* transform_components.hpp */; }; + C9601F70251004780032AA07 /* trim_path_base.hpp in Headers */ = {isa = PBXBuildFile; fileRef = C9601F34251004770032AA07 /* trim_path_base.hpp */; }; + C9601F71251004780032AA07 /* command_path.hpp in Headers */ = {isa = PBXBuildFile; fileRef = C9601F35251004780032AA07 /* command_path.hpp */; }; + C9601F73251004780032AA07 /* stroke_cap.hpp in Headers */ = {isa = PBXBuildFile; fileRef = C9601F38251004780032AA07 /* stroke_cap.hpp */; }; + C9601F75251004780032AA07 /* stroke.hpp in Headers */ = {isa = PBXBuildFile; fileRef = C9601F3A251004780032AA07 /* stroke.hpp */; }; + C9601F79251004780032AA07 /* stroke_join.hpp in Headers */ = {isa = PBXBuildFile; fileRef = C9601F3E251004780032AA07 /* stroke_join.hpp */; }; + C9601F7A251004780032AA07 /* fill.hpp in Headers */ = {isa = PBXBuildFile; fileRef = C9601F3F251004780032AA07 /* fill.hpp */; }; + C9601F7C251004780032AA07 /* trim_path.hpp in Headers */ = {isa = PBXBuildFile; fileRef = C9601F41251004780032AA07 /* trim_path.hpp */; }; + C9601F7F251004780032AA07 /* linear_gradient.hpp in Headers */ = {isa = PBXBuildFile; fileRef = C9601F44251004780032AA07 /* linear_gradient.hpp */; }; + C9601F80251004780032AA07 /* stroke_effect.hpp in Headers */ = {isa = PBXBuildFile; fileRef = C9601F45251004780032AA07 /* stroke_effect.hpp */; }; + C9601F82251004780032AA07 /* straight_vertex.hpp in Headers */ = {isa = PBXBuildFile; fileRef = C9601F48251004780032AA07 /* straight_vertex.hpp */; }; + C9601F84251004780032AA07 /* gradient_stop.hpp in Headers */ = {isa = PBXBuildFile; fileRef = C9601F4B251004780032AA07 /* gradient_stop.hpp */; }; + C9601F86251004780032AA07 /* shape_paint_mutator.hpp in Headers */ = {isa = PBXBuildFile; fileRef = C9601F4D251004780032AA07 /* shape_paint_mutator.hpp */; }; + C9601F87251004780032AA07 /* blend_mode.hpp in Headers */ = {isa = PBXBuildFile; fileRef = C9601F4E251004780032AA07 /* blend_mode.hpp */; }; + C9601F88251004780032AA07 /* shape_paint.hpp in Headers */ = {isa = PBXBuildFile; fileRef = C9601F4F251004780032AA07 /* shape_paint.hpp */; }; + C9601F8B251004780032AA07 /* radial_gradient.hpp in Headers */ = {isa = PBXBuildFile; fileRef = C9601F52251004780032AA07 /* radial_gradient.hpp */; }; + C9601F8D251004780032AA07 /* color.hpp in Headers */ = {isa = PBXBuildFile; fileRef = C9601F54251004780032AA07 /* color.hpp */; }; + C9601F8E251004780032AA07 /* solid_color.hpp in Headers */ = {isa = PBXBuildFile; fileRef = C9601F55251004780032AA07 /* solid_color.hpp */; }; + C9601F91251004780032AA07 /* path_composer.hpp in Headers */ = {isa = PBXBuildFile; fileRef = C9601F58251004780032AA07 /* path_composer.hpp */; }; + C9601F92251004780032AA07 /* shape_paint_container.hpp in Headers */ = {isa = PBXBuildFile; fileRef = C9601F59251004780032AA07 /* shape_paint_container.hpp */; }; + C9601F93251004780032AA07 /* cubic_mirrored_vertex.hpp in Headers */ = {isa = PBXBuildFile; fileRef = C9601F5A251004780032AA07 /* cubic_mirrored_vertex.hpp */; }; + C9601F94251004780032AA07 /* path_space.hpp in Headers */ = {isa = PBXBuildFile; fileRef = C9601F5B251004780032AA07 /* path_space.hpp */; }; + C9601F95251004780032AA07 /* ellipse.hpp in Headers */ = {isa = PBXBuildFile; fileRef = C9601F5C251004780032AA07 /* ellipse.hpp */; }; + C9601F96251004780032AA07 /* clipping_shape.hpp in Headers */ = {isa = PBXBuildFile; fileRef = C9601F5D251004780032AA07 /* clipping_shape.hpp */; }; + C9601F97251004780032AA07 /* metrics_path.hpp in Headers */ = {isa = PBXBuildFile; fileRef = C9601F5E251004780032AA07 /* metrics_path.hpp */; }; + C9601F98251004780032AA07 /* cubic_vertex.hpp in Headers */ = {isa = PBXBuildFile; fileRef = C9601F5F251004780032AA07 /* cubic_vertex.hpp */; }; + C9601F9A251004780032AA07 /* triangle.hpp in Headers */ = {isa = PBXBuildFile; fileRef = C9601F61251004780032AA07 /* triangle.hpp */; }; + C9601F9B251004780032AA07 /* path.hpp in Headers */ = {isa = PBXBuildFile; fileRef = C9601F62251004780032AA07 /* path.hpp */; }; + C9601F9D251004780032AA07 /* parametric_path.hpp in Headers */ = {isa = PBXBuildFile; fileRef = C9601F64251004780032AA07 /* parametric_path.hpp */; }; + C9601FA0251004780032AA07 /* cubic_asymmetric_vertex.hpp in Headers */ = {isa = PBXBuildFile; fileRef = C9601F67251004780032AA07 /* cubic_asymmetric_vertex.hpp */; }; + C9601FAF251004950032AA07 /* trim_path.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C9601FA2251004950032AA07 /* trim_path.cpp */; }; + C9601FB0251004950032AA07 /* metrics_path.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C9601FA3251004950032AA07 /* metrics_path.cpp */; }; + C9601FB3251004950032AA07 /* shape_paint.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C9601FA7251004950032AA07 /* shape_paint.cpp */; }; + C9601FB6251004950032AA07 /* color.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C9601FAA251004950032AA07 /* color.cpp */; }; + C9601FB9251004950032AA07 /* gradient_stop.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C9601FAD251004950032AA07 /* gradient_stop.cpp */; }; + C9601FBA251004950032AA07 /* stroke.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C9601FAE251004950032AA07 /* stroke.cpp */; }; + C960285B251FD59800704818 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C960285A251FD59800704818 /* UIKit.framework */; }; + C98F296F2513FA8B0076E802 /* keyframe_id.hpp in Headers */ = {isa = PBXBuildFile; fileRef = C98F296E2513FA8B0076E802 /* keyframe_id.hpp */; }; + C98F29782513FAAE0076E802 /* draw_rules.hpp in Headers */ = {isa = PBXBuildFile; fileRef = C98F29722513FAAE0076E802 /* draw_rules.hpp */; }; + C98F29792513FAAE0076E802 /* draw_target_base.hpp in Headers */ = {isa = PBXBuildFile; fileRef = C98F29732513FAAE0076E802 /* draw_target_base.hpp */; }; + C98F297A2513FAAE0076E802 /* draw_rules_base.hpp in Headers */ = {isa = PBXBuildFile; fileRef = C98F29742513FAAE0076E802 /* draw_rules_base.hpp */; }; + C98F297B2513FAAE0076E802 /* draw_target_placement.hpp in Headers */ = {isa = PBXBuildFile; fileRef = C98F29752513FAAE0076E802 /* draw_target_placement.hpp */; }; + C98F297C2513FAAE0076E802 /* draw_target.hpp in Headers */ = {isa = PBXBuildFile; fileRef = C98F29762513FAAE0076E802 /* draw_target.hpp */; }; + C98F297D2513FAAE0076E802 /* keyframe_id_base.hpp in Headers */ = {isa = PBXBuildFile; fileRef = C98F29772513FAAE0076E802 /* keyframe_id_base.hpp */; }; + C98F29832513FAC30076E802 /* draw_target.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C98F29802513FAC30076E802 /* draw_target.cpp */; }; + C98F29842513FAC30076E802 /* keyframe_id.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C98F29812513FAC30076E802 /* keyframe_id.cpp */; }; + C98F29852513FAC30076E802 /* draw_rules.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C98F29822513FAC30076E802 /* draw_rules.cpp */; }; + C9C73EE024FC478900EF9516 /* RiveRuntimeTests.m in Sources */ = {isa = PBXBuildFile; fileRef = C9C73EDF24FC478900EF9516 /* RiveRuntimeTests.m */; }; + C9C73EE224FC478900EF9516 /* RiveRuntime.h in Headers */ = {isa = PBXBuildFile; fileRef = C9C73ED424FC478800EF9516 /* RiveRuntime.h */; settings = {ATTRIBUTES = (Public, ); }; }; + C9C7413724FC4F0500EF9516 /* core_bool_type.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C9C7407024FC4F0400EF9516 /* core_bool_type.cpp */; }; + C9C7413824FC4F0500EF9516 /* core_uint_type.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C9C7407124FC4F0400EF9516 /* core_uint_type.cpp */; }; + C9C7413924FC4F0500EF9516 /* core_double_type.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C9C7407224FC4F0400EF9516 /* core_double_type.cpp */; }; + C9C7413A24FC4F0500EF9516 /* core_string_type.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C9C7407324FC4F0400EF9516 /* core_string_type.cpp */; }; + C9C7413B24FC4F0500EF9516 /* core_color_type.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C9C7407424FC4F0400EF9516 /* core_color_type.cpp */; }; + C9C7413C24FC4F0500EF9516 /* binary_reader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C9C7407524FC4F0400EF9516 /* binary_reader.cpp */; }; + C9C7413D24FC4F0500EF9516 /* transform_component.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C9C7407624FC4F0400EF9516 /* transform_component.cpp */; }; + C9C7413E24FC4F0500EF9516 /* component.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C9C7407724FC4F0400EF9516 /* component.cpp */; }; + C9C7413F24FC4F0500EF9516 /* node.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C9C7407824FC4F0400EF9516 /* node.cpp */; }; + C9C7414024FC4F0500EF9516 /* layout.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C9C7407924FC4F0400EF9516 /* layout.cpp */; }; + C9C7414124FC4F0500EF9516 /* keyframe_color.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C9C7407B24FC4F0400EF9516 /* keyframe_color.cpp */; }; + C9C7414224FC4F0500EF9516 /* keyed_object.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C9C7407C24FC4F0400EF9516 /* keyed_object.cpp */; }; + C9C7414324FC4F0500EF9516 /* linear_animation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C9C7407D24FC4F0400EF9516 /* linear_animation.cpp */; }; + C9C7414424FC4F0500EF9516 /* linear_animation_instance.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C9C7407E24FC4F0400EF9516 /* linear_animation_instance.cpp */; }; + C9C7414524FC4F0500EF9516 /* keyframe_double.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C9C7407F24FC4F0400EF9516 /* keyframe_double.cpp */; }; + C9C7414624FC4F0500EF9516 /* keyframe.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C9C7408024FC4F0400EF9516 /* keyframe.cpp */; }; + C9C7414724FC4F0500EF9516 /* cubic_interpolator.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C9C7408124FC4F0400EF9516 /* cubic_interpolator.cpp */; }; + C9C7414824FC4F0500EF9516 /* keyed_property.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C9C7408224FC4F0400EF9516 /* keyed_property.cpp */; }; + C9C7414A24FC4F0500EF9516 /* drawable.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C9C7408424FC4F0400EF9516 /* drawable.cpp */; }; + C9C7414B24FC4F0500EF9516 /* solid_color.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C9C7408724FC4F0400EF9516 /* solid_color.cpp */; }; + C9C7414C24FC4F0500EF9516 /* linear_gradient.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C9C7408824FC4F0400EF9516 /* linear_gradient.cpp */; }; + C9C7414E24FC4F0500EF9516 /* fill.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C9C7408A24FC4F0400EF9516 /* fill.cpp */; }; + C9C7414F24FC4F0500EF9516 /* radial_gradient.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C9C7408B24FC4F0400EF9516 /* radial_gradient.cpp */; }; + C9C7415124FC4F0500EF9516 /* shape_paint_mutator.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C9C7408D24FC4F0400EF9516 /* shape_paint_mutator.cpp */; }; + C9C7415424FC4F0500EF9516 /* points_path.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C9C7409024FC4F0400EF9516 /* points_path.cpp */; }; + C9C7415524FC4F0500EF9516 /* cubic_asymmetric_vertex.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C9C7409124FC4F0400EF9516 /* cubic_asymmetric_vertex.cpp */; }; + C9C7415624FC4F0500EF9516 /* cubic_detached_vertex.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C9C7409224FC4F0400EF9516 /* cubic_detached_vertex.cpp */; }; + C9C7415724FC4F0500EF9516 /* cubic_vertex.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C9C7409324FC4F0400EF9516 /* cubic_vertex.cpp */; }; + C9C7415824FC4F0500EF9516 /* shape.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C9C7409424FC4F0400EF9516 /* shape.cpp */; }; + C9C7415924FC4F0500EF9516 /* path.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C9C7409524FC4F0400EF9516 /* path.cpp */; }; + C9C7415A24FC4F0500EF9516 /* parametric_path.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C9C7409624FC4F0400EF9516 /* parametric_path.cpp */; }; + C9C7415B24FC4F0500EF9516 /* path_vertex.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C9C7409724FC4F0400EF9516 /* path_vertex.cpp */; }; + C9C7415C24FC4F0500EF9516 /* rectangle.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C9C7409824FC4F0400EF9516 /* rectangle.cpp */; }; + C9C7415D24FC4F0500EF9516 /* straight_vertex.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C9C7409924FC4F0400EF9516 /* straight_vertex.cpp */; }; + C9C7415E24FC4F0500EF9516 /* path_composer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C9C7409A24FC4F0400EF9516 /* path_composer.cpp */; }; + C9C7415F24FC4F0500EF9516 /* shape_paint_container.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C9C7409B24FC4F0400EF9516 /* shape_paint_container.cpp */; }; + C9C7416024FC4F0500EF9516 /* cubic_mirrored_vertex.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C9C7409C24FC4F0400EF9516 /* cubic_mirrored_vertex.cpp */; }; + C9C7416124FC4F0500EF9516 /* ellipse.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C9C7409D24FC4F0400EF9516 /* ellipse.cpp */; }; + C9C7416224FC4F0500EF9516 /* clipping_shape.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C9C7409E24FC4F0400EF9516 /* clipping_shape.cpp */; }; + C9C7416324FC4F0500EF9516 /* aabb.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C9C740A024FC4F0400EF9516 /* aabb.cpp */; }; + C9C7416424FC4F0500EF9516 /* vec2d.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C9C740A124FC4F0400EF9516 /* vec2d.cpp */; }; + C9C7416524FC4F0500EF9516 /* mat2d.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C9C740A224FC4F0400EF9516 /* mat2d.cpp */; }; + C9C7416624FC4F0500EF9516 /* dependency_sorter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C9C740A324FC4F0400EF9516 /* dependency_sorter.cpp */; }; + C9C7416724FC4F0500EF9516 /* artboard.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C9C740A424FC4F0400EF9516 /* artboard.cpp */; }; + C9C7416824FC4F0500EF9516 /* file.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C9C740A524FC4F0400EF9516 /* file.cpp */; }; + C9C7416924FC4F0500EF9516 /* root_bone.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C9C740A724FC4F0400EF9516 /* root_bone.cpp */; }; + C9C7416A24FC4F0500EF9516 /* bone.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C9C740A824FC4F0400EF9516 /* bone.cpp */; }; + C9C7416B24FC4F0500EF9516 /* skinnable.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C9C740A924FC4F0400EF9516 /* skinnable.cpp */; }; + C9C7416C24FC4F0500EF9516 /* weight.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C9C740AA24FC4F0400EF9516 /* weight.cpp */; }; + C9C7416D24FC4F0500EF9516 /* skin.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C9C740AB24FC4F0400EF9516 /* skin.cpp */; }; + C9C7416E24FC4F0500EF9516 /* tendon.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C9C740AC24FC4F0400EF9516 /* tendon.cpp */; }; + C9C7416F24FC4F0500EF9516 /* core_registry.hpp in Headers */ = {isa = PBXBuildFile; fileRef = C9C740AF24FC4F0400EF9516 /* core_registry.hpp */; }; + C9C7417024FC4F0500EF9516 /* node_base.hpp in Headers */ = {isa = PBXBuildFile; fileRef = C9C740B024FC4F0400EF9516 /* node_base.hpp */; }; + C9C7417124FC4F0500EF9516 /* transform_component_base.hpp in Headers */ = {isa = PBXBuildFile; fileRef = C9C740B124FC4F0400EF9516 /* transform_component_base.hpp */; }; + C9C7417224FC4F0500EF9516 /* artboard_base.hpp in Headers */ = {isa = PBXBuildFile; fileRef = C9C740B224FC4F0400EF9516 /* artboard_base.hpp */; }; + C9C7417324FC4F0500EF9516 /* keyframe_color_base.hpp in Headers */ = {isa = PBXBuildFile; fileRef = C9C740B424FC4F0400EF9516 /* keyframe_color_base.hpp */; }; + C9C7417424FC4F0500EF9516 /* keyed_property_base.hpp in Headers */ = {isa = PBXBuildFile; fileRef = C9C740B524FC4F0400EF9516 /* keyed_property_base.hpp */; }; + C9C7417524FC4F0500EF9516 /* keyframe_base.hpp in Headers */ = {isa = PBXBuildFile; fileRef = C9C740B624FC4F0400EF9516 /* keyframe_base.hpp */; }; + C9C7417624FC4F0500EF9516 /* animation_base.hpp in Headers */ = {isa = PBXBuildFile; fileRef = C9C740B724FC4F0400EF9516 /* animation_base.hpp */; }; + C9C7417724FC4F0500EF9516 /* cubic_interpolator_base.hpp in Headers */ = {isa = PBXBuildFile; fileRef = C9C740B824FC4F0400EF9516 /* cubic_interpolator_base.hpp */; }; + C9C7417824FC4F0500EF9516 /* keyframe_draw_order_value_base.hpp in Headers */ = {isa = PBXBuildFile; fileRef = C9C740B924FC4F0400EF9516 /* keyframe_draw_order_value_base.hpp */; }; + C9C7417924FC4F0500EF9516 /* keyframe_draw_order_base.hpp in Headers */ = {isa = PBXBuildFile; fileRef = C9C740BA24FC4F0400EF9516 /* keyframe_draw_order_base.hpp */; }; + C9C7417A24FC4F0500EF9516 /* linear_animation_base.hpp in Headers */ = {isa = PBXBuildFile; fileRef = C9C740BB24FC4F0400EF9516 /* linear_animation_base.hpp */; }; + C9C7417B24FC4F0500EF9516 /* keyed_object_base.hpp in Headers */ = {isa = PBXBuildFile; fileRef = C9C740BC24FC4F0400EF9516 /* keyed_object_base.hpp */; }; + C9C7417C24FC4F0500EF9516 /* keyframe_double_base.hpp in Headers */ = {isa = PBXBuildFile; fileRef = C9C740BD24FC4F0400EF9516 /* keyframe_double_base.hpp */; }; + C9C7417D24FC4F0500EF9516 /* linear_gradient_base.hpp in Headers */ = {isa = PBXBuildFile; fileRef = C9C740C024FC4F0400EF9516 /* linear_gradient_base.hpp */; }; + C9C7417E24FC4F0500EF9516 /* stroke_base.hpp in Headers */ = {isa = PBXBuildFile; fileRef = C9C740C124FC4F0400EF9516 /* stroke_base.hpp */; }; + C9C7417F24FC4F0500EF9516 /* fill_base.hpp in Headers */ = {isa = PBXBuildFile; fileRef = C9C740C224FC4F0400EF9516 /* fill_base.hpp */; }; + C9C7418024FC4F0500EF9516 /* shape_paint_base.hpp in Headers */ = {isa = PBXBuildFile; fileRef = C9C740C324FC4F0400EF9516 /* shape_paint_base.hpp */; }; + C9C7418124FC4F0500EF9516 /* solid_color_base.hpp in Headers */ = {isa = PBXBuildFile; fileRef = C9C740C424FC4F0400EF9516 /* solid_color_base.hpp */; }; + C9C7418224FC4F0500EF9516 /* radial_gradient_base.hpp in Headers */ = {isa = PBXBuildFile; fileRef = C9C740C524FC4F0400EF9516 /* radial_gradient_base.hpp */; }; + C9C7418324FC4F0500EF9516 /* gradient_stop_base.hpp in Headers */ = {isa = PBXBuildFile; fileRef = C9C740C624FC4F0400EF9516 /* gradient_stop_base.hpp */; }; + C9C7418424FC4F0500EF9516 /* parametric_path_base.hpp in Headers */ = {isa = PBXBuildFile; fileRef = C9C740C724FC4F0400EF9516 /* parametric_path_base.hpp */; }; + C9C7418524FC4F0500EF9516 /* cubic_asymmetric_vertex_base.hpp in Headers */ = {isa = PBXBuildFile; fileRef = C9C740C824FC4F0400EF9516 /* cubic_asymmetric_vertex_base.hpp */; }; + C9C7418624FC4F0500EF9516 /* cubic_vertex_base.hpp in Headers */ = {isa = PBXBuildFile; fileRef = C9C740C924FC4F0400EF9516 /* cubic_vertex_base.hpp */; }; + C9C7418724FC4F0500EF9516 /* ellipse_base.hpp in Headers */ = {isa = PBXBuildFile; fileRef = C9C740CA24FC4F0400EF9516 /* ellipse_base.hpp */; }; + C9C7418824FC4F0500EF9516 /* path_composer_base.hpp in Headers */ = {isa = PBXBuildFile; fileRef = C9C740CB24FC4F0400EF9516 /* path_composer_base.hpp */; }; + C9C7418924FC4F0500EF9516 /* points_path_base.hpp in Headers */ = {isa = PBXBuildFile; fileRef = C9C740CC24FC4F0400EF9516 /* points_path_base.hpp */; }; + C9C7418A24FC4F0500EF9516 /* triangle_base.hpp in Headers */ = {isa = PBXBuildFile; fileRef = C9C740CD24FC4F0400EF9516 /* triangle_base.hpp */; }; + C9C7418B24FC4F0500EF9516 /* shape_base.hpp in Headers */ = {isa = PBXBuildFile; fileRef = C9C740CE24FC4F0400EF9516 /* shape_base.hpp */; }; + C9C7418C24FC4F0500EF9516 /* rectangle_base.hpp in Headers */ = {isa = PBXBuildFile; fileRef = C9C740CF24FC4F0400EF9516 /* rectangle_base.hpp */; }; + C9C7418D24FC4F0500EF9516 /* cubic_mirrored_vertex_base.hpp in Headers */ = {isa = PBXBuildFile; fileRef = C9C740D024FC4F0400EF9516 /* cubic_mirrored_vertex_base.hpp */; }; + C9C7418E24FC4F0500EF9516 /* straight_vertex_base.hpp in Headers */ = {isa = PBXBuildFile; fileRef = C9C740D124FC4F0400EF9516 /* straight_vertex_base.hpp */; }; + C9C7418F24FC4F0500EF9516 /* path_base.hpp in Headers */ = {isa = PBXBuildFile; fileRef = C9C740D224FC4F0400EF9516 /* path_base.hpp */; }; + C9C7419024FC4F0500EF9516 /* cubic_detached_vertex_base.hpp in Headers */ = {isa = PBXBuildFile; fileRef = C9C740D324FC4F0400EF9516 /* cubic_detached_vertex_base.hpp */; }; + C9C7419124FC4F0500EF9516 /* clipping_shape_base.hpp in Headers */ = {isa = PBXBuildFile; fileRef = C9C740D424FC4F0400EF9516 /* clipping_shape_base.hpp */; }; + C9C7419224FC4F0500EF9516 /* path_vertex_base.hpp in Headers */ = {isa = PBXBuildFile; fileRef = C9C740D524FC4F0400EF9516 /* path_vertex_base.hpp */; }; + C9C7419324FC4F0500EF9516 /* container_component_base.hpp in Headers */ = {isa = PBXBuildFile; fileRef = C9C740D624FC4F0400EF9516 /* container_component_base.hpp */; }; + C9C7419424FC4F0500EF9516 /* component_base.hpp in Headers */ = {isa = PBXBuildFile; fileRef = C9C740D724FC4F0400EF9516 /* component_base.hpp */; }; + C9C7419524FC4F0500EF9516 /* weight_base.hpp in Headers */ = {isa = PBXBuildFile; fileRef = C9C740D924FC4F0400EF9516 /* weight_base.hpp */; }; + C9C7419624FC4F0500EF9516 /* root_bone_base.hpp in Headers */ = {isa = PBXBuildFile; fileRef = C9C740DA24FC4F0400EF9516 /* root_bone_base.hpp */; }; + C9C7419724FC4F0500EF9516 /* cubic_weight_base.hpp in Headers */ = {isa = PBXBuildFile; fileRef = C9C740DB24FC4F0400EF9516 /* cubic_weight_base.hpp */; }; + C9C7419824FC4F0500EF9516 /* bone_base.hpp in Headers */ = {isa = PBXBuildFile; fileRef = C9C740DC24FC4F0400EF9516 /* bone_base.hpp */; }; + C9C7419924FC4F0500EF9516 /* skin_base.hpp in Headers */ = {isa = PBXBuildFile; fileRef = C9C740DD24FC4F0400EF9516 /* skin_base.hpp */; }; + C9C7419A24FC4F0500EF9516 /* tendon_base.hpp in Headers */ = {isa = PBXBuildFile; fileRef = C9C740DE24FC4F0400EF9516 /* tendon_base.hpp */; }; + C9C7419B24FC4F0500EF9516 /* skeletal_component_base.hpp in Headers */ = {isa = PBXBuildFile; fileRef = C9C740DF24FC4F0400EF9516 /* skeletal_component_base.hpp */; }; + C9C7419C24FC4F0500EF9516 /* backboard_base.hpp in Headers */ = {isa = PBXBuildFile; fileRef = C9C740E024FC4F0400EF9516 /* backboard_base.hpp */; }; + C9C7419D24FC4F0500EF9516 /* drawable_base.hpp in Headers */ = {isa = PBXBuildFile; fileRef = C9C740E124FC4F0400EF9516 /* drawable_base.hpp */; }; + C9C7419E24FC4F0500EF9516 /* backboard.hpp in Headers */ = {isa = PBXBuildFile; fileRef = C9C740E224FC4F0400EF9516 /* backboard.hpp */; }; + C9C7419F24FC4F0500EF9516 /* reader.h in Headers */ = {isa = PBXBuildFile; fileRef = C9C740E424FC4F0400EF9516 /* reader.h */; }; + C9C741A024FC4F0500EF9516 /* core_color_type.hpp in Headers */ = {isa = PBXBuildFile; fileRef = C9C740E624FC4F0400EF9516 /* core_color_type.hpp */; }; + C9C741A124FC4F0500EF9516 /* core_uint_type.hpp in Headers */ = {isa = PBXBuildFile; fileRef = C9C740E724FC4F0400EF9516 /* core_uint_type.hpp */; }; + C9C741A224FC4F0500EF9516 /* core_double_type.hpp in Headers */ = {isa = PBXBuildFile; fileRef = C9C740E824FC4F0400EF9516 /* core_double_type.hpp */; }; + C9C741A324FC4F0500EF9516 /* core_string_type.hpp in Headers */ = {isa = PBXBuildFile; fileRef = C9C740E924FC4F0400EF9516 /* core_string_type.hpp */; }; + C9C741A424FC4F0500EF9516 /* core_bool_type.hpp in Headers */ = {isa = PBXBuildFile; fileRef = C9C740EA24FC4F0400EF9516 /* core_bool_type.hpp */; }; + C9C741A524FC4F0500EF9516 /* binary_reader.hpp in Headers */ = {isa = PBXBuildFile; fileRef = C9C740EB24FC4F0400EF9516 /* binary_reader.hpp */; }; + C9C741A624FC4F0500EF9516 /* status_code.hpp in Headers */ = {isa = PBXBuildFile; fileRef = C9C740EC24FC4F0400EF9516 /* status_code.hpp */; }; + C9C741A724FC4F0500EF9516 /* component_dirt.hpp in Headers */ = {isa = PBXBuildFile; fileRef = C9C740ED24FC4F0400EF9516 /* component_dirt.hpp */; }; + C9C741A824FC4F0500EF9516 /* renderer.hpp in Headers */ = {isa = PBXBuildFile; fileRef = C9C740EE24FC4F0400EF9516 /* renderer.hpp */; }; + C9C741AA24FC4F0500EF9516 /* file.hpp in Headers */ = {isa = PBXBuildFile; fileRef = C9C740F024FC4F0400EF9516 /* file.hpp */; }; + C9C741AB24FC4F0500EF9516 /* container_component.hpp in Headers */ = {isa = PBXBuildFile; fileRef = C9C740F124FC4F0400EF9516 /* container_component.hpp */; }; + C9C741AC24FC4F0500EF9516 /* cubic_interpolator.hpp in Headers */ = {isa = PBXBuildFile; fileRef = C9C740F324FC4F0500EF9516 /* cubic_interpolator.hpp */; }; + C9C741AD24FC4F0500EF9516 /* keyed_property.hpp in Headers */ = {isa = PBXBuildFile; fileRef = C9C740F424FC4F0500EF9516 /* keyed_property.hpp */; }; + C9C741B024FC4F0500EF9516 /* animation.hpp in Headers */ = {isa = PBXBuildFile; fileRef = C9C740F724FC4F0500EF9516 /* animation.hpp */; }; + C9C741B124FC4F0500EF9516 /* keyframe.hpp in Headers */ = {isa = PBXBuildFile; fileRef = C9C740F824FC4F0500EF9516 /* keyframe.hpp */; }; + C9C741B224FC4F0500EF9516 /* keyed_object.hpp in Headers */ = {isa = PBXBuildFile; fileRef = C9C740F924FC4F0500EF9516 /* keyed_object.hpp */; }; + C9C741B324FC4F0500EF9516 /* linear_animation.hpp in Headers */ = {isa = PBXBuildFile; fileRef = C9C740FA24FC4F0500EF9516 /* linear_animation.hpp */; }; + C9C741B424FC4F0500EF9516 /* linear_animation_instance.hpp in Headers */ = {isa = PBXBuildFile; fileRef = C9C740FB24FC4F0500EF9516 /* linear_animation_instance.hpp */; }; + C9C741B524FC4F0500EF9516 /* keyframe_double.hpp in Headers */ = {isa = PBXBuildFile; fileRef = C9C740FC24FC4F0500EF9516 /* keyframe_double.hpp */; }; + C9C741B624FC4F0500EF9516 /* loop.hpp in Headers */ = {isa = PBXBuildFile; fileRef = C9C740FD24FC4F0500EF9516 /* loop.hpp */; }; + C9C741B724FC4F0500EF9516 /* keyframe_color.hpp in Headers */ = {isa = PBXBuildFile; fileRef = C9C740FE24FC4F0500EF9516 /* keyframe_color.hpp */; }; + C9C741CC24FC4F0500EF9516 /* shape.hpp in Headers */ = {isa = PBXBuildFile; fileRef = C9C7411524FC4F0500EF9516 /* shape.hpp */; }; + C9C741CF24FC4F0500EF9516 /* path_vertex.hpp in Headers */ = {isa = PBXBuildFile; fileRef = C9C7411824FC4F0500EF9516 /* path_vertex.hpp */; }; + C9C741D124FC4F0500EF9516 /* rectangle.hpp in Headers */ = {isa = PBXBuildFile; fileRef = C9C7411A24FC4F0500EF9516 /* rectangle.hpp */; }; + C9C741D224FC4F0500EF9516 /* points_path.hpp in Headers */ = {isa = PBXBuildFile; fileRef = C9C7411B24FC4F0500EF9516 /* points_path.hpp */; }; + C9C741D424FC4F0500EF9516 /* cubic_detached_vertex.hpp in Headers */ = {isa = PBXBuildFile; fileRef = C9C7411D24FC4F0500EF9516 /* cubic_detached_vertex.hpp */; }; + C9C741D624FC4F0500EF9516 /* mat2d.hpp in Headers */ = {isa = PBXBuildFile; fileRef = C9C7412024FC4F0500EF9516 /* mat2d.hpp */; }; + C9C741D724FC4F0500EF9516 /* aabb.hpp in Headers */ = {isa = PBXBuildFile; fileRef = C9C7412124FC4F0500EF9516 /* aabb.hpp */; }; + C9C741DA24FC4F0500EF9516 /* circle_constant.hpp in Headers */ = {isa = PBXBuildFile; fileRef = C9C7412424FC4F0500EF9516 /* circle_constant.hpp */; }; + C9C741DB24FC4F0500EF9516 /* component.hpp in Headers */ = {isa = PBXBuildFile; fileRef = C9C7412524FC4F0500EF9516 /* component.hpp */; }; + C9C741DC24FC4F0500EF9516 /* node.hpp in Headers */ = {isa = PBXBuildFile; fileRef = C9C7412624FC4F0500EF9516 /* node.hpp */; }; + C9C741DD24FC4F0500EF9516 /* layout.hpp in Headers */ = {isa = PBXBuildFile; fileRef = C9C7412724FC4F0500EF9516 /* layout.hpp */; }; + C9C741DE24FC4F0500EF9516 /* drawable.hpp in Headers */ = {isa = PBXBuildFile; fileRef = C9C7412824FC4F0500EF9516 /* drawable.hpp */; }; + C9C741DF24FC4F0500EF9516 /* artboard.hpp in Headers */ = {isa = PBXBuildFile; fileRef = C9C7412924FC4F0500EF9516 /* artboard.hpp */; }; + C9C741E024FC4F0500EF9516 /* dependency_sorter.hpp in Headers */ = {isa = PBXBuildFile; fileRef = C9C7412A24FC4F0500EF9516 /* dependency_sorter.hpp */; }; + C9C741E124FC4F0500EF9516 /* core_context.hpp in Headers */ = {isa = PBXBuildFile; fileRef = C9C7412B24FC4F0500EF9516 /* core_context.hpp */; }; + C9C741E224FC4F0500EF9516 /* tendon.hpp in Headers */ = {isa = PBXBuildFile; fileRef = C9C7412D24FC4F0500EF9516 /* tendon.hpp */; }; + C9C741E324FC4F0500EF9516 /* skeletal_component.hpp in Headers */ = {isa = PBXBuildFile; fileRef = C9C7412E24FC4F0500EF9516 /* skeletal_component.hpp */; }; + C9C741E424FC4F0500EF9516 /* weight.hpp in Headers */ = {isa = PBXBuildFile; fileRef = C9C7412F24FC4F0500EF9516 /* weight.hpp */; }; + C9C741E524FC4F0500EF9516 /* skin.hpp in Headers */ = {isa = PBXBuildFile; fileRef = C9C7413024FC4F0500EF9516 /* skin.hpp */; }; + C9C741E624FC4F0500EF9516 /* root_bone.hpp in Headers */ = {isa = PBXBuildFile; fileRef = C9C7413124FC4F0500EF9516 /* root_bone.hpp */; }; + C9C741E724FC4F0500EF9516 /* bone.hpp in Headers */ = {isa = PBXBuildFile; fileRef = C9C7413224FC4F0500EF9516 /* bone.hpp */; }; + C9C741E824FC4F0500EF9516 /* skinnable.hpp in Headers */ = {isa = PBXBuildFile; fileRef = C9C7413324FC4F0500EF9516 /* skinnable.hpp */; }; + C9C741E924FC4F0500EF9516 /* cubic_weight.hpp in Headers */ = {isa = PBXBuildFile; fileRef = C9C7413424FC4F0500EF9516 /* cubic_weight.hpp */; }; + C9C741EA24FC4F0500EF9516 /* core.hpp in Headers */ = {isa = PBXBuildFile; fileRef = C9C7413524FC4F0500EF9516 /* core.hpp */; }; + C9C741EB24FC4F0500EF9516 /* transform_component.hpp in Headers */ = {isa = PBXBuildFile; fileRef = C9C7413624FC4F0500EF9516 /* transform_component.hpp */; }; + C9C741F424FC510200EF9516 /* Rive.h in Headers */ = {isa = PBXBuildFile; fileRef = C9C741F224FC510200EF9516 /* Rive.h */; settings = {ATTRIBUTES = (Public, ); }; }; + C9C741F524FC510200EF9516 /* Rive.mm in Sources */ = {isa = PBXBuildFile; fileRef = C9C741F324FC510200EF9516 /* Rive.mm */; }; + C9D60DAA2512B01600AAA3A6 /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C9D60DA92512B01600AAA3A6 /* CoreGraphics.framework */; }; + C9D60DAC2512B04B00AAA3A6 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C9D60DAB2512B04B00AAA3A6 /* QuartzCore.framework */; }; +/* End PBXBuildFile section */ + +/* Begin PBXContainerItemProxy section */ + C9C73EDC24FC478900EF9516 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = C9C73EC824FC478800EF9516 /* Project object */; + proxyType = 1; + remoteGlobalIDString = C9C73ED024FC478800EF9516; + remoteInfo = RiveRuntime; + }; +/* End PBXContainerItemProxy section */ + +/* Begin PBXFileReference section */ + C9601F21250C143A0032AA07 /* RiveViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = RiveViewController.h; sourceTree = ""; }; + C9601F22250C143A0032AA07 /* RiveViewController.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = RiveViewController.mm; sourceTree = ""; }; + C9601F25250C14560032AA07 /* RiveView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = RiveView.h; sourceTree = ""; }; + C9601F26250C14560032AA07 /* RiveView.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = RiveView.mm; sourceTree = ""; }; + C9601F29250C25830032AA07 /* RiveRenderer.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = RiveRenderer.hpp; sourceTree = ""; }; + C9601F2A250C25930032AA07 /* RiveRenderer.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = RiveRenderer.mm; sourceTree = ""; }; + C9601F2D251004770032AA07 /* vec2d.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = vec2d.hpp; sourceTree = ""; }; + C9601F2E251004770032AA07 /* mat2d.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = mat2d.hpp; sourceTree = ""; }; + C9601F2F251004770032AA07 /* aabb.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = aabb.hpp; sourceTree = ""; }; + C9601F30251004770032AA07 /* color.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = color.hpp; sourceTree = ""; }; + C9601F31251004770032AA07 /* transform_components.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = transform_components.hpp; sourceTree = ""; }; + C9601F32251004770032AA07 /* circle_constant.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = circle_constant.hpp; sourceTree = ""; }; + C9601F33251004770032AA07 /* stroke_effect.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = stroke_effect.hpp; path = shapes/paint/stroke_effect.hpp; sourceTree = ""; }; + C9601F34251004770032AA07 /* trim_path_base.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = trim_path_base.hpp; path = generated/shapes/paint/trim_path_base.hpp; sourceTree = ""; }; + C9601F35251004780032AA07 /* command_path.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = command_path.hpp; sourceTree = ""; }; + C9601F36251004780032AA07 /* metrics_path.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = metrics_path.hpp; path = shapes/metrics_path.hpp; sourceTree = ""; }; + C9601F38251004780032AA07 /* stroke_cap.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = stroke_cap.hpp; sourceTree = ""; }; + C9601F39251004780032AA07 /* gradient_stop.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = gradient_stop.hpp; sourceTree = ""; }; + C9601F3A251004780032AA07 /* stroke.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = stroke.hpp; sourceTree = ""; }; + C9601F3B251004780032AA07 /* shape_paint_mutator.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = shape_paint_mutator.hpp; sourceTree = ""; }; + C9601F3C251004780032AA07 /* blend_mode.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = blend_mode.hpp; sourceTree = ""; }; + C9601F3D251004780032AA07 /* shape_paint.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = shape_paint.hpp; sourceTree = ""; }; + C9601F3E251004780032AA07 /* stroke_join.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = stroke_join.hpp; sourceTree = ""; }; + C9601F3F251004780032AA07 /* fill.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = fill.hpp; sourceTree = ""; }; + C9601F40251004780032AA07 /* radial_gradient.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = radial_gradient.hpp; sourceTree = ""; }; + C9601F41251004780032AA07 /* trim_path.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = trim_path.hpp; sourceTree = ""; }; + C9601F42251004780032AA07 /* color.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = color.hpp; sourceTree = ""; }; + C9601F43251004780032AA07 /* solid_color.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = solid_color.hpp; sourceTree = ""; }; + C9601F44251004780032AA07 /* linear_gradient.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = linear_gradient.hpp; sourceTree = ""; }; + C9601F45251004780032AA07 /* stroke_effect.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = stroke_effect.hpp; sourceTree = ""; }; + C9601F46251004780032AA07 /* trim_path.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = trim_path.hpp; path = shapes/paint/trim_path.hpp; sourceTree = ""; }; + C9601F48251004780032AA07 /* straight_vertex.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = straight_vertex.hpp; sourceTree = ""; }; + C9601F4A251004780032AA07 /* stroke_cap.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = stroke_cap.hpp; sourceTree = ""; }; + C9601F4B251004780032AA07 /* gradient_stop.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = gradient_stop.hpp; sourceTree = ""; }; + C9601F4C251004780032AA07 /* stroke.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = stroke.hpp; sourceTree = ""; }; + C9601F4D251004780032AA07 /* shape_paint_mutator.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = shape_paint_mutator.hpp; sourceTree = ""; }; + C9601F4E251004780032AA07 /* blend_mode.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = blend_mode.hpp; sourceTree = ""; }; + C9601F4F251004780032AA07 /* shape_paint.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = shape_paint.hpp; sourceTree = ""; }; + C9601F50251004780032AA07 /* stroke_join.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = stroke_join.hpp; sourceTree = ""; }; + C9601F51251004780032AA07 /* fill.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = fill.hpp; sourceTree = ""; }; + C9601F52251004780032AA07 /* radial_gradient.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = radial_gradient.hpp; sourceTree = ""; }; + C9601F53251004780032AA07 /* trim_path.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = trim_path.hpp; sourceTree = ""; }; + C9601F54251004780032AA07 /* color.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = color.hpp; sourceTree = ""; }; + C9601F55251004780032AA07 /* solid_color.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = solid_color.hpp; sourceTree = ""; }; + C9601F56251004780032AA07 /* linear_gradient.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = linear_gradient.hpp; sourceTree = ""; }; + C9601F57251004780032AA07 /* stroke_effect.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = stroke_effect.hpp; sourceTree = ""; }; + C9601F58251004780032AA07 /* path_composer.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = path_composer.hpp; sourceTree = ""; }; + C9601F59251004780032AA07 /* shape_paint_container.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = shape_paint_container.hpp; sourceTree = ""; }; + C9601F5A251004780032AA07 /* cubic_mirrored_vertex.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = cubic_mirrored_vertex.hpp; sourceTree = ""; }; + C9601F5B251004780032AA07 /* path_space.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = path_space.hpp; sourceTree = ""; }; + C9601F5C251004780032AA07 /* ellipse.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = ellipse.hpp; sourceTree = ""; }; + C9601F5D251004780032AA07 /* clipping_shape.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = clipping_shape.hpp; sourceTree = ""; }; + C9601F5E251004780032AA07 /* metrics_path.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = metrics_path.hpp; sourceTree = ""; }; + C9601F5F251004780032AA07 /* cubic_vertex.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = cubic_vertex.hpp; sourceTree = ""; }; + C9601F60251004780032AA07 /* shape.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = shape.hpp; sourceTree = ""; }; + C9601F61251004780032AA07 /* triangle.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = triangle.hpp; sourceTree = ""; }; + C9601F62251004780032AA07 /* path.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = path.hpp; sourceTree = ""; }; + C9601F63251004780032AA07 /* path_vertex.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = path_vertex.hpp; sourceTree = ""; }; + C9601F64251004780032AA07 /* parametric_path.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = parametric_path.hpp; sourceTree = ""; }; + C9601F65251004780032AA07 /* rectangle.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = rectangle.hpp; sourceTree = ""; }; + C9601F66251004780032AA07 /* points_path.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = points_path.hpp; sourceTree = ""; }; + C9601F67251004780032AA07 /* cubic_asymmetric_vertex.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = cubic_asymmetric_vertex.hpp; sourceTree = ""; }; + C9601F68251004780032AA07 /* cubic_detached_vertex.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = cubic_detached_vertex.hpp; sourceTree = ""; }; + C9601FA2251004950032AA07 /* trim_path.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = trim_path.cpp; path = shapes/paint/trim_path.cpp; sourceTree = ""; }; + C9601FA3251004950032AA07 /* metrics_path.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = metrics_path.cpp; sourceTree = ""; }; + C9601FA5251004950032AA07 /* solid_color.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = solid_color.cpp; sourceTree = ""; }; + C9601FA6251004950032AA07 /* linear_gradient.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = linear_gradient.cpp; sourceTree = ""; }; + C9601FA7251004950032AA07 /* shape_paint.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = shape_paint.cpp; sourceTree = ""; }; + C9601FA8251004950032AA07 /* fill.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = fill.cpp; sourceTree = ""; }; + C9601FA9251004950032AA07 /* radial_gradient.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = radial_gradient.cpp; sourceTree = ""; }; + C9601FAA251004950032AA07 /* color.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = color.cpp; sourceTree = ""; }; + C9601FAB251004950032AA07 /* trim_path.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = trim_path.cpp; sourceTree = ""; }; + C9601FAC251004950032AA07 /* shape_paint_mutator.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = shape_paint_mutator.cpp; sourceTree = ""; }; + C9601FAD251004950032AA07 /* gradient_stop.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = gradient_stop.cpp; sourceTree = ""; }; + C9601FAE251004950032AA07 /* stroke.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = stroke.cpp; sourceTree = ""; }; + C960285A251FD59800704818 /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.15.sdk/System/iOSSupport/System/Library/Frameworks/UIKit.framework; sourceTree = DEVELOPER_DIR; }; + C98F296E2513FA8B0076E802 /* keyframe_id.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = keyframe_id.hpp; sourceTree = ""; }; + C98F29722513FAAE0076E802 /* draw_rules.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = draw_rules.hpp; sourceTree = ""; }; + C98F29732513FAAE0076E802 /* draw_target_base.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = draw_target_base.hpp; path = generated/draw_target_base.hpp; sourceTree = ""; }; + C98F29742513FAAE0076E802 /* draw_rules_base.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = draw_rules_base.hpp; path = generated/draw_rules_base.hpp; sourceTree = ""; }; + C98F29752513FAAE0076E802 /* draw_target_placement.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = draw_target_placement.hpp; sourceTree = ""; }; + C98F29762513FAAE0076E802 /* draw_target.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = draw_target.hpp; sourceTree = ""; }; + C98F29772513FAAE0076E802 /* keyframe_id_base.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = keyframe_id_base.hpp; path = generated/animation/keyframe_id_base.hpp; sourceTree = ""; }; + C98F29802513FAC30076E802 /* draw_target.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = draw_target.cpp; sourceTree = ""; }; + C98F29812513FAC30076E802 /* keyframe_id.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = keyframe_id.cpp; path = animation/keyframe_id.cpp; sourceTree = ""; }; + C98F29822513FAC30076E802 /* draw_rules.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = draw_rules.cpp; sourceTree = ""; }; + C9C73ED124FC478800EF9516 /* RiveRuntime.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = RiveRuntime.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + C9C73ED424FC478800EF9516 /* RiveRuntime.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = RiveRuntime.h; sourceTree = ""; }; + C9C73ED524FC478800EF9516 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + C9C73EDA24FC478900EF9516 /* RiveRuntimeTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RiveRuntimeTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; + C9C73EDF24FC478900EF9516 /* RiveRuntimeTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = RiveRuntimeTests.m; sourceTree = ""; }; + C9C73EE124FC478900EF9516 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + C9C7407024FC4F0400EF9516 /* core_bool_type.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = core_bool_type.cpp; sourceTree = ""; }; + C9C7407124FC4F0400EF9516 /* core_uint_type.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = core_uint_type.cpp; sourceTree = ""; }; + C9C7407224FC4F0400EF9516 /* core_double_type.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = core_double_type.cpp; sourceTree = ""; }; + C9C7407324FC4F0400EF9516 /* core_string_type.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = core_string_type.cpp; sourceTree = ""; }; + C9C7407424FC4F0400EF9516 /* core_color_type.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = core_color_type.cpp; sourceTree = ""; }; + C9C7407524FC4F0400EF9516 /* binary_reader.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = binary_reader.cpp; sourceTree = ""; }; + C9C7407624FC4F0400EF9516 /* transform_component.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = transform_component.cpp; sourceTree = ""; }; + C9C7407724FC4F0400EF9516 /* component.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = component.cpp; sourceTree = ""; }; + C9C7407824FC4F0400EF9516 /* node.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = node.cpp; sourceTree = ""; }; + C9C7407924FC4F0400EF9516 /* layout.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = layout.cpp; sourceTree = ""; }; + C9C7407B24FC4F0400EF9516 /* keyframe_color.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = keyframe_color.cpp; sourceTree = ""; }; + C9C7407C24FC4F0400EF9516 /* keyed_object.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = keyed_object.cpp; sourceTree = ""; }; + C9C7407D24FC4F0400EF9516 /* linear_animation.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = linear_animation.cpp; sourceTree = ""; }; + C9C7407E24FC4F0400EF9516 /* linear_animation_instance.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = linear_animation_instance.cpp; sourceTree = ""; }; + C9C7407F24FC4F0400EF9516 /* keyframe_double.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = keyframe_double.cpp; sourceTree = ""; }; + C9C7408024FC4F0400EF9516 /* keyframe.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = keyframe.cpp; sourceTree = ""; }; + C9C7408124FC4F0400EF9516 /* cubic_interpolator.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = cubic_interpolator.cpp; sourceTree = ""; }; + C9C7408224FC4F0400EF9516 /* keyed_property.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = keyed_property.cpp; sourceTree = ""; }; + C9C7408424FC4F0400EF9516 /* drawable.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = drawable.cpp; sourceTree = ""; }; + C9C7408724FC4F0400EF9516 /* solid_color.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = solid_color.cpp; sourceTree = ""; }; + C9C7408824FC4F0400EF9516 /* linear_gradient.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = linear_gradient.cpp; sourceTree = ""; }; + C9C7408924FC4F0400EF9516 /* shape_paint.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = shape_paint.cpp; sourceTree = ""; }; + C9C7408A24FC4F0400EF9516 /* fill.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = fill.cpp; sourceTree = ""; }; + C9C7408B24FC4F0400EF9516 /* radial_gradient.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = radial_gradient.cpp; sourceTree = ""; }; + C9C7408C24FC4F0400EF9516 /* color.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = color.cpp; sourceTree = ""; }; + C9C7408D24FC4F0400EF9516 /* shape_paint_mutator.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = shape_paint_mutator.cpp; sourceTree = ""; }; + C9C7408E24FC4F0400EF9516 /* gradient_stop.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = gradient_stop.cpp; sourceTree = ""; }; + C9C7408F24FC4F0400EF9516 /* stroke.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = stroke.cpp; sourceTree = ""; }; + C9C7409024FC4F0400EF9516 /* points_path.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = points_path.cpp; sourceTree = ""; }; + C9C7409124FC4F0400EF9516 /* cubic_asymmetric_vertex.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = cubic_asymmetric_vertex.cpp; sourceTree = ""; }; + C9C7409224FC4F0400EF9516 /* cubic_detached_vertex.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = cubic_detached_vertex.cpp; sourceTree = ""; }; + C9C7409324FC4F0400EF9516 /* cubic_vertex.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = cubic_vertex.cpp; sourceTree = ""; }; + C9C7409424FC4F0400EF9516 /* shape.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = shape.cpp; sourceTree = ""; }; + C9C7409524FC4F0400EF9516 /* path.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = path.cpp; sourceTree = ""; }; + C9C7409624FC4F0400EF9516 /* parametric_path.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = parametric_path.cpp; sourceTree = ""; }; + C9C7409724FC4F0400EF9516 /* path_vertex.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = path_vertex.cpp; sourceTree = ""; }; + C9C7409824FC4F0400EF9516 /* rectangle.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = rectangle.cpp; sourceTree = ""; }; + C9C7409924FC4F0400EF9516 /* straight_vertex.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = straight_vertex.cpp; sourceTree = ""; }; + C9C7409A24FC4F0400EF9516 /* path_composer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = path_composer.cpp; sourceTree = ""; }; + C9C7409B24FC4F0400EF9516 /* shape_paint_container.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = shape_paint_container.cpp; sourceTree = ""; }; + C9C7409C24FC4F0400EF9516 /* cubic_mirrored_vertex.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = cubic_mirrored_vertex.cpp; sourceTree = ""; }; + C9C7409D24FC4F0400EF9516 /* ellipse.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ellipse.cpp; sourceTree = ""; }; + C9C7409E24FC4F0400EF9516 /* clipping_shape.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = clipping_shape.cpp; sourceTree = ""; }; + C9C740A024FC4F0400EF9516 /* aabb.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = aabb.cpp; sourceTree = ""; }; + C9C740A124FC4F0400EF9516 /* vec2d.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = vec2d.cpp; sourceTree = ""; }; + C9C740A224FC4F0400EF9516 /* mat2d.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = mat2d.cpp; sourceTree = ""; }; + C9C740A324FC4F0400EF9516 /* dependency_sorter.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = dependency_sorter.cpp; sourceTree = ""; }; + C9C740A424FC4F0400EF9516 /* artboard.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = artboard.cpp; sourceTree = ""; }; + C9C740A524FC4F0400EF9516 /* file.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = file.cpp; sourceTree = ""; }; + C9C740A724FC4F0400EF9516 /* root_bone.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = root_bone.cpp; sourceTree = ""; }; + C9C740A824FC4F0400EF9516 /* bone.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = bone.cpp; sourceTree = ""; }; + C9C740A924FC4F0400EF9516 /* skinnable.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = skinnable.cpp; sourceTree = ""; }; + C9C740AA24FC4F0400EF9516 /* weight.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = weight.cpp; sourceTree = ""; }; + C9C740AB24FC4F0400EF9516 /* skin.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = skin.cpp; sourceTree = ""; }; + C9C740AC24FC4F0400EF9516 /* tendon.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = tendon.cpp; sourceTree = ""; }; + C9C740AF24FC4F0400EF9516 /* core_registry.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = core_registry.hpp; sourceTree = ""; }; + C9C740B024FC4F0400EF9516 /* node_base.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = node_base.hpp; sourceTree = ""; }; + C9C740B124FC4F0400EF9516 /* transform_component_base.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = transform_component_base.hpp; sourceTree = ""; }; + C9C740B224FC4F0400EF9516 /* artboard_base.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = artboard_base.hpp; sourceTree = ""; }; + C9C740B424FC4F0400EF9516 /* keyframe_color_base.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = keyframe_color_base.hpp; sourceTree = ""; }; + C9C740B524FC4F0400EF9516 /* keyed_property_base.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = keyed_property_base.hpp; sourceTree = ""; }; + C9C740B624FC4F0400EF9516 /* keyframe_base.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = keyframe_base.hpp; sourceTree = ""; }; + C9C740B724FC4F0400EF9516 /* animation_base.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = animation_base.hpp; sourceTree = ""; }; + C9C740B824FC4F0400EF9516 /* cubic_interpolator_base.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = cubic_interpolator_base.hpp; sourceTree = ""; }; + C9C740B924FC4F0400EF9516 /* keyframe_draw_order_value_base.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = keyframe_draw_order_value_base.hpp; sourceTree = ""; }; + C9C740BA24FC4F0400EF9516 /* keyframe_draw_order_base.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = keyframe_draw_order_base.hpp; sourceTree = ""; }; + C9C740BB24FC4F0400EF9516 /* linear_animation_base.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = linear_animation_base.hpp; sourceTree = ""; }; + C9C740BC24FC4F0400EF9516 /* keyed_object_base.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = keyed_object_base.hpp; sourceTree = ""; }; + C9C740BD24FC4F0400EF9516 /* keyframe_double_base.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = keyframe_double_base.hpp; sourceTree = ""; }; + C9C740C024FC4F0400EF9516 /* linear_gradient_base.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = linear_gradient_base.hpp; sourceTree = ""; }; + C9C740C124FC4F0400EF9516 /* stroke_base.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = stroke_base.hpp; sourceTree = ""; }; + C9C740C224FC4F0400EF9516 /* fill_base.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = fill_base.hpp; sourceTree = ""; }; + C9C740C324FC4F0400EF9516 /* shape_paint_base.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = shape_paint_base.hpp; sourceTree = ""; }; + C9C740C424FC4F0400EF9516 /* solid_color_base.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = solid_color_base.hpp; sourceTree = ""; }; + C9C740C524FC4F0400EF9516 /* radial_gradient_base.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = radial_gradient_base.hpp; sourceTree = ""; }; + C9C740C624FC4F0400EF9516 /* gradient_stop_base.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = gradient_stop_base.hpp; sourceTree = ""; }; + C9C740C724FC4F0400EF9516 /* parametric_path_base.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = parametric_path_base.hpp; sourceTree = ""; }; + C9C740C824FC4F0400EF9516 /* cubic_asymmetric_vertex_base.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = cubic_asymmetric_vertex_base.hpp; sourceTree = ""; }; + C9C740C924FC4F0400EF9516 /* cubic_vertex_base.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = cubic_vertex_base.hpp; sourceTree = ""; }; + C9C740CA24FC4F0400EF9516 /* ellipse_base.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = ellipse_base.hpp; sourceTree = ""; }; + C9C740CB24FC4F0400EF9516 /* path_composer_base.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = path_composer_base.hpp; sourceTree = ""; }; + C9C740CC24FC4F0400EF9516 /* points_path_base.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = points_path_base.hpp; sourceTree = ""; }; + C9C740CD24FC4F0400EF9516 /* triangle_base.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = triangle_base.hpp; sourceTree = ""; }; + C9C740CE24FC4F0400EF9516 /* shape_base.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = shape_base.hpp; sourceTree = ""; }; + C9C740CF24FC4F0400EF9516 /* rectangle_base.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = rectangle_base.hpp; sourceTree = ""; }; + C9C740D024FC4F0400EF9516 /* cubic_mirrored_vertex_base.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = cubic_mirrored_vertex_base.hpp; sourceTree = ""; }; + C9C740D124FC4F0400EF9516 /* straight_vertex_base.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = straight_vertex_base.hpp; sourceTree = ""; }; + C9C740D224FC4F0400EF9516 /* path_base.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = path_base.hpp; sourceTree = ""; }; + C9C740D324FC4F0400EF9516 /* cubic_detached_vertex_base.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = cubic_detached_vertex_base.hpp; sourceTree = ""; }; + C9C740D424FC4F0400EF9516 /* clipping_shape_base.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = clipping_shape_base.hpp; sourceTree = ""; }; + C9C740D524FC4F0400EF9516 /* path_vertex_base.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = path_vertex_base.hpp; sourceTree = ""; }; + C9C740D624FC4F0400EF9516 /* container_component_base.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = container_component_base.hpp; sourceTree = ""; }; + C9C740D724FC4F0400EF9516 /* component_base.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = component_base.hpp; sourceTree = ""; }; + C9C740D924FC4F0400EF9516 /* weight_base.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = weight_base.hpp; sourceTree = ""; }; + C9C740DA24FC4F0400EF9516 /* root_bone_base.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = root_bone_base.hpp; sourceTree = ""; }; + C9C740DB24FC4F0400EF9516 /* cubic_weight_base.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = cubic_weight_base.hpp; sourceTree = ""; }; + C9C740DC24FC4F0400EF9516 /* bone_base.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = bone_base.hpp; sourceTree = ""; }; + C9C740DD24FC4F0400EF9516 /* skin_base.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = skin_base.hpp; sourceTree = ""; }; + C9C740DE24FC4F0400EF9516 /* tendon_base.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = tendon_base.hpp; sourceTree = ""; }; + C9C740DF24FC4F0400EF9516 /* skeletal_component_base.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = skeletal_component_base.hpp; sourceTree = ""; }; + C9C740E024FC4F0400EF9516 /* backboard_base.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = backboard_base.hpp; sourceTree = ""; }; + C9C740E124FC4F0400EF9516 /* drawable_base.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = drawable_base.hpp; sourceTree = ""; }; + C9C740E224FC4F0400EF9516 /* backboard.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = backboard.hpp; sourceTree = ""; }; + C9C740E424FC4F0400EF9516 /* reader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = reader.h; sourceTree = ""; }; + C9C740E624FC4F0400EF9516 /* core_color_type.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = core_color_type.hpp; sourceTree = ""; }; + C9C740E724FC4F0400EF9516 /* core_uint_type.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = core_uint_type.hpp; sourceTree = ""; }; + C9C740E824FC4F0400EF9516 /* core_double_type.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = core_double_type.hpp; sourceTree = ""; }; + C9C740E924FC4F0400EF9516 /* core_string_type.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = core_string_type.hpp; sourceTree = ""; }; + C9C740EA24FC4F0400EF9516 /* core_bool_type.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = core_bool_type.hpp; sourceTree = ""; }; + C9C740EB24FC4F0400EF9516 /* binary_reader.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = binary_reader.hpp; sourceTree = ""; }; + C9C740EC24FC4F0400EF9516 /* status_code.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = status_code.hpp; sourceTree = ""; }; + C9C740ED24FC4F0400EF9516 /* component_dirt.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = component_dirt.hpp; sourceTree = ""; }; + C9C740EE24FC4F0400EF9516 /* renderer.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = renderer.hpp; sourceTree = ""; }; + C9C740EF24FC4F0400EF9516 /* runtime_header.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = runtime_header.hpp; sourceTree = ""; }; + C9C740F024FC4F0400EF9516 /* file.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = file.hpp; sourceTree = ""; }; + C9C740F124FC4F0400EF9516 /* container_component.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = container_component.hpp; sourceTree = ""; }; + C9C740F324FC4F0500EF9516 /* cubic_interpolator.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = cubic_interpolator.hpp; sourceTree = ""; }; + C9C740F424FC4F0500EF9516 /* keyed_property.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = keyed_property.hpp; sourceTree = ""; }; + C9C740F724FC4F0500EF9516 /* animation.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = animation.hpp; sourceTree = ""; }; + C9C740F824FC4F0500EF9516 /* keyframe.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = keyframe.hpp; sourceTree = ""; }; + C9C740F924FC4F0500EF9516 /* keyed_object.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = keyed_object.hpp; sourceTree = ""; }; + C9C740FA24FC4F0500EF9516 /* linear_animation.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = linear_animation.hpp; sourceTree = ""; }; + C9C740FB24FC4F0500EF9516 /* linear_animation_instance.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = linear_animation_instance.hpp; sourceTree = ""; }; + C9C740FC24FC4F0500EF9516 /* keyframe_double.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = keyframe_double.hpp; sourceTree = ""; }; + C9C740FD24FC4F0500EF9516 /* loop.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = loop.hpp; sourceTree = ""; }; + C9C740FE24FC4F0500EF9516 /* keyframe_color.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = keyframe_color.hpp; sourceTree = ""; }; + C9C7410024FC4F0500EF9516 /* straight_vertex.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = straight_vertex.hpp; sourceTree = ""; }; + C9C7410224FC4F0500EF9516 /* stroke_cap.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = stroke_cap.hpp; sourceTree = ""; }; + C9C7410324FC4F0500EF9516 /* gradient_stop.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = gradient_stop.hpp; sourceTree = ""; }; + C9C7410424FC4F0500EF9516 /* stroke.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = stroke.hpp; sourceTree = ""; }; + C9C7410524FC4F0500EF9516 /* shape_paint_mutator.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = shape_paint_mutator.hpp; sourceTree = ""; }; + C9C7410624FC4F0500EF9516 /* blend_mode.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = blend_mode.hpp; sourceTree = ""; }; + C9C7410724FC4F0500EF9516 /* shape_paint.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = shape_paint.hpp; sourceTree = ""; }; + C9C7410824FC4F0500EF9516 /* stroke_join.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = stroke_join.hpp; sourceTree = ""; }; + C9C7410924FC4F0500EF9516 /* fill.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = fill.hpp; sourceTree = ""; }; + C9C7410A24FC4F0500EF9516 /* radial_gradient.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = radial_gradient.hpp; sourceTree = ""; }; + C9C7410B24FC4F0500EF9516 /* color.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = color.hpp; sourceTree = ""; }; + C9C7410C24FC4F0500EF9516 /* solid_color.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = solid_color.hpp; sourceTree = ""; }; + C9C7410D24FC4F0500EF9516 /* linear_gradient.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = linear_gradient.hpp; sourceTree = ""; }; + C9C7410E24FC4F0500EF9516 /* path_composer.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = path_composer.hpp; sourceTree = ""; }; + C9C7410F24FC4F0500EF9516 /* shape_paint_container.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = shape_paint_container.hpp; sourceTree = ""; }; + C9C7411024FC4F0500EF9516 /* cubic_mirrored_vertex.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = cubic_mirrored_vertex.hpp; sourceTree = ""; }; + C9C7411124FC4F0500EF9516 /* path_space.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = path_space.hpp; sourceTree = ""; }; + C9C7411224FC4F0500EF9516 /* ellipse.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = ellipse.hpp; sourceTree = ""; }; + C9C7411324FC4F0500EF9516 /* clipping_shape.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = clipping_shape.hpp; sourceTree = ""; }; + C9C7411424FC4F0500EF9516 /* cubic_vertex.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = cubic_vertex.hpp; sourceTree = ""; }; + C9C7411524FC4F0500EF9516 /* shape.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = shape.hpp; sourceTree = ""; }; + C9C7411624FC4F0500EF9516 /* triangle.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = triangle.hpp; sourceTree = ""; }; + C9C7411724FC4F0500EF9516 /* path.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = path.hpp; sourceTree = ""; }; + C9C7411824FC4F0500EF9516 /* path_vertex.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = path_vertex.hpp; sourceTree = ""; }; + C9C7411924FC4F0500EF9516 /* parametric_path.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = parametric_path.hpp; sourceTree = ""; }; + C9C7411A24FC4F0500EF9516 /* rectangle.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = rectangle.hpp; sourceTree = ""; }; + C9C7411B24FC4F0500EF9516 /* points_path.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = points_path.hpp; sourceTree = ""; }; + C9C7411C24FC4F0500EF9516 /* cubic_asymmetric_vertex.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = cubic_asymmetric_vertex.hpp; sourceTree = ""; }; + C9C7411D24FC4F0500EF9516 /* cubic_detached_vertex.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = cubic_detached_vertex.hpp; sourceTree = ""; }; + C9C7411F24FC4F0500EF9516 /* vec2d.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = vec2d.hpp; sourceTree = ""; }; + C9C7412024FC4F0500EF9516 /* mat2d.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = mat2d.hpp; sourceTree = ""; }; + C9C7412124FC4F0500EF9516 /* aabb.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = aabb.hpp; sourceTree = ""; }; + C9C7412224FC4F0500EF9516 /* color.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = color.hpp; sourceTree = ""; }; + C9C7412324FC4F0500EF9516 /* transform_components.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = transform_components.hpp; sourceTree = ""; }; + C9C7412424FC4F0500EF9516 /* circle_constant.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = circle_constant.hpp; sourceTree = ""; }; + C9C7412524FC4F0500EF9516 /* component.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = component.hpp; sourceTree = ""; }; + C9C7412624FC4F0500EF9516 /* node.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = node.hpp; sourceTree = ""; }; + C9C7412724FC4F0500EF9516 /* layout.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = layout.hpp; sourceTree = ""; }; + C9C7412824FC4F0500EF9516 /* drawable.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = drawable.hpp; sourceTree = ""; }; + C9C7412924FC4F0500EF9516 /* artboard.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = artboard.hpp; sourceTree = ""; }; + C9C7412A24FC4F0500EF9516 /* dependency_sorter.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = dependency_sorter.hpp; sourceTree = ""; }; + C9C7412B24FC4F0500EF9516 /* core_context.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = core_context.hpp; sourceTree = ""; }; + C9C7412D24FC4F0500EF9516 /* tendon.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = tendon.hpp; sourceTree = ""; }; + C9C7412E24FC4F0500EF9516 /* skeletal_component.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = skeletal_component.hpp; sourceTree = ""; }; + C9C7412F24FC4F0500EF9516 /* weight.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = weight.hpp; sourceTree = ""; }; + C9C7413024FC4F0500EF9516 /* skin.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = skin.hpp; sourceTree = ""; }; + C9C7413124FC4F0500EF9516 /* root_bone.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = root_bone.hpp; sourceTree = ""; }; + C9C7413224FC4F0500EF9516 /* bone.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = bone.hpp; sourceTree = ""; }; + C9C7413324FC4F0500EF9516 /* skinnable.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = skinnable.hpp; sourceTree = ""; }; + C9C7413424FC4F0500EF9516 /* cubic_weight.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = cubic_weight.hpp; sourceTree = ""; }; + C9C7413524FC4F0500EF9516 /* core.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = core.hpp; sourceTree = ""; }; + C9C7413624FC4F0500EF9516 /* transform_component.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = transform_component.hpp; sourceTree = ""; }; + C9C741F224FC510200EF9516 /* Rive.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Rive.h; sourceTree = ""; }; + C9C741F324FC510200EF9516 /* Rive.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = Rive.mm; sourceTree = ""; }; + C9D60DA92512B01600AAA3A6 /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.15.sdk/System/Library/Frameworks/CoreGraphics.framework; sourceTree = DEVELOPER_DIR; }; + C9D60DAB2512B04B00AAA3A6 /* QuartzCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuartzCore.framework; path = Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.15.sdk/System/Library/Frameworks/QuartzCore.framework; sourceTree = DEVELOPER_DIR; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + C9C73ECE24FC478800EF9516 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + C960285B251FD59800704818 /* UIKit.framework in Frameworks */, + C9D60DAC2512B04B00AAA3A6 /* QuartzCore.framework in Frameworks */, + C9D60DAA2512B01600AAA3A6 /* CoreGraphics.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + C9C73ED724FC478900EF9516 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + C9601F20250C13D40032AA07 /* RiveKit */ = { + isa = PBXGroup; + children = ( + C9C741F224FC510200EF9516 /* Rive.h */, + C9C741F324FC510200EF9516 /* Rive.mm */, + C9601F29250C25830032AA07 /* RiveRenderer.hpp */, + C9601F2A250C25930032AA07 /* RiveRenderer.mm */, + C9601F25250C14560032AA07 /* RiveView.h */, + C9601F26250C14560032AA07 /* RiveView.mm */, + C9601F21250C143A0032AA07 /* RiveViewController.h */, + C9601F22250C143A0032AA07 /* RiveViewController.mm */, + ); + path = RiveKit; + sourceTree = ""; + }; + C9601F2C251004770032AA07 /* math */ = { + isa = PBXGroup; + children = ( + C9601F2D251004770032AA07 /* vec2d.hpp */, + C9601F2E251004770032AA07 /* mat2d.hpp */, + C9601F2F251004770032AA07 /* aabb.hpp */, + C9601F30251004770032AA07 /* color.hpp */, + C9601F31251004770032AA07 /* transform_components.hpp */, + C9601F32251004770032AA07 /* circle_constant.hpp */, + ); + path = math; + sourceTree = ""; + }; + C9601F37251004780032AA07 /* paint */ = { + isa = PBXGroup; + children = ( + C9601F38251004780032AA07 /* stroke_cap.hpp */, + C9601F39251004780032AA07 /* gradient_stop.hpp */, + C9601F3A251004780032AA07 /* stroke.hpp */, + C9601F3B251004780032AA07 /* shape_paint_mutator.hpp */, + C9601F3C251004780032AA07 /* blend_mode.hpp */, + C9601F3D251004780032AA07 /* shape_paint.hpp */, + C9601F3E251004780032AA07 /* stroke_join.hpp */, + C9601F3F251004780032AA07 /* fill.hpp */, + C9601F40251004780032AA07 /* radial_gradient.hpp */, + C9601F41251004780032AA07 /* trim_path.hpp */, + C9601F42251004780032AA07 /* color.hpp */, + C9601F43251004780032AA07 /* solid_color.hpp */, + C9601F44251004780032AA07 /* linear_gradient.hpp */, + C9601F45251004780032AA07 /* stroke_effect.hpp */, + ); + name = paint; + path = shapes/paint; + sourceTree = ""; + }; + C9601F47251004780032AA07 /* shapes */ = { + isa = PBXGroup; + children = ( + C9601F48251004780032AA07 /* straight_vertex.hpp */, + C9601F49251004780032AA07 /* paint */, + C9601F58251004780032AA07 /* path_composer.hpp */, + C9601F59251004780032AA07 /* shape_paint_container.hpp */, + C9601F5A251004780032AA07 /* cubic_mirrored_vertex.hpp */, + C9601F5B251004780032AA07 /* path_space.hpp */, + C9601F5C251004780032AA07 /* ellipse.hpp */, + C9601F5D251004780032AA07 /* clipping_shape.hpp */, + C9601F5E251004780032AA07 /* metrics_path.hpp */, + C9601F5F251004780032AA07 /* cubic_vertex.hpp */, + C9601F60251004780032AA07 /* shape.hpp */, + C9601F61251004780032AA07 /* triangle.hpp */, + C9601F62251004780032AA07 /* path.hpp */, + C9601F63251004780032AA07 /* path_vertex.hpp */, + C9601F64251004780032AA07 /* parametric_path.hpp */, + C9601F65251004780032AA07 /* rectangle.hpp */, + C9601F66251004780032AA07 /* points_path.hpp */, + C9601F67251004780032AA07 /* cubic_asymmetric_vertex.hpp */, + C9601F68251004780032AA07 /* cubic_detached_vertex.hpp */, + ); + path = shapes; + sourceTree = ""; + }; + C9601F49251004780032AA07 /* paint */ = { + isa = PBXGroup; + children = ( + C9601F4A251004780032AA07 /* stroke_cap.hpp */, + C9601F4B251004780032AA07 /* gradient_stop.hpp */, + C9601F4C251004780032AA07 /* stroke.hpp */, + C9601F4D251004780032AA07 /* shape_paint_mutator.hpp */, + C9601F4E251004780032AA07 /* blend_mode.hpp */, + C9601F4F251004780032AA07 /* shape_paint.hpp */, + C9601F50251004780032AA07 /* stroke_join.hpp */, + C9601F51251004780032AA07 /* fill.hpp */, + C9601F52251004780032AA07 /* radial_gradient.hpp */, + C9601F53251004780032AA07 /* trim_path.hpp */, + C9601F54251004780032AA07 /* color.hpp */, + C9601F55251004780032AA07 /* solid_color.hpp */, + C9601F56251004780032AA07 /* linear_gradient.hpp */, + C9601F57251004780032AA07 /* stroke_effect.hpp */, + ); + path = paint; + sourceTree = ""; + }; + C9601FA4251004950032AA07 /* paint */ = { + isa = PBXGroup; + children = ( + C9601FA5251004950032AA07 /* solid_color.cpp */, + C9601FA6251004950032AA07 /* linear_gradient.cpp */, + C9601FA7251004950032AA07 /* shape_paint.cpp */, + C9601FA8251004950032AA07 /* fill.cpp */, + C9601FA9251004950032AA07 /* radial_gradient.cpp */, + C9601FAA251004950032AA07 /* color.cpp */, + C9601FAB251004950032AA07 /* trim_path.cpp */, + C9601FAC251004950032AA07 /* shape_paint_mutator.cpp */, + C9601FAD251004950032AA07 /* gradient_stop.cpp */, + C9601FAE251004950032AA07 /* stroke.cpp */, + ); + name = paint; + path = shapes/paint; + sourceTree = ""; + }; + C9C73EC724FC478800EF9516 = { + isa = PBXGroup; + children = ( + C9C7406C24FC4EF400EF9516 /* Rive */, + C9C73ED324FC478800EF9516 /* Source */, + C9C73EDE24FC478900EF9516 /* RiveRuntimeTests */, + C9C73ED224FC478800EF9516 /* Products */, + C9D60DA62512AFE900AAA3A6 /* Frameworks */, + ); + sourceTree = ""; + }; + C9C73ED224FC478800EF9516 /* Products */ = { + isa = PBXGroup; + children = ( + C9C73ED124FC478800EF9516 /* RiveRuntime.framework */, + C9C73EDA24FC478900EF9516 /* RiveRuntimeTests.xctest */, + ); + name = Products; + sourceTree = ""; + }; + C9C73ED324FC478800EF9516 /* Source */ = { + isa = PBXGroup; + children = ( + C9601F20250C13D40032AA07 /* RiveKit */, + C9C73ED424FC478800EF9516 /* RiveRuntime.h */, + C9C73ED524FC478800EF9516 /* Info.plist */, + ); + path = Source; + sourceTree = ""; + }; + C9C73EDE24FC478900EF9516 /* RiveRuntimeTests */ = { + isa = PBXGroup; + children = ( + C9C73EDF24FC478900EF9516 /* RiveRuntimeTests.m */, + C9C73EE124FC478900EF9516 /* Info.plist */, + ); + path = RiveRuntimeTests; + sourceTree = ""; + }; + C9C7406C24FC4EF400EF9516 /* Rive */ = { + isa = PBXGroup; + children = ( + C9C740AD24FC4F0400EF9516 /* include */, + C9C7406D24FC4F0400EF9516 /* src */, + ); + name = Rive; + sourceTree = ""; + }; + C9C7406D24FC4F0400EF9516 /* src */ = { + isa = PBXGroup; + children = ( + C98F29822513FAC30076E802 /* draw_rules.cpp */, + C98F29802513FAC30076E802 /* draw_target.cpp */, + C98F29812513FAC30076E802 /* keyframe_id.cpp */, + C9601FA4251004950032AA07 /* paint */, + C9601FA2251004950032AA07 /* trim_path.cpp */, + C9C7406E24FC4F0400EF9516 /* core */, + C9C7407624FC4F0400EF9516 /* transform_component.cpp */, + C9C7407724FC4F0400EF9516 /* component.cpp */, + C9C7407824FC4F0400EF9516 /* node.cpp */, + C9C7407924FC4F0400EF9516 /* layout.cpp */, + C9C7407A24FC4F0400EF9516 /* animation */, + C9C7408424FC4F0400EF9516 /* drawable.cpp */, + C9C7408524FC4F0400EF9516 /* shapes */, + C9C7409F24FC4F0400EF9516 /* math */, + C9C740A324FC4F0400EF9516 /* dependency_sorter.cpp */, + C9C740A424FC4F0400EF9516 /* artboard.cpp */, + C9C740A524FC4F0400EF9516 /* file.cpp */, + C9C740A624FC4F0400EF9516 /* bones */, + ); + name = src; + path = "submodules/rive-cpp/src"; + sourceTree = ""; + }; + C9C7406E24FC4F0400EF9516 /* core */ = { + isa = PBXGroup; + children = ( + C9C7406F24FC4F0400EF9516 /* field_types */, + C9C7407524FC4F0400EF9516 /* binary_reader.cpp */, + ); + path = core; + sourceTree = ""; + }; + C9C7406F24FC4F0400EF9516 /* field_types */ = { + isa = PBXGroup; + children = ( + C9C7407024FC4F0400EF9516 /* core_bool_type.cpp */, + C9C7407124FC4F0400EF9516 /* core_uint_type.cpp */, + C9C7407224FC4F0400EF9516 /* core_double_type.cpp */, + C9C7407324FC4F0400EF9516 /* core_string_type.cpp */, + C9C7407424FC4F0400EF9516 /* core_color_type.cpp */, + ); + path = field_types; + sourceTree = ""; + }; + C9C7407A24FC4F0400EF9516 /* animation */ = { + isa = PBXGroup; + children = ( + C9C7407B24FC4F0400EF9516 /* keyframe_color.cpp */, + C9C7407C24FC4F0400EF9516 /* keyed_object.cpp */, + C9C7407D24FC4F0400EF9516 /* linear_animation.cpp */, + C9C7407E24FC4F0400EF9516 /* linear_animation_instance.cpp */, + C9C7407F24FC4F0400EF9516 /* keyframe_double.cpp */, + C9C7408024FC4F0400EF9516 /* keyframe.cpp */, + C9C7408124FC4F0400EF9516 /* cubic_interpolator.cpp */, + C9C7408224FC4F0400EF9516 /* keyed_property.cpp */, + ); + path = animation; + sourceTree = ""; + }; + C9C7408524FC4F0400EF9516 /* shapes */ = { + isa = PBXGroup; + children = ( + C9C7408624FC4F0400EF9516 /* paint */, + C9C7409024FC4F0400EF9516 /* points_path.cpp */, + C9C7409124FC4F0400EF9516 /* cubic_asymmetric_vertex.cpp */, + C9C7409224FC4F0400EF9516 /* cubic_detached_vertex.cpp */, + C9C7409324FC4F0400EF9516 /* cubic_vertex.cpp */, + C9C7409424FC4F0400EF9516 /* shape.cpp */, + C9601FA3251004950032AA07 /* metrics_path.cpp */, + C9C7409524FC4F0400EF9516 /* path.cpp */, + C9C7409624FC4F0400EF9516 /* parametric_path.cpp */, + C9C7409724FC4F0400EF9516 /* path_vertex.cpp */, + C9C7409824FC4F0400EF9516 /* rectangle.cpp */, + C9C7409924FC4F0400EF9516 /* straight_vertex.cpp */, + C9C7409A24FC4F0400EF9516 /* path_composer.cpp */, + C9C7409B24FC4F0400EF9516 /* shape_paint_container.cpp */, + C9C7409C24FC4F0400EF9516 /* cubic_mirrored_vertex.cpp */, + C9C7409D24FC4F0400EF9516 /* ellipse.cpp */, + C9C7409E24FC4F0400EF9516 /* clipping_shape.cpp */, + ); + path = shapes; + sourceTree = ""; + }; + C9C7408624FC4F0400EF9516 /* paint */ = { + isa = PBXGroup; + children = ( + C9C7408724FC4F0400EF9516 /* solid_color.cpp */, + C9C7408824FC4F0400EF9516 /* linear_gradient.cpp */, + C9C7408924FC4F0400EF9516 /* shape_paint.cpp */, + C9C7408A24FC4F0400EF9516 /* fill.cpp */, + C9C7408B24FC4F0400EF9516 /* radial_gradient.cpp */, + C9C7408C24FC4F0400EF9516 /* color.cpp */, + C9C7408D24FC4F0400EF9516 /* shape_paint_mutator.cpp */, + C9C7408E24FC4F0400EF9516 /* gradient_stop.cpp */, + C9C7408F24FC4F0400EF9516 /* stroke.cpp */, + ); + path = paint; + sourceTree = ""; + }; + C9C7409F24FC4F0400EF9516 /* math */ = { + isa = PBXGroup; + children = ( + C9C740A024FC4F0400EF9516 /* aabb.cpp */, + C9C740A124FC4F0400EF9516 /* vec2d.cpp */, + C9C740A224FC4F0400EF9516 /* mat2d.cpp */, + ); + path = math; + sourceTree = ""; + }; + C9C740A624FC4F0400EF9516 /* bones */ = { + isa = PBXGroup; + children = ( + C9C740A724FC4F0400EF9516 /* root_bone.cpp */, + C9C740A824FC4F0400EF9516 /* bone.cpp */, + C9C740A924FC4F0400EF9516 /* skinnable.cpp */, + C9C740AA24FC4F0400EF9516 /* weight.cpp */, + C9C740AB24FC4F0400EF9516 /* skin.cpp */, + C9C740AC24FC4F0400EF9516 /* tendon.cpp */, + ); + path = bones; + sourceTree = ""; + }; + C9C740AD24FC4F0400EF9516 /* include */ = { + isa = PBXGroup; + children = ( + C98F29742513FAAE0076E802 /* draw_rules_base.hpp */, + C98F29722513FAAE0076E802 /* draw_rules.hpp */, + C98F29732513FAAE0076E802 /* draw_target_base.hpp */, + C98F29752513FAAE0076E802 /* draw_target_placement.hpp */, + C98F29762513FAAE0076E802 /* draw_target.hpp */, + C98F29772513FAAE0076E802 /* keyframe_id_base.hpp */, + C9601F35251004780032AA07 /* command_path.hpp */, + C9601F2C251004770032AA07 /* math */, + C9601F36251004780032AA07 /* metrics_path.hpp */, + C9601F37251004780032AA07 /* paint */, + C9601F47251004780032AA07 /* shapes */, + C9601F33251004770032AA07 /* stroke_effect.hpp */, + C9601F34251004770032AA07 /* trim_path_base.hpp */, + C9601F46251004780032AA07 /* trim_path.hpp */, + C9C740AE24FC4F0400EF9516 /* generated */, + C9C740E224FC4F0400EF9516 /* backboard.hpp */, + C9C740E324FC4F0400EF9516 /* core */, + C9C740EC24FC4F0400EF9516 /* status_code.hpp */, + C9C740ED24FC4F0400EF9516 /* component_dirt.hpp */, + C9C740EE24FC4F0400EF9516 /* renderer.hpp */, + C9C740EF24FC4F0400EF9516 /* runtime_header.hpp */, + C9C740F024FC4F0400EF9516 /* file.hpp */, + C9C740F124FC4F0400EF9516 /* container_component.hpp */, + C9C740F224FC4F0400EF9516 /* animation */, + C9C740FF24FC4F0500EF9516 /* shapes */, + C9C7411E24FC4F0500EF9516 /* math */, + C9C7412524FC4F0500EF9516 /* component.hpp */, + C9C7412624FC4F0500EF9516 /* node.hpp */, + C9C7412724FC4F0500EF9516 /* layout.hpp */, + C9C7412824FC4F0500EF9516 /* drawable.hpp */, + C9C7412924FC4F0500EF9516 /* artboard.hpp */, + C9C7412A24FC4F0500EF9516 /* dependency_sorter.hpp */, + C9C7412B24FC4F0500EF9516 /* core_context.hpp */, + C9C7412C24FC4F0500EF9516 /* bones */, + C9C7413524FC4F0500EF9516 /* core.hpp */, + C9C7413624FC4F0500EF9516 /* transform_component.hpp */, + ); + name = include; + path = "submodules/rive-cpp/include"; + sourceTree = ""; + }; + C9C740AE24FC4F0400EF9516 /* generated */ = { + isa = PBXGroup; + children = ( + C9C740AF24FC4F0400EF9516 /* core_registry.hpp */, + C9C740B024FC4F0400EF9516 /* node_base.hpp */, + C9C740B124FC4F0400EF9516 /* transform_component_base.hpp */, + C9C740B224FC4F0400EF9516 /* artboard_base.hpp */, + C9C740B324FC4F0400EF9516 /* animation */, + C9C740BE24FC4F0400EF9516 /* shapes */, + C9C740D624FC4F0400EF9516 /* container_component_base.hpp */, + C9C740D724FC4F0400EF9516 /* component_base.hpp */, + C9C740D824FC4F0400EF9516 /* bones */, + C9C740E024FC4F0400EF9516 /* backboard_base.hpp */, + C9C740E124FC4F0400EF9516 /* drawable_base.hpp */, + ); + path = generated; + sourceTree = ""; + }; + C9C740B324FC4F0400EF9516 /* animation */ = { + isa = PBXGroup; + children = ( + C9C740B424FC4F0400EF9516 /* keyframe_color_base.hpp */, + C9C740B524FC4F0400EF9516 /* keyed_property_base.hpp */, + C9C740B624FC4F0400EF9516 /* keyframe_base.hpp */, + C9C740B724FC4F0400EF9516 /* animation_base.hpp */, + C9C740B824FC4F0400EF9516 /* cubic_interpolator_base.hpp */, + C9C740B924FC4F0400EF9516 /* keyframe_draw_order_value_base.hpp */, + C9C740BA24FC4F0400EF9516 /* keyframe_draw_order_base.hpp */, + C9C740BB24FC4F0400EF9516 /* linear_animation_base.hpp */, + C9C740BC24FC4F0400EF9516 /* keyed_object_base.hpp */, + C9C740BD24FC4F0400EF9516 /* keyframe_double_base.hpp */, + ); + path = animation; + sourceTree = ""; + }; + C9C740BE24FC4F0400EF9516 /* shapes */ = { + isa = PBXGroup; + children = ( + C9C740BF24FC4F0400EF9516 /* paint */, + C9C740C724FC4F0400EF9516 /* parametric_path_base.hpp */, + C9C740C824FC4F0400EF9516 /* cubic_asymmetric_vertex_base.hpp */, + C9C740C924FC4F0400EF9516 /* cubic_vertex_base.hpp */, + C9C740CA24FC4F0400EF9516 /* ellipse_base.hpp */, + C9C740CB24FC4F0400EF9516 /* path_composer_base.hpp */, + C9C740CC24FC4F0400EF9516 /* points_path_base.hpp */, + C9C740CD24FC4F0400EF9516 /* triangle_base.hpp */, + C9C740CE24FC4F0400EF9516 /* shape_base.hpp */, + C9C740CF24FC4F0400EF9516 /* rectangle_base.hpp */, + C9C740D024FC4F0400EF9516 /* cubic_mirrored_vertex_base.hpp */, + C9C740D124FC4F0400EF9516 /* straight_vertex_base.hpp */, + C9C740D224FC4F0400EF9516 /* path_base.hpp */, + C9C740D324FC4F0400EF9516 /* cubic_detached_vertex_base.hpp */, + C9C740D424FC4F0400EF9516 /* clipping_shape_base.hpp */, + C9C740D524FC4F0400EF9516 /* path_vertex_base.hpp */, + ); + path = shapes; + sourceTree = ""; + }; + C9C740BF24FC4F0400EF9516 /* paint */ = { + isa = PBXGroup; + children = ( + C9C740C024FC4F0400EF9516 /* linear_gradient_base.hpp */, + C9C740C124FC4F0400EF9516 /* stroke_base.hpp */, + C9C740C224FC4F0400EF9516 /* fill_base.hpp */, + C9C740C324FC4F0400EF9516 /* shape_paint_base.hpp */, + C9C740C424FC4F0400EF9516 /* solid_color_base.hpp */, + C9C740C524FC4F0400EF9516 /* radial_gradient_base.hpp */, + C9C740C624FC4F0400EF9516 /* gradient_stop_base.hpp */, + ); + path = paint; + sourceTree = ""; + }; + C9C740D824FC4F0400EF9516 /* bones */ = { + isa = PBXGroup; + children = ( + C9C740D924FC4F0400EF9516 /* weight_base.hpp */, + C9C740DA24FC4F0400EF9516 /* root_bone_base.hpp */, + C9C740DB24FC4F0400EF9516 /* cubic_weight_base.hpp */, + C9C740DC24FC4F0400EF9516 /* bone_base.hpp */, + C9C740DD24FC4F0400EF9516 /* skin_base.hpp */, + C9C740DE24FC4F0400EF9516 /* tendon_base.hpp */, + C9C740DF24FC4F0400EF9516 /* skeletal_component_base.hpp */, + ); + path = bones; + sourceTree = ""; + }; + C9C740E324FC4F0400EF9516 /* core */ = { + isa = PBXGroup; + children = ( + C9C740E424FC4F0400EF9516 /* reader.h */, + C9C740E524FC4F0400EF9516 /* field_types */, + C9C740EB24FC4F0400EF9516 /* binary_reader.hpp */, + ); + path = core; + sourceTree = ""; + }; + C9C740E524FC4F0400EF9516 /* field_types */ = { + isa = PBXGroup; + children = ( + C9C740E624FC4F0400EF9516 /* core_color_type.hpp */, + C9C740E724FC4F0400EF9516 /* core_uint_type.hpp */, + C9C740E824FC4F0400EF9516 /* core_double_type.hpp */, + C9C740E924FC4F0400EF9516 /* core_string_type.hpp */, + C9C740EA24FC4F0400EF9516 /* core_bool_type.hpp */, + ); + path = field_types; + sourceTree = ""; + }; + C9C740F224FC4F0400EF9516 /* animation */ = { + isa = PBXGroup; + children = ( + C98F296E2513FA8B0076E802 /* keyframe_id.hpp */, + C9C740F324FC4F0500EF9516 /* cubic_interpolator.hpp */, + C9C740F424FC4F0500EF9516 /* keyed_property.hpp */, + C9C740F724FC4F0500EF9516 /* animation.hpp */, + C9C740F824FC4F0500EF9516 /* keyframe.hpp */, + C9C740F924FC4F0500EF9516 /* keyed_object.hpp */, + C9C740FA24FC4F0500EF9516 /* linear_animation.hpp */, + C9C740FB24FC4F0500EF9516 /* linear_animation_instance.hpp */, + C9C740FC24FC4F0500EF9516 /* keyframe_double.hpp */, + C9C740FD24FC4F0500EF9516 /* loop.hpp */, + C9C740FE24FC4F0500EF9516 /* keyframe_color.hpp */, + ); + path = animation; + sourceTree = ""; + }; + C9C740FF24FC4F0500EF9516 /* shapes */ = { + isa = PBXGroup; + children = ( + C9C7410024FC4F0500EF9516 /* straight_vertex.hpp */, + C9C7410124FC4F0500EF9516 /* paint */, + C9C7410E24FC4F0500EF9516 /* path_composer.hpp */, + C9C7410F24FC4F0500EF9516 /* shape_paint_container.hpp */, + C9C7411024FC4F0500EF9516 /* cubic_mirrored_vertex.hpp */, + C9C7411124FC4F0500EF9516 /* path_space.hpp */, + C9C7411224FC4F0500EF9516 /* ellipse.hpp */, + C9C7411324FC4F0500EF9516 /* clipping_shape.hpp */, + C9C7411424FC4F0500EF9516 /* cubic_vertex.hpp */, + C9C7411524FC4F0500EF9516 /* shape.hpp */, + C9C7411624FC4F0500EF9516 /* triangle.hpp */, + C9C7411724FC4F0500EF9516 /* path.hpp */, + C9C7411824FC4F0500EF9516 /* path_vertex.hpp */, + C9C7411924FC4F0500EF9516 /* parametric_path.hpp */, + C9C7411A24FC4F0500EF9516 /* rectangle.hpp */, + C9C7411B24FC4F0500EF9516 /* points_path.hpp */, + C9C7411C24FC4F0500EF9516 /* cubic_asymmetric_vertex.hpp */, + C9C7411D24FC4F0500EF9516 /* cubic_detached_vertex.hpp */, + ); + path = shapes; + sourceTree = ""; + }; + C9C7410124FC4F0500EF9516 /* paint */ = { + isa = PBXGroup; + children = ( + C9C7410224FC4F0500EF9516 /* stroke_cap.hpp */, + C9C7410324FC4F0500EF9516 /* gradient_stop.hpp */, + C9C7410424FC4F0500EF9516 /* stroke.hpp */, + C9C7410524FC4F0500EF9516 /* shape_paint_mutator.hpp */, + C9C7410624FC4F0500EF9516 /* blend_mode.hpp */, + C9C7410724FC4F0500EF9516 /* shape_paint.hpp */, + C9C7410824FC4F0500EF9516 /* stroke_join.hpp */, + C9C7410924FC4F0500EF9516 /* fill.hpp */, + C9C7410A24FC4F0500EF9516 /* radial_gradient.hpp */, + C9C7410B24FC4F0500EF9516 /* color.hpp */, + C9C7410C24FC4F0500EF9516 /* solid_color.hpp */, + C9C7410D24FC4F0500EF9516 /* linear_gradient.hpp */, + ); + path = paint; + sourceTree = ""; + }; + C9C7411E24FC4F0500EF9516 /* math */ = { + isa = PBXGroup; + children = ( + C9C7411F24FC4F0500EF9516 /* vec2d.hpp */, + C9C7412024FC4F0500EF9516 /* mat2d.hpp */, + C9C7412124FC4F0500EF9516 /* aabb.hpp */, + C9C7412224FC4F0500EF9516 /* color.hpp */, + C9C7412324FC4F0500EF9516 /* transform_components.hpp */, + C9C7412424FC4F0500EF9516 /* circle_constant.hpp */, + ); + path = math; + sourceTree = ""; + }; + C9C7412C24FC4F0500EF9516 /* bones */ = { + isa = PBXGroup; + children = ( + C9C7412D24FC4F0500EF9516 /* tendon.hpp */, + C9C7412E24FC4F0500EF9516 /* skeletal_component.hpp */, + C9C7412F24FC4F0500EF9516 /* weight.hpp */, + C9C7413024FC4F0500EF9516 /* skin.hpp */, + C9C7413124FC4F0500EF9516 /* root_bone.hpp */, + C9C7413224FC4F0500EF9516 /* bone.hpp */, + C9C7413324FC4F0500EF9516 /* skinnable.hpp */, + C9C7413424FC4F0500EF9516 /* cubic_weight.hpp */, + ); + path = bones; + sourceTree = ""; + }; + C9D60DA62512AFE900AAA3A6 /* Frameworks */ = { + isa = PBXGroup; + children = ( + C960285A251FD59800704818 /* UIKit.framework */, + C9D60DAB2512B04B00AAA3A6 /* QuartzCore.framework */, + C9D60DA92512B01600AAA3A6 /* CoreGraphics.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXHeadersBuildPhase section */ + C9C73ECC24FC478800EF9516 /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + C9601F6C251004780032AA07 /* color.hpp in Headers */, + C9C741D224FC4F0500EF9516 /* points_path.hpp in Headers */, + C9C741F424FC510200EF9516 /* Rive.h in Headers */, + C9601F8E251004780032AA07 /* solid_color.hpp in Headers */, + C9601F27250C14560032AA07 /* RiveView.h in Headers */, + C9601F23250C143A0032AA07 /* RiveViewController.h in Headers */, + C9C741DF24FC4F0500EF9516 /* artboard.hpp in Headers */, + C9601F7F251004780032AA07 /* linear_gradient.hpp in Headers */, + C9C741B324FC4F0500EF9516 /* linear_animation.hpp in Headers */, + C9C741E524FC4F0500EF9516 /* skin.hpp in Headers */, + C9601FA0251004780032AA07 /* cubic_asymmetric_vertex.hpp in Headers */, + C9601F73251004780032AA07 /* stroke_cap.hpp in Headers */, + C9C7418624FC4F0500EF9516 /* cubic_vertex_base.hpp in Headers */, + C98F296F2513FA8B0076E802 /* keyframe_id.hpp in Headers */, + C9601F95251004780032AA07 /* ellipse.hpp in Headers */, + C9C741B624FC4F0500EF9516 /* loop.hpp in Headers */, + C9601F82251004780032AA07 /* straight_vertex.hpp in Headers */, + C9601F71251004780032AA07 /* command_path.hpp in Headers */, + C9C7419A24FC4F0500EF9516 /* tendon_base.hpp in Headers */, + C9C741D124FC4F0500EF9516 /* rectangle.hpp in Headers */, + C9C741EA24FC4F0500EF9516 /* core.hpp in Headers */, + C9C741A624FC4F0500EF9516 /* status_code.hpp in Headers */, + C9C741D424FC4F0500EF9516 /* cubic_detached_vertex.hpp in Headers */, + C9C741A024FC4F0500EF9516 /* core_color_type.hpp in Headers */, + C9C7418924FC4F0500EF9516 /* points_path_base.hpp in Headers */, + C9C7419F24FC4F0500EF9516 /* reader.h in Headers */, + C9C741D624FC4F0500EF9516 /* mat2d.hpp in Headers */, + C9601F96251004780032AA07 /* clipping_shape.hpp in Headers */, + C98F297D2513FAAE0076E802 /* keyframe_id_base.hpp in Headers */, + C9601F9B251004780032AA07 /* path.hpp in Headers */, + C9601F91251004780032AA07 /* path_composer.hpp in Headers */, + C9601F79251004780032AA07 /* stroke_join.hpp in Headers */, + C9601F8B251004780032AA07 /* radial_gradient.hpp in Headers */, + C9601F98251004780032AA07 /* cubic_vertex.hpp in Headers */, + C9601F75251004780032AA07 /* stroke.hpp in Headers */, + C9C7419424FC4F0500EF9516 /* component_base.hpp in Headers */, + C9601F8D251004780032AA07 /* color.hpp in Headers */, + C9601F9D251004780032AA07 /* parametric_path.hpp in Headers */, + C9C741A324FC4F0500EF9516 /* core_string_type.hpp in Headers */, + C9C7417D24FC4F0500EF9516 /* linear_gradient_base.hpp in Headers */, + C9C7418424FC4F0500EF9516 /* parametric_path_base.hpp in Headers */, + C9C7419B24FC4F0500EF9516 /* skeletal_component_base.hpp in Headers */, + C9C741D724FC4F0500EF9516 /* aabb.hpp in Headers */, + C9C7416F24FC4F0500EF9516 /* core_registry.hpp in Headers */, + C9C741AA24FC4F0500EF9516 /* file.hpp in Headers */, + C9C7419924FC4F0500EF9516 /* skin_base.hpp in Headers */, + C9C7418224FC4F0500EF9516 /* radial_gradient_base.hpp in Headers */, + C9C741DA24FC4F0500EF9516 /* circle_constant.hpp in Headers */, + C98F297B2513FAAE0076E802 /* draw_target_placement.hpp in Headers */, + C9C7417724FC4F0500EF9516 /* cubic_interpolator_base.hpp in Headers */, + C9C7419724FC4F0500EF9516 /* cubic_weight_base.hpp in Headers */, + C98F297A2513FAAE0076E802 /* draw_rules_base.hpp in Headers */, + C9601F7C251004780032AA07 /* trim_path.hpp in Headers */, + C9C741B024FC4F0500EF9516 /* animation.hpp in Headers */, + C9601F9A251004780032AA07 /* triangle.hpp in Headers */, + C9C741B424FC4F0500EF9516 /* linear_animation_instance.hpp in Headers */, + C9C741CC24FC4F0500EF9516 /* shape.hpp in Headers */, + C9C7419624FC4F0500EF9516 /* root_bone_base.hpp in Headers */, + C9C741E224FC4F0500EF9516 /* tendon.hpp in Headers */, + C9C741E724FC4F0500EF9516 /* bone.hpp in Headers */, + C9601F69251004780032AA07 /* vec2d.hpp in Headers */, + C9601F70251004780032AA07 /* trim_path_base.hpp in Headers */, + C9C7417024FC4F0500EF9516 /* node_base.hpp in Headers */, + C9C7418A24FC4F0500EF9516 /* triangle_base.hpp in Headers */, + C9C7418324FC4F0500EF9516 /* gradient_stop_base.hpp in Headers */, + C9601F87251004780032AA07 /* blend_mode.hpp in Headers */, + C9C7418824FC4F0500EF9516 /* path_composer_base.hpp in Headers */, + C9C7417224FC4F0500EF9516 /* artboard_base.hpp in Headers */, + C9C741B224FC4F0500EF9516 /* keyed_object.hpp in Headers */, + C9C741DC24FC4F0500EF9516 /* node.hpp in Headers */, + C9C7418F24FC4F0500EF9516 /* path_base.hpp in Headers */, + C9C7419324FC4F0500EF9516 /* container_component_base.hpp in Headers */, + C9C7419524FC4F0500EF9516 /* weight_base.hpp in Headers */, + C9601F97251004780032AA07 /* metrics_path.hpp in Headers */, + C9601F93251004780032AA07 /* cubic_mirrored_vertex.hpp in Headers */, + C9C741E824FC4F0500EF9516 /* skinnable.hpp in Headers */, + C9601F92251004780032AA07 /* shape_paint_container.hpp in Headers */, + C9C7418524FC4F0500EF9516 /* cubic_asymmetric_vertex_base.hpp in Headers */, + C9C741E624FC4F0500EF9516 /* root_bone.hpp in Headers */, + C98F297C2513FAAE0076E802 /* draw_target.hpp in Headers */, + C9C7419E24FC4F0500EF9516 /* backboard.hpp in Headers */, + C9C741DD24FC4F0500EF9516 /* layout.hpp in Headers */, + C9C741A724FC4F0500EF9516 /* component_dirt.hpp in Headers */, + C9C741E124FC4F0500EF9516 /* core_context.hpp in Headers */, + C9C741AC24FC4F0500EF9516 /* cubic_interpolator.hpp in Headers */, + C9C741A824FC4F0500EF9516 /* renderer.hpp in Headers */, + C9C7418724FC4F0500EF9516 /* ellipse_base.hpp in Headers */, + C9601F88251004780032AA07 /* shape_paint.hpp in Headers */, + C9C7418E24FC4F0500EF9516 /* straight_vertex_base.hpp in Headers */, + C9C7417624FC4F0500EF9516 /* animation_base.hpp in Headers */, + C98F29782513FAAE0076E802 /* draw_rules.hpp in Headers */, + C98F29792513FAAE0076E802 /* draw_target_base.hpp in Headers */, + C9601F80251004780032AA07 /* stroke_effect.hpp in Headers */, + C9C741E424FC4F0500EF9516 /* weight.hpp in Headers */, + C9C7419C24FC4F0500EF9516 /* backboard_base.hpp in Headers */, + C9C7417B24FC4F0500EF9516 /* keyed_object_base.hpp in Headers */, + C9C741E324FC4F0500EF9516 /* skeletal_component.hpp in Headers */, + C9C741A224FC4F0500EF9516 /* core_double_type.hpp in Headers */, + C9C7419024FC4F0500EF9516 /* cubic_detached_vertex_base.hpp in Headers */, + C9C741AB24FC4F0500EF9516 /* container_component.hpp in Headers */, + C9601F7A251004780032AA07 /* fill.hpp in Headers */, + C9C7418024FC4F0500EF9516 /* shape_paint_base.hpp in Headers */, + C9601F84251004780032AA07 /* gradient_stop.hpp in Headers */, + C9C7417424FC4F0500EF9516 /* keyed_property_base.hpp in Headers */, + C9C7419824FC4F0500EF9516 /* bone_base.hpp in Headers */, + C9601F86251004780032AA07 /* shape_paint_mutator.hpp in Headers */, + C9C7418124FC4F0500EF9516 /* solid_color_base.hpp in Headers */, + C9C741DB24FC4F0500EF9516 /* component.hpp in Headers */, + C9C7417F24FC4F0500EF9516 /* fill_base.hpp in Headers */, + C9C741E924FC4F0500EF9516 /* cubic_weight.hpp in Headers */, + C9C741A524FC4F0500EF9516 /* binary_reader.hpp in Headers */, + C9C7418D24FC4F0500EF9516 /* cubic_mirrored_vertex_base.hpp in Headers */, + C9C741B124FC4F0500EF9516 /* keyframe.hpp in Headers */, + C9C7417324FC4F0500EF9516 /* keyframe_color_base.hpp in Headers */, + C9C7419D24FC4F0500EF9516 /* drawable_base.hpp in Headers */, + C9601F6D251004780032AA07 /* transform_components.hpp in Headers */, + C9C741E024FC4F0500EF9516 /* dependency_sorter.hpp in Headers */, + C9C7417C24FC4F0500EF9516 /* keyframe_double_base.hpp in Headers */, + C9601F94251004780032AA07 /* path_space.hpp in Headers */, + C9C7417E24FC4F0500EF9516 /* stroke_base.hpp in Headers */, + C9C741A424FC4F0500EF9516 /* core_bool_type.hpp in Headers */, + C9C741DE24FC4F0500EF9516 /* drawable.hpp in Headers */, + C9C7419224FC4F0500EF9516 /* path_vertex_base.hpp in Headers */, + C9C7417524FC4F0500EF9516 /* keyframe_base.hpp in Headers */, + C9C7417924FC4F0500EF9516 /* keyframe_draw_order_base.hpp in Headers */, + C9C741EB24FC4F0500EF9516 /* transform_component.hpp in Headers */, + C9C7419124FC4F0500EF9516 /* clipping_shape_base.hpp in Headers */, + C9C741B524FC4F0500EF9516 /* keyframe_double.hpp in Headers */, + C9C741A124FC4F0500EF9516 /* core_uint_type.hpp in Headers */, + C9C7417824FC4F0500EF9516 /* keyframe_draw_order_value_base.hpp in Headers */, + C9C7417124FC4F0500EF9516 /* transform_component_base.hpp in Headers */, + C9C7418C24FC4F0500EF9516 /* rectangle_base.hpp in Headers */, + C9C7418B24FC4F0500EF9516 /* shape_base.hpp in Headers */, + C9C741B724FC4F0500EF9516 /* keyframe_color.hpp in Headers */, + C9C741CF24FC4F0500EF9516 /* path_vertex.hpp in Headers */, + C9C73EE224FC478900EF9516 /* RiveRuntime.h in Headers */, + C9C741AD24FC4F0500EF9516 /* keyed_property.hpp in Headers */, + C9C7417A24FC4F0500EF9516 /* linear_animation_base.hpp in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXHeadersBuildPhase section */ + +/* Begin PBXNativeTarget section */ + C9C73ED024FC478800EF9516 /* RiveRuntime */ = { + isa = PBXNativeTarget; + buildConfigurationList = C9C73EE524FC478900EF9516 /* Build configuration list for PBXNativeTarget "RiveRuntime" */; + buildPhases = ( + C9C73ECC24FC478800EF9516 /* Headers */, + C9C73ECD24FC478800EF9516 /* Sources */, + C9C73ECE24FC478800EF9516 /* Frameworks */, + C9C73ECF24FC478800EF9516 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = RiveRuntime; + productName = RiveRuntime; + productReference = C9C73ED124FC478800EF9516 /* RiveRuntime.framework */; + productType = "com.apple.product-type.framework"; + }; + C9C73ED924FC478900EF9516 /* RiveRuntimeTests */ = { + isa = PBXNativeTarget; + buildConfigurationList = C9C73EE824FC478900EF9516 /* Build configuration list for PBXNativeTarget "RiveRuntimeTests" */; + buildPhases = ( + C9C73ED624FC478900EF9516 /* Sources */, + C9C73ED724FC478900EF9516 /* Frameworks */, + C9C73ED824FC478900EF9516 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + C9C73EDD24FC478900EF9516 /* PBXTargetDependency */, + ); + name = RiveRuntimeTests; + productName = RiveRuntimeTests; + productReference = C9C73EDA24FC478900EF9516 /* RiveRuntimeTests.xctest */; + productType = "com.apple.product-type.bundle.unit-test"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + C9C73EC824FC478800EF9516 /* Project object */ = { + isa = PBXProject; + attributes = { + LastUpgradeCheck = 1200; + ORGANIZATIONNAME = Rive; + TargetAttributes = { + C9C73ED024FC478800EF9516 = { + CreatedOnToolsVersion = 11.6; + }; + C9C73ED924FC478900EF9516 = { + CreatedOnToolsVersion = 11.6; + }; + }; + }; + buildConfigurationList = C9C73ECB24FC478800EF9516 /* Build configuration list for PBXProject "RiveRuntime" */; + compatibilityVersion = "Xcode 9.3"; + developmentRegion = en; + hasScannedForEncodings = 0; + knownRegions = ( + en, + Base, + ); + mainGroup = C9C73EC724FC478800EF9516; + productRefGroup = C9C73ED224FC478800EF9516 /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + C9C73ED024FC478800EF9516 /* RiveRuntime */, + C9C73ED924FC478900EF9516 /* RiveRuntimeTests */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + C9C73ECF24FC478800EF9516 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + C9C73ED824FC478900EF9516 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + C9C73ECD24FC478800EF9516 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + C9C7414124FC4F0500EF9516 /* keyframe_color.cpp in Sources */, + C9C7414F24FC4F0500EF9516 /* radial_gradient.cpp in Sources */, + C9601F2B250C25930032AA07 /* RiveRenderer.mm in Sources */, + C9C7416424FC4F0500EF9516 /* vec2d.cpp in Sources */, + C9C7416E24FC4F0500EF9516 /* tendon.cpp in Sources */, + C9C7416624FC4F0500EF9516 /* dependency_sorter.cpp in Sources */, + C9601FAF251004950032AA07 /* trim_path.cpp in Sources */, + C9C7414624FC4F0500EF9516 /* keyframe.cpp in Sources */, + C9C7413B24FC4F0500EF9516 /* core_color_type.cpp in Sources */, + C9C7416924FC4F0500EF9516 /* root_bone.cpp in Sources */, + C9C7413E24FC4F0500EF9516 /* component.cpp in Sources */, + C9601FB6251004950032AA07 /* color.cpp in Sources */, + C9C7413F24FC4F0500EF9516 /* node.cpp in Sources */, + C9C7415E24FC4F0500EF9516 /* path_composer.cpp in Sources */, + C9C7413924FC4F0500EF9516 /* core_double_type.cpp in Sources */, + C9C7413A24FC4F0500EF9516 /* core_string_type.cpp in Sources */, + C9C7415B24FC4F0500EF9516 /* path_vertex.cpp in Sources */, + C9C7414B24FC4F0500EF9516 /* solid_color.cpp in Sources */, + C9C741F524FC510200EF9516 /* Rive.mm in Sources */, + C9C7415724FC4F0500EF9516 /* cubic_vertex.cpp in Sources */, + C9C7414E24FC4F0500EF9516 /* fill.cpp in Sources */, + C9601FB3251004950032AA07 /* shape_paint.cpp in Sources */, + C9C7416124FC4F0500EF9516 /* ellipse.cpp in Sources */, + C9C7415124FC4F0500EF9516 /* shape_paint_mutator.cpp in Sources */, + C9C7416524FC4F0500EF9516 /* mat2d.cpp in Sources */, + C9C7414A24FC4F0500EF9516 /* drawable.cpp in Sources */, + C9C7415924FC4F0500EF9516 /* path.cpp in Sources */, + C9C7414024FC4F0500EF9516 /* layout.cpp in Sources */, + C9C7414C24FC4F0500EF9516 /* linear_gradient.cpp in Sources */, + C9C7415524FC4F0500EF9516 /* cubic_asymmetric_vertex.cpp in Sources */, + C98F29842513FAC30076E802 /* keyframe_id.cpp in Sources */, + C9C7416824FC4F0500EF9516 /* file.cpp in Sources */, + C9601F28250C14560032AA07 /* RiveView.mm in Sources */, + C9C7415F24FC4F0500EF9516 /* shape_paint_container.cpp in Sources */, + C9C7413C24FC4F0500EF9516 /* binary_reader.cpp in Sources */, + C9C7416D24FC4F0500EF9516 /* skin.cpp in Sources */, + C9C7414424FC4F0500EF9516 /* linear_animation_instance.cpp in Sources */, + C9601FB9251004950032AA07 /* gradient_stop.cpp in Sources */, + C9C7416A24FC4F0500EF9516 /* bone.cpp in Sources */, + C9C7415824FC4F0500EF9516 /* shape.cpp in Sources */, + C9601FB0251004950032AA07 /* metrics_path.cpp in Sources */, + C98F29832513FAC30076E802 /* draw_target.cpp in Sources */, + C9C7414524FC4F0500EF9516 /* keyframe_double.cpp in Sources */, + C9C7415C24FC4F0500EF9516 /* rectangle.cpp in Sources */, + C9601F24250C143A0032AA07 /* RiveViewController.mm in Sources */, + C9C7413D24FC4F0500EF9516 /* transform_component.cpp in Sources */, + C9C7414224FC4F0500EF9516 /* keyed_object.cpp in Sources */, + C9C7416C24FC4F0500EF9516 /* weight.cpp in Sources */, + C9601FBA251004950032AA07 /* stroke.cpp in Sources */, + C9C7414324FC4F0500EF9516 /* linear_animation.cpp in Sources */, + C9C7416B24FC4F0500EF9516 /* skinnable.cpp in Sources */, + C9C7413824FC4F0500EF9516 /* core_uint_type.cpp in Sources */, + C9C7414824FC4F0500EF9516 /* keyed_property.cpp in Sources */, + C9C7413724FC4F0500EF9516 /* core_bool_type.cpp in Sources */, + C9C7415D24FC4F0500EF9516 /* straight_vertex.cpp in Sources */, + C9C7416024FC4F0500EF9516 /* cubic_mirrored_vertex.cpp in Sources */, + C9C7415424FC4F0500EF9516 /* points_path.cpp in Sources */, + C9C7416324FC4F0500EF9516 /* aabb.cpp in Sources */, + C9C7414724FC4F0500EF9516 /* cubic_interpolator.cpp in Sources */, + C9C7415A24FC4F0500EF9516 /* parametric_path.cpp in Sources */, + C9C7416224FC4F0500EF9516 /* clipping_shape.cpp in Sources */, + C9C7416724FC4F0500EF9516 /* artboard.cpp in Sources */, + C9C7415624FC4F0500EF9516 /* cubic_detached_vertex.cpp in Sources */, + C98F29852513FAC30076E802 /* draw_rules.cpp in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + C9C73ED624FC478900EF9516 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + C9C73EE024FC478900EF9516 /* RiveRuntimeTests.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXTargetDependency section */ + C9C73EDD24FC478900EF9516 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = C9C73ED024FC478800EF9516 /* RiveRuntime */; + targetProxy = C9C73EDC24FC478900EF9516 /* PBXContainerItemProxy */; + }; +/* End PBXTargetDependency section */ + +/* Begin XCBuildConfiguration section */ + C9C73EE324FC478900EF9516 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "c++17"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + COPY_PHASE_STRIP = NO; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_DYNAMIC_NO_PIC = NO; + GCC_ENABLE_CPP_EXCEPTIONS = NO; + GCC_ENABLE_CPP_RTTI = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 13.6; + MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; + MTL_FAST_MATH = YES; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = iphoneos; + SUPPORTED_PLATFORMS = "iphonesimulator iphoneos"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Debug; + }; + C9C73EE424FC478900EF9516 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "c++17"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + COPY_PHASE_STRIP = NO; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_ENABLE_CPP_EXCEPTIONS = NO; + GCC_ENABLE_CPP_RTTI = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 13.6; + MTL_ENABLE_DEBUG_INFO = NO; + MTL_FAST_MATH = YES; + SDKROOT = iphoneos; + SUPPORTED_PLATFORMS = "iphonesimulator iphoneos"; + VALIDATE_PRODUCT = YES; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Release; + }; + C9C73EE624FC478900EF9516 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + CLANG_CXX_LANGUAGE_STANDARD = "c++17"; + CODE_SIGN_STYLE = Automatic; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + GCC_ENABLE_CPP_EXCEPTIONS = NO; + GCC_ENABLE_CPP_RTTI = NO; + "HEADER_SEARCH_PATHS[arch=*]" = "submodules/rive-cpp/include"; + INFOPLIST_FILE = Source/Info.plist; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); + PRODUCT_BUNDLE_IDENTIFIER = rive.app.ios.runtime.RiveRuntime; + PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Debug; + }; + C9C73EE724FC478900EF9516 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + CLANG_CXX_LANGUAGE_STANDARD = "c++17"; + CODE_SIGN_STYLE = Automatic; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + GCC_ENABLE_CPP_EXCEPTIONS = NO; + GCC_ENABLE_CPP_RTTI = NO; + "HEADER_SEARCH_PATHS[arch=*]" = Rive/include; + INFOPLIST_FILE = Source/Info.plist; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); + PRODUCT_BUNDLE_IDENTIFIER = rive.app.ios.runtime.RiveRuntime; + PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Release; + }; + C9C73EE924FC478900EF9516 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_STYLE = Automatic; + INFOPLIST_FILE = RiveRuntimeTests/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); + PRODUCT_BUNDLE_IDENTIFIER = rive.app.ios.runtime.RiveRuntimeTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Debug; + }; + C9C73EEA24FC478900EF9516 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_STYLE = Automatic; + INFOPLIST_FILE = RiveRuntimeTests/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); + PRODUCT_BUNDLE_IDENTIFIER = rive.app.ios.runtime.RiveRuntimeTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + C9C73ECB24FC478800EF9516 /* Build configuration list for PBXProject "RiveRuntime" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + C9C73EE324FC478900EF9516 /* Debug */, + C9C73EE424FC478900EF9516 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + C9C73EE524FC478900EF9516 /* Build configuration list for PBXNativeTarget "RiveRuntime" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + C9C73EE624FC478900EF9516 /* Debug */, + C9C73EE724FC478900EF9516 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + C9C73EE824FC478900EF9516 /* Build configuration list for PBXNativeTarget "RiveRuntimeTests" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + C9C73EE924FC478900EF9516 /* Debug */, + C9C73EEA24FC478900EF9516 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = C9C73EC824FC478800EF9516 /* Project object */; +} diff --git a/RiveRuntime.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/RiveRuntime.xcodeproj/project.xcworkspace/contents.xcworkspacedata new file mode 100644 index 0000000..1c8635f --- /dev/null +++ b/RiveRuntime.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/RiveRuntime.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/RiveRuntime.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 0000000..18d9810 --- /dev/null +++ b/RiveRuntime.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/RiveRuntimeTests/Info.plist b/RiveRuntimeTests/Info.plist new file mode 100644 index 0000000..64d65ca --- /dev/null +++ b/RiveRuntimeTests/Info.plist @@ -0,0 +1,22 @@ + + + + + CFBundleDevelopmentRegion + $(DEVELOPMENT_LANGUAGE) + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + $(PRODUCT_BUNDLE_PACKAGE_TYPE) + CFBundleShortVersionString + 1.0 + CFBundleVersion + 1 + + diff --git a/RiveRuntimeTests/RiveRuntimeTests.m b/RiveRuntimeTests/RiveRuntimeTests.m new file mode 100644 index 0000000..872bca3 --- /dev/null +++ b/RiveRuntimeTests/RiveRuntimeTests.m @@ -0,0 +1,37 @@ +// +// RiveRuntimeTests.m +// RiveRuntimeTests +// +// Created by Matt Sullivan on 8/30/20. +// Copyright © 2020 Rive. All rights reserved. +// + +#import + +@interface RiveRuntimeTests : XCTestCase + +@end + +@implementation RiveRuntimeTests + +- (void)setUp { + // Put setup code here. This method is called before the invocation of each test method in the class. +} + +- (void)tearDown { + // Put teardown code here. This method is called after the invocation of each test method in the class. +} + +- (void)testExample { + // This is an example of a functional test case. + // Use XCTAssert and related functions to verify your tests produce the correct results. +} + +- (void)testPerformanceExample { + // This is an example of a performance test case. + [self measureBlock:^{ + // Put the code you want to measure the time of here. + }]; +} + +@end diff --git a/Source/Info.plist b/Source/Info.plist new file mode 100644 index 0000000..9bcb244 --- /dev/null +++ b/Source/Info.plist @@ -0,0 +1,22 @@ + + + + + CFBundleDevelopmentRegion + $(DEVELOPMENT_LANGUAGE) + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + $(PRODUCT_BUNDLE_PACKAGE_TYPE) + CFBundleShortVersionString + 1.0 + CFBundleVersion + $(CURRENT_PROJECT_VERSION) + + diff --git a/Source/RiveKit/Rive.h b/Source/RiveKit/Rive.h new file mode 100644 index 0000000..91e8506 --- /dev/null +++ b/Source/RiveKit/Rive.h @@ -0,0 +1,97 @@ +// +// RiveFile.h +// RiveRuntime +// +// Created by Matt Sullivan on 8/30/20. +// Copyright © 2020 Rive. All rights reserved. +// + +#import +#import +#import + +NS_ASSUME_NONNULL_BEGIN + +// Different fits for rendering a Rive animation in a View +typedef NS_ENUM(NSInteger, Fit) { + Fill, + Contain, + Cover, + FitHeight, + FitWidth, + ScaleDown, + None +}; + +// Different alignments for rendering a Rive animation in a View +typedef NS_ENUM(NSInteger, Alignment) { + TopLeft, + TopCenter, + TopRight, + CenterLeft, + Center, + CenterRight, + BottomLeft, + BottomCenter, + BottomRight +}; + +// Result of file importing +typedef NS_ENUM(NSInteger, ImportResult) { + success, + unsupportedVersion, + malformed +}; + +@class RiveArtboard; + +// Linear animation instance wrapper +@interface RiveLinearAnimationInstance : NSObject + +-(void) applyTo:(RiveArtboard*) artboard; +-(void) advanceBy:(double)elapsedSeconds; + +@end + +// Animation wrapper +@interface RiveAnimation : NSObject + +- (NSString *) name; +-(RiveLinearAnimationInstance *) instance; + +@end + +// Render wrapper +@interface RiveRenderer : NSObject + +-(instancetype) initWithContext:(nonnull CGContextRef) context; +-(void) alignWithRect:(CGRect)rect withContentRect:(CGRect)contentRect withAlignment:(Alignment)alignment withFit:(Fit)fit; + +@end + +// Artboard wrapper +@interface RiveArtboard : NSObject + +-(NSString *) name; +-(CGRect) bounds; +-(NSInteger) animationCount; +-(RiveAnimation *) animationAt:(NSInteger)index; +-(void) advanceBy:(double)elapsedSeconds; +-(void) draw:(RiveRenderer *)renderer; + +@end + +// File wrapper +@interface RiveFile : NSObject + +@property (class, readonly) uint majorVersion; +@property (class, readonly) uint minorVersion; + ++ (ImportResult) import:(nonnull UInt8*)bytes bytesLength:(UInt64)length toFile:(nonnull RiveFile*)riveFile; + +// Wraps: Artboard* artboard() const; +- (RiveArtboard *) artboard; + +@end + +NS_ASSUME_NONNULL_END diff --git a/Source/RiveKit/Rive.mm b/Source/RiveKit/Rive.mm new file mode 100644 index 0000000..e6a42fc --- /dev/null +++ b/Source/RiveKit/Rive.mm @@ -0,0 +1,243 @@ +// +// RiveFile.m +// RiveRuntime +// +// Created by Matt Sullivan on 8/30/20. +// Copyright © 2020 Rive. All rights reserved. +// + +#import "Rive.h" +#import "RiveRenderer.hpp" + +#import "file.hpp" +#import "artboard.hpp" +#import "animation.hpp" +#import "linear_animation.hpp" +#import "linear_animation_instance.hpp" + + +@interface RiveLinearAnimationInstance() +-(instancetype) initWithAnimation:(rive::Animation *) riveAnimation; +@end + +@interface RiveAnimation () + -(instancetype) initWithAnimation:(rive::Animation *) riveAnimation; +@end + +@interface RiveArtboard () +@property (nonatomic, readonly) rive::Artboard* artboard; +-(instancetype) initWithArtboard:(rive::Artboard *) riveArtboard; +@end + +@interface RiveRenderer () +@property (nonatomic, readonly) rive::Renderer* renderer; +-(rive::Renderer *) renderer; +@end + +// RIVE RENDERER + +@implementation RiveRenderer + +CGContextRef ctx; + +-(instancetype) initWithContext:(CGContextRef) context { + if (self = [super init]) { + ctx = context; + _renderer = new rive::NewRiveRenderer(context); + return self; + } else { + return nil; + } +} + +-(void) alignWithRect:(CGRect)rect withContentRect:(CGRect)contentRect withAlignment:(Alignment)alignment withFit:(Fit)fit { +// NSLog(@"Rect in align %@", NSStringFromCGRect(rect)); + + // Calculate the AABBs + rive::AABB frame = rive::AABB(rect.origin.x, rect.origin.y, rect.size.width + rect.origin.x, rect.size.height + rect.origin.y); + rive::AABB content = rive::AABB(contentRect.origin.x, contentRect.origin.y, contentRect.size.width + contentRect.origin.x, rect.size.height + rect.origin.y); + + // Work out the fit + rive::Fit riveFit; + switch(fit) { + case Fill: + riveFit = rive::Fit::fill; + break; + case Contain: + riveFit = rive::Fit::contain; + break; + case Cover: + riveFit = rive::Fit::cover; + break; + case FitHeight: + riveFit = rive::Fit::fitHeight; + break; + case FitWidth: + riveFit = rive::Fit::fitWidth; + break; + case ScaleDown: + riveFit = rive::Fit::scaleDown; + break; + case None: + riveFit = rive::Fit::none; + break; + } + + // Work out the alignment + rive::Alignment riveAlignment = rive::Alignment(.0, .0); + switch(alignment) { + case TopLeft: + riveAlignment = rive::Alignment::topLeft; + break; + case TopCenter: + riveAlignment = rive::Alignment::topCenter; + break; + case TopRight: + riveAlignment = rive::Alignment::topRight; + break; + case CenterLeft: + riveAlignment = rive::Alignment::centerLeft; + break; + case Center: + riveAlignment = rive::Alignment::center; + break; + case CenterRight: + riveAlignment = rive::Alignment::centerRight; + break; + case BottomLeft: + riveAlignment = rive::Alignment::bottomLeft; + break; + case BottomCenter: + riveAlignment = rive::Alignment::bottomCenter; + break; + case BottomRight: + riveAlignment = rive::Alignment::bottomRight; + break; + } + + _renderer->align(riveFit, riveAlignment, frame, content); +} + +@end + +// RIVE FILE + +@implementation RiveFile + +rive::File *file; + ++ (uint) majorVersion { return UInt8(rive::File::majorVersion); } ++ (uint) minorVersion { return UInt8(rive::File::minorVersion); } + +// Imports a Rive file, through a parameter reference ++ (ImportResult) import:(nonnull UInt8 *)bytes bytesLength:(UInt64)length toFile:(nonnull RiveFile *)riveFile { + rive::BinaryReader reader = rive::BinaryReader(bytes, length); + rive::ImportResult result = rive::File::import(reader, &file); + if (result == rive::ImportResult::success) { + return success; + } + return malformed; +} + +- (RiveArtboard *) artboard { + return [[RiveArtboard alloc] initWithArtboard: file->artboard()]; +} + +@end + +// RIVE ARTBOARD + +@implementation RiveArtboard + +// rive::Artboard *artboard; + +-(instancetype) initWithArtboard:(rive::Artboard *) riveArtboard { + if (self = [super init]) { + _artboard = riveArtboard; + return self; + } else { + return nil; + } +} + +-(NSInteger) animationCount { + return _artboard->animationCount(); +} + +-(RiveAnimation *) animationAt:(NSInteger) index { + if (index >= [self animationCount]) { + return nil; + } + return [[RiveAnimation alloc] initWithAnimation: _artboard->animation(index)]; +} + +-(void) advanceBy:(double) elapsedSeconds { + _artboard->advance(elapsedSeconds); +} + +-(void) draw:(RiveRenderer *) renderer { + _artboard->draw([renderer renderer]); +} + +-(NSString *) name { + return [NSString stringWithUTF8String:_artboard->name().c_str()]; +} + +-(CGRect) bounds { + rive::AABB aabb = _artboard->bounds(); + return CGRectMake(aabb.minX, aabb.minY, aabb.width(), aabb.height()); +} + +@end + +// RIVE ANIMATION + +@implementation RiveAnimation + +rive::Animation *animation; + +-(instancetype) initWithAnimation:(rive::Animation *) riveAnimation { + if (self = [super init]) { + animation = riveAnimation; + return self; + } else { + return nil; + } +} + +- (NSString *) name { + std::string str = animation->name(); + return [NSString stringWithCString:str.c_str() encoding:[NSString defaultCStringEncoding]]; +} + +-(RiveLinearAnimationInstance *) instance { + return [[RiveLinearAnimationInstance alloc] initWithAnimation: animation]; +} + +@end + +// RIVE LINEAR ANIMATION INSTANCE + +@implementation RiveLinearAnimationInstance + +rive::LinearAnimationInstance *instance; + +-(instancetype) initWithAnimation:(rive::Animation *) riveAnimation { + if (self = [super init]) { + + instance = new rive::LinearAnimationInstance(reinterpret_cast(riveAnimation)); + return self; + } else { + return nil; + } +} + +-(void) applyTo:(RiveArtboard*) artboard { + instance->apply(artboard.artboard); +} + +-(void) advanceBy:(double)elapsedSeconds { + instance->advance(elapsedSeconds); +} + +@end diff --git a/Source/RiveKit/RiveRenderer.hpp b/Source/RiveKit/RiveRenderer.hpp new file mode 100644 index 0000000..a10d96e --- /dev/null +++ b/Source/RiveKit/RiveRenderer.hpp @@ -0,0 +1,162 @@ +// +// RiveRenderer.hpp +// RiveRuntime +// +// Created by Matt Sullivan on 9/11/20. +// Copyright © 2020 Rive. All rights reserved. +// + +#ifndef rive_renderer_hpp +#define rive_renderer_hpp + +#import + +#import + +#import "renderer.hpp" + +namespace rive +{ + + enum class RiveGradient + { + None, + Linear, + Radial + }; + + enum class RivePaintStyle + { + None, + Stroke, + Fill + }; + + enum class RiveStrokeJoin + { + None, + Miter, + Round, + Bevel + }; + + enum class RiveStrokeCap + { + None, + Butt, + Round, + Square + }; + + enum class RiveBlendMode : unsigned int + { + None = 0, + SrcOver = static_cast(BlendMode::srcOver), + Screen = static_cast(BlendMode::screen), + Overlay = static_cast(BlendMode::overlay), + Darken = static_cast(BlendMode::darken), + Lighten = static_cast(BlendMode::lighten), + ColorDodge = static_cast(BlendMode::colorDodge), + ColorBurn = static_cast(BlendMode::colorBurn), + HardLight = static_cast(BlendMode::hardLight), + SoftLight = static_cast(BlendMode::softLight), + Difference = static_cast(BlendMode::difference), + Exclusion = static_cast(BlendMode::exclusion), + Multiply = static_cast(BlendMode::multiply), + Hue = static_cast(BlendMode::hue), + Saturation = static_cast(BlendMode::saturation), + Color = static_cast(BlendMode::color), + Luminosity = static_cast(BlendMode::luminosity) + }; + + + class RiveRenderPaint : public RenderPaint + { + private: + public: + CGColorRef cgColor = NULL; + RivePaintStyle paintStyle = RivePaintStyle::None; + RiveStrokeJoin strokeJoin = RiveStrokeJoin::None; + RiveStrokeCap strokeCap = RiveStrokeCap::None; + RiveBlendMode currentBlendMode; + float paintThickness; + + // Gradient + RiveGradient gradient = RiveGradient::None; + CGPoint gradientStart; + CGPoint gradientEnd; + std::vector colorStops; + std::vector stops; + + + RiveRenderPaint(); + + void color(unsigned int value) override; + void style(RenderPaintStyle value) override; + void thickness(float value) override; + void join(StrokeJoin value) override; + void cap(StrokeCap value) override; + void blendMode(BlendMode value) override; + void linearGradient(float sx, float sy, float ex, float ey) override; + void radialGradient(float sx, float sy, float ex, float ey) override; + void addStop(unsigned int color, float stop) override; + void completeGradient() override; + }; + + enum class RivePathCommandType + { + MoveTo, + LineTo, + CubicTo, + Reset, + Close + }; + + struct RivePathCommand + { + RivePathCommandType command; + float x; + float y; + float inX; + float inY; + float outX; + float outY; + }; + + class RiveRenderPath : public RenderPath + { + private: + UIBezierPath *path; + FillRule m_FillRule; + + public: + RiveRenderPath(); + UIBezierPath *getBezierPath() { return path; } + FillRule getFillRule() { return m_FillRule; } + + void reset() override; + void addPath(CommandPath *path, const Mat2D &transform) override; + void fillRule(FillRule value) override; + void moveTo(float x, float y) override; + void lineTo(float x, float y) override; + void cubicTo(float ox, float oy, float ix, float iy, float x, float y) override; + void close() override; + }; + + class NewRiveRenderer : public Renderer + { + private: + CGContextRef ctx; + + public: + NewRiveRenderer(CGContextRef context) : ctx(context) {} + + void save() override; + void restore() override; + void transform(const Mat2D &transform) override; + void drawPath(RenderPath *path, RenderPaint *paint) override; + void clipPath(RenderPath *path) override; + }; +} // namespace rive + +#endif /* rive_renderer_hpp */ diff --git a/Source/RiveKit/RiveRenderer.mm b/Source/RiveKit/RiveRenderer.mm new file mode 100644 index 0000000..3ae3d53 --- /dev/null +++ b/Source/RiveKit/RiveRenderer.mm @@ -0,0 +1,451 @@ +// +// RiveRenderer.m +// RiveRuntime +// +// Created by Matt Sullivan on 9/11/20. +// Copyright © 2020 Rive. All rights reserved. +// + + +#include "RiveRenderer.hpp" +#include "renderer.hpp" + +// Creates a UIColor from an RGBA int value +#define UIColorFromRGB(rgbValue) \ +[UIColor colorWithRed:((float)((rgbValue & 0xFF0000) >> 16))/0xFF \ + green:((float)((rgbValue & 0xFF00) >> 8))/0xFF \ + blue:((float)(rgbValue & 0xFF))/0xFF \ + alpha:((float)((rgbValue & 0xFF000000) >> 24))/0xFF] + +#define opacityFromARGB(rgbValue) ((float)((rgbValue & 0xFF000000) >> 24))/0xFF + +using namespace rive; + +// Base color space used throughout the renderer +const CGColorSpaceRef baseSpace = CGColorSpaceCreateDeviceRGB(); + +/* + * Render paint + */ + +RiveRenderPaint::RiveRenderPaint() { + // NSLog(@"INITIALIZING A NEW RENDER PAINT"); +} + +void RiveRenderPaint::style(RenderPaintStyle value) { +// NSLog(@" --- RenderPaint::style"); + switch(value) { + case RenderPaintStyle::fill: + paintStyle = RivePaintStyle::Fill; + break; + case RenderPaintStyle::stroke: +// NSLog(@"Ask for stroke"); + paintStyle = RivePaintStyle::Stroke; + break; + } +} + +void RiveRenderPaint::color(unsigned int value) { + // NSLog(@" --- RenderPaint::color -> %u", value); + CGFloat color [] = { + ((float)((value & 0xFF0000) >> 16))/0xFF, + ((float)((value & 0xFF00) >> 8))/0xFF, + ((float)(value & 0xFF))/0xFF, + ((float)((value & 0xFF000000) >> 24))/0xFF + }; + cgColor = CGColorCreate(baseSpace, color); +} + +void RiveRenderPaint::thickness(float value) { +// NSLog(@" --- RenderPaint::thickness %.1f", value); + paintThickness = value; +} + +void RiveRenderPaint::join(StrokeJoin value) { +// NSLog(@" --- RenderPaint::join"); + switch(value) { + case StrokeJoin::miter: + strokeJoin = RiveStrokeJoin::Miter; + break; + case StrokeJoin::round: + strokeJoin = RiveStrokeJoin::Round; + break; + case StrokeJoin::bevel: + strokeJoin = RiveStrokeJoin::Bevel; + break; + default: + strokeJoin = RiveStrokeJoin::None; + break; + } +} + +void RiveRenderPaint::cap(StrokeCap value) { +// NSLog(@" --- RenderPaint::cap"); + switch (value) { + case StrokeCap::butt: + strokeCap = RiveStrokeCap::Butt; + break; + case StrokeCap::round: + strokeCap = RiveStrokeCap::Round; + break; + case StrokeCap::square: + strokeCap = RiveStrokeCap::Square; + break; + default: + strokeCap = RiveStrokeCap::None; + break; + } +} + +void RiveRenderPaint::blendMode(BlendMode value) { +// NSLog(@" --- RenderPaint::blendMode -> %d", value); + switch (value) { + case BlendMode::srcOver: + currentBlendMode = RiveBlendMode::SrcOver; + break; + case BlendMode::screen: + currentBlendMode = RiveBlendMode::Screen; + break; + case BlendMode::overlay: + currentBlendMode = RiveBlendMode::Overlay; + break; + case BlendMode::darken: + currentBlendMode = RiveBlendMode::Darken; + break; + case BlendMode::lighten: + currentBlendMode = RiveBlendMode::Lighten; + break; + case BlendMode::colorDodge: + currentBlendMode = RiveBlendMode::ColorDodge; + break; + case BlendMode::colorBurn: + currentBlendMode = RiveBlendMode::ColorBurn; + break; + case BlendMode::hardLight: + currentBlendMode = RiveBlendMode::HardLight; + break; + case BlendMode::softLight: + currentBlendMode = RiveBlendMode::SoftLight; + break; + case BlendMode::difference: + currentBlendMode = RiveBlendMode::Difference; + break; + case BlendMode::exclusion: + currentBlendMode = RiveBlendMode::Exclusion; + break; + case BlendMode::multiply: + currentBlendMode = RiveBlendMode::Multiply; + break; + case BlendMode::hue: + currentBlendMode = RiveBlendMode::Hue; + break; + case BlendMode::saturation: + currentBlendMode = RiveBlendMode::Saturation; + break; + case BlendMode::color: + currentBlendMode = RiveBlendMode::Color; + break; + case BlendMode::luminosity: + currentBlendMode = RiveBlendMode::Luminosity; + break; + default: + break; + } +} + +void RiveRenderPaint::linearGradient(float sx, float sy, float ex, float ey) { +// NSLog(@" --- RenderPaint::linearGradient (%.1f,%.1f), (%.1f,%.1f)", sx, sy, ex, ey); + gradient = RiveGradient::Linear; + gradientStart = CGPointMake(sx, sy); + gradientEnd = CGPointMake(ex, ey); + +} +void RiveRenderPaint::radialGradient(float sx, float sy, float ex, float ey) { +// NSLog(@" --- RenderPaint::radialGradient"); + gradient = RiveGradient::Radial; + gradientStart = CGPointMake(sx, sy); + gradientEnd = CGPointMake(ex, ey); + +} +void RiveRenderPaint::addStop(unsigned int color, float stop) { +// NSLog(@" --- RenderPaint::addStop"); + colorStops.emplace_back(((float)((color & 0xFF0000) >> 16))/0xFF); + colorStops.emplace_back(((float)((color & 0xFF00) >> 8))/0xFF); + colorStops.emplace_back(((float)(color & 0xFF))/0xFF); + colorStops.emplace_back(((float)((color & 0xFF000000) >> 24))/0xFF); + stops.emplace_back(stop); +} +void RiveRenderPaint::completeGradient() { +// NSLog(@" --- RenderPaint::completeGradient"); +} + +/* + * Render path + */ + +RiveRenderPath::RiveRenderPath() { + path = [[UIBezierPath alloc] init]; +// NSLog(@"INITIALIZING A NEW RENDER PATH"); +} + +void RiveRenderPath::close() { + // NSLog(@" --- RenderPath::close"); + [path closePath]; +} + +void RiveRenderPath::reset() { +// NSLog(@" --- RenderPath::reset"); + path = [[UIBezierPath alloc] init]; + // [path removeAllPoints]; +} + +void RiveRenderPath::addPath(CommandPath* path, const Mat2D& transform) { + // NSLog(@" --- RenderPath::addPath"); + UIBezierPath *addPath = reinterpret_cast(path)->getBezierPath(); + + CGAffineTransform affineTransform = CGAffineTransformMake(transform.xx(), + transform.xy(), + transform.yx(), + transform.yy(), + transform.tx(), + transform.ty()); + + UIBezierPath *clonePath = [addPath copy]; + + [clonePath applyTransform:affineTransform]; + [this->path appendPath:clonePath]; +} + +void RiveRenderPath::fillRule(FillRule value) { + // NSLog(@" --- RenderPath::fillRule"); + m_FillRule = value; +} + +void RiveRenderPath::moveTo(float x, float y) { + // NSLog(@" --- RenderPath::moveTo x %.1f, y %.1f", x, y); + [path moveToPoint:CGPointMake(x, y)]; +} + +void RiveRenderPath::lineTo(float x, float y) { +// NSLog(@" --- RenderPath::lineTo x %.1f, y %.1f", x, y); + if (isnan(x) || isnan(y)) { + NSLog(@"Received NaN in lineTo!!!!"); + return; + } + [path addLineToPoint:CGPointMake(x, y)]; +} + +void RiveRenderPath::cubicTo(float ox, float oy, float ix, float iy, float x, float y) { + // NSLog(@" --- call to RenderPath::cubicTo %.1f, %.1f, %.1f, %.1f, %.1f, %.1f, ", ox, oy, ix, iy, x, y); + [path addCurveToPoint:CGPointMake(x, y) + controlPoint1:CGPointMake(ox, oy) + controlPoint2:CGPointMake(ix, iy) + ]; +} + +// Renderer + +// Implement save by creating a sublayer +void NewRiveRenderer::save() { +// NSLog(@" --- Renderer::save"); + CGContextSaveGState(ctx); +} + +// Implement restore by moving back up to the parent layer. If the parent +// layer is ctx, then there's been a restore without a save +void NewRiveRenderer::restore() { +// NSLog(@" -- Renderer::restore"); + CGContextRestoreGState(ctx); +} + +void NewRiveRenderer::drawPath(RenderPath* path, RenderPaint* paint) { + + RiveRenderPaint *rivePaint = reinterpret_cast(paint); + RiveRenderPath *rivePath = reinterpret_cast(path); + +// NSLog(@" --- Renderer::drawPath path for type %d", rivePaint->paintStyle); + + // Apply the stroke join + if (rivePaint->strokeJoin != RiveStrokeJoin::None) { + switch(rivePaint->strokeJoin) { + case RiveStrokeJoin::Miter: + CGContextSetLineJoin(ctx, kCGLineJoinMiter); + break; + case RiveStrokeJoin::Round: + CGContextSetLineJoin(ctx, kCGLineJoinRound); + break; + case RiveStrokeJoin::Bevel: + CGContextSetLineJoin(ctx, kCGLineJoinBevel); + break; + default: + break; + } + } + + // Apply the strokeCap + if (rivePaint->strokeCap != RiveStrokeCap::None) { + switch (rivePaint->strokeCap) { + case RiveStrokeCap::Butt: + CGContextSetLineCap(ctx, kCGLineCapButt); + break; + case RiveStrokeCap::Round: + CGContextSetLineCap(ctx, kCGLineCapRound); + break; + case RiveStrokeCap::Square: + CGContextSetLineCap(ctx, kCGLineCapSquare); + break; + default: + break; + } + } + + // Apply the blend mode + if (rivePaint->currentBlendMode != RiveBlendMode::None) { + switch (rivePaint->currentBlendMode) { + case RiveBlendMode::SrcOver: + CGContextSetBlendMode(ctx, kCGBlendModeNormal); + break; + case RiveBlendMode::Screen: + CGContextSetBlendMode(ctx, kCGBlendModeScreen); + break; + case RiveBlendMode::Overlay: + CGContextSetBlendMode(ctx, kCGBlendModeOverlay); + break; + case RiveBlendMode::Darken: + CGContextSetBlendMode(ctx, kCGBlendModeDarken); + break; + case RiveBlendMode::Lighten: + CGContextSetBlendMode(ctx, kCGBlendModeLighten); + break; + case RiveBlendMode::ColorDodge: + CGContextSetBlendMode(ctx, kCGBlendModeColorDodge); + break; + case RiveBlendMode::ColorBurn: + CGContextSetBlendMode(ctx, kCGBlendModeColorBurn); + break; + case RiveBlendMode::HardLight: + CGContextSetBlendMode(ctx, kCGBlendModeHardLight); + break; + case RiveBlendMode::SoftLight: + CGContextSetBlendMode(ctx, kCGBlendModeSoftLight); + break; + case RiveBlendMode::Difference: + CGContextSetBlendMode(ctx, kCGBlendModeDifference); + break; + case RiveBlendMode::Exclusion: + CGContextSetBlendMode(ctx, kCGBlendModeExclusion); + break; + case RiveBlendMode::Multiply: + CGContextSetBlendMode(ctx, kCGBlendModeMultiply); + break; + case RiveBlendMode::Hue: + CGContextSetBlendMode(ctx, kCGBlendModeHue); + break; + case RiveBlendMode::Saturation: + CGContextSetBlendMode(ctx, kCGBlendModeSaturation); + break; + case RiveBlendMode::Color: + CGContextSetBlendMode(ctx, kCGBlendModeColor); + break; + case RiveBlendMode::Luminosity: + CGContextSetBlendMode(ctx, kCGBlendModeLuminosity); + break; + default: + break; + } + } + + // Add the path and then paint it appropriately + CGPathRef cgPath = rivePath->getBezierPath().CGPath; + CGContextAddPath(ctx, cgPath); + + // If fill or stroke set, draw appropriately + if (rivePaint->cgColor != NULL) { + switch (rivePaint->paintStyle) { + case RivePaintStyle::Stroke: +// NSLog(@"Painting stroke"); + CGContextSetStrokeColorWithColor(ctx, rivePaint->cgColor); + CGContextSetLineWidth(ctx, rivePaint->paintThickness); + CGContextDrawPath(ctx, kCGPathStroke); + break; + case RivePaintStyle::Fill: +// NSLog(@"Painting fill"); + CGContextSetFillColorWithColor(ctx, rivePaint->cgColor); + CGContextDrawPath(ctx, kCGPathFill); + break; + case RivePaintStyle::None: + break; + default: + break; + } + } else { +// NSLog(@"Color is null!!!"); + } + + // Draw gradient + if (rivePaint->gradient != RiveGradient::None) { + NSLog(@"Drawing a gradient"); + CGGradientRef gradient = CGGradientCreateWithColorComponents(baseSpace, &rivePaint->colorStops[0], &rivePaint->stops[0], rivePaint->stops.size()); + + // If the path is a stroke, then convert the path to a stroked path to prevent the gradient from filling the path + if (rivePaint->paintStyle == RivePaintStyle::Stroke) { + CGContextSetLineWidth(ctx, rivePaint->paintThickness); + CGContextReplacePathWithStrokedPath(ctx); + } + CGContextClip(ctx); + + if (rivePaint->gradient == RiveGradient::Linear) { + CGContextDrawLinearGradient(ctx, gradient, rivePaint->gradientStart, rivePaint->gradientEnd, kCGGradientDrawsBeforeStartLocation | kCGGradientDrawsAfterEndLocation); + } else if (rivePaint->gradient == RiveGradient:: Radial) { + // Calculate the end radius + float dx = rivePaint->gradientEnd.x - rivePaint->gradientStart.x; + float dy = rivePaint->gradientEnd.y - rivePaint->gradientStart.y; + float endRadius = sqrt(dx*dx + dy*dy); + CGContextDrawRadialGradient(ctx, gradient, rivePaint->gradientStart, 0, rivePaint->gradientStart, endRadius, kCGGradientDrawsBeforeStartLocation | kCGGradientDrawsAfterEndLocation); + //CGContextSetFillColorWithColor(ctx, [UIColor yellowColor].CGColor); + } + CGGradientRelease(gradient); gradient = NULL; + + if (rivePaint->paintStyle == RivePaintStyle::Fill) { + CGContextDrawPath(ctx, kCGPathFill); + } else if (rivePaint->paintStyle == RivePaintStyle::Stroke) { + NSLog(@"Gradient paint with stroke"); + CGContextDrawPath(ctx, kCGPathStroke); + } + } +} + +void NewRiveRenderer::clipPath(RenderPath* path) { + const CGPath *clipPath = reinterpret_cast(path)->getBezierPath().CGPath; +// NSLog(@" --- Renderer::clipPath %@", clipPath); + + CGContextAddPath(ctx, clipPath); + CGContextClip(ctx); +} + +void NewRiveRenderer::transform(const Mat2D& transform) { +// NSLog(@" --- Renderer::transform %.1f, %.1f, %.1f, %.1f, %.1f, %.1f", +// transform.xx(), +// transform.xy(), +// transform.yx(), +// transform.yy(), +// transform.tx(), +// transform.ty()); + + CGContextConcatCTM(ctx, CGAffineTransformMake(transform.xx(), + transform.xy(), + transform.yx(), + transform.yy(), + transform.tx(), + transform.ty())); +} + +/* + * makeRenderPaint & makeRenderPath implementations + */ + +namespace rive { + RenderPaint* makeRenderPaint() { return new RiveRenderPaint(); } + + RenderPath* makeRenderPath() { return new RiveRenderPath(); } +} diff --git a/Source/RiveKit/RiveView.h b/Source/RiveKit/RiveView.h new file mode 100644 index 0000000..3220c8e --- /dev/null +++ b/Source/RiveKit/RiveView.h @@ -0,0 +1,19 @@ +// +// RiveView.h +// RiveRuntime +// +// Created by Matt Sullivan on 9/11/20. +// Copyright © 2020 Rive. All rights reserved. +// + +#import "Rive.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface RiveView : UIView + +- (void)updateArtboard:(RiveArtboard*)artboard; + +@end + +NS_ASSUME_NONNULL_END diff --git a/Source/RiveKit/RiveView.mm b/Source/RiveKit/RiveView.mm new file mode 100644 index 0000000..fa40180 --- /dev/null +++ b/Source/RiveKit/RiveView.mm @@ -0,0 +1,30 @@ +// +// RiveView.m +// RiveRuntime +// +// Created by Matt Sullivan on 9/11/20. +// Copyright © 2020 Rive. All rights reserved. +// + +#import "RiveView.h" +#import "RiveRenderer.hpp" + +@interface RiveView() + +@end + +@implementation RiveView + +RiveArtboard *riveArtboard; + +- (void)drawRect:(CGRect)rect { + RiveRenderer *renderer = [[RiveRenderer alloc] initWithContext:UIGraphicsGetCurrentContext()]; + [renderer alignWithRect:rect withContentRect:[riveArtboard bounds] withAlignment:Alignment::Center withFit:Fit::Contain]; + [riveArtboard draw:renderer]; +} + +- (void)updateArtboard:(RiveArtboard *)artboard { + riveArtboard = artboard; +} + +@end diff --git a/Source/RiveKit/RiveViewController.h b/Source/RiveKit/RiveViewController.h new file mode 100644 index 0000000..0881442 --- /dev/null +++ b/Source/RiveKit/RiveViewController.h @@ -0,0 +1,19 @@ +// +// RiveViewController.h +// RiveRuntime +// +// Created by Matt Sullivan on 9/11/20. +// Copyright © 2020 Rive. All rights reserved. +// + +#import + +NS_ASSUME_NONNULL_BEGIN + +@interface RiveViewController : UIViewController + +-(instancetype)initWithResource:(NSString *)resource withExtension:(NSString *)extension; + +@end + +NS_ASSUME_NONNULL_END diff --git a/Source/RiveKit/RiveViewController.mm b/Source/RiveKit/RiveViewController.mm new file mode 100644 index 0000000..77f59e7 --- /dev/null +++ b/Source/RiveKit/RiveViewController.mm @@ -0,0 +1,114 @@ +// +// RiveViewController.m +// RiveRuntime +// +// Created by Matt Sullivan on 9/11/20. +// Copyright © 2020 Rive. All rights reserved. +// + +#import "Rive.h" +#import "RiveViewController.h" +#import "RiveView.h" + +@implementation RiveViewController + +NSString *_resource; +NSString *_extension; + +RiveArtboard *artboard; +RiveLinearAnimationInstance *_instance; + +CADisplayLink *displayLink = NULL; +CFTimeInterval lastTime = .0; + + +- (instancetype)initWithResource:(NSString *) resource withExtension:(NSString *)extension { + if (self = [super init]) { + _resource = resource; + _extension = extension; + return self; + } else { + return nil; + } +} + +- (void)viewDidLoad { + [super viewDidLoad]; + [self forResource:_resource withExtension:_extension]; +} + +- (void) loadView { + RiveView *riveView = [[RiveView alloc] init]; + [riveView setBackgroundColor:[UIColor blueColor]]; + self.view = riveView; +} + +- (void) forResource: (NSString *) resource withExtension: (NSString *) extension { + // load the Rive data + NSString *filepath = [[NSBundle mainBundle] pathForResource:resource ofType:extension]; + NSError *error; + NSData* data = [NSData dataWithContentsOfFile:filepath options:NSDataReadingUncached error:&error]; + // initialize the Rive file + RiveFile* riveFile = [[RiveFile alloc] init]; + UInt8 *bytes = (UInt8 *) data.bytes; + ImportResult result = [RiveFile import:bytes bytesLength:data.length toFile:riveFile]; + if (result != 0) { + NSLog(@"Unable to import file: result code %i", (uint)result); + return; + } + + artboard = [riveFile artboard]; + // update the artboard in the view + [(RiveView *)self.view updateArtboard: artboard]; + + NSInteger animationCount = [artboard animationCount]; +// NSLog(@"Animation count: %d", (uint)animationcount); + + if (animationCount > 0) { + RiveAnimation *animation = [artboard animationAt: 0]; + // NSLog(@"Animation name: %@", [animation name]); + _instance = [animation instance]; + [_instance advanceBy:.0]; // advance the animation + [_instance applyTo:artboard]; // apply to the artboard + [artboard advanceBy:.0]; // advance the artboard + + [self runTimer]; + } +} + +-(void) runTimer { + displayLink = [CADisplayLink displayLinkWithTarget:self selector:@selector(tick)]; + [displayLink addToRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode]; +} + +-(void) stopTimer { + if (displayLink != NULL) { + [displayLink removeFromRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode]; + } +} + +-(void) tick { + if (displayLink == NULL) { + // Something's gone wrong, clean up and bug out + [self stopTimer]; + } + + double timestamp = [displayLink timestamp]; + + // Last time needs to be set on the first tick + if (lastTime == 0) { + lastTime = timestamp; + } + + // Calculate the time elapsed between ticks + double elapsedTime = timestamp - lastTime; + lastTime = timestamp; +// NSLog(@"Timestamp: %.1f, elapsed time: %.5f, framerate %.1f", [displayLink timestamp], elapsedTime, 1. / elapsedTime); + + [_instance advanceBy:elapsedTime]; // advance the animation + [_instance applyTo:artboard]; // apply to the artboard + [artboard advanceBy:elapsedTime]; // advance the artboard + + [self.view setNeedsDisplay]; +} +@end diff --git a/Source/RiveRuntime.h b/Source/RiveRuntime.h new file mode 100644 index 0000000..b0e8bd9 --- /dev/null +++ b/Source/RiveRuntime.h @@ -0,0 +1,20 @@ +// +// RiveRuntime.h +// RiveRuntime +// +// Created by Matt Sullivan on 8/30/20. +// Copyright © 2020 Rive. All rights reserved. +// + +#import + +//! Project version number for RiveRuntime. +FOUNDATION_EXPORT double RiveRuntimeVersionNumber; + +//! Project version string for RiveRuntime. +FOUNDATION_EXPORT const unsigned char RiveRuntimeVersionString[]; + +// In this header, you should import all the public headers of your framework using statements like #import +#import +#import +#import diff --git a/Source/Runtime/RiveRenderer.h b/Source/Runtime/RiveRenderer.h new file mode 100644 index 0000000..198f436 --- /dev/null +++ b/Source/Runtime/RiveRenderer.h @@ -0,0 +1,20 @@ +// +// RiveRenderer.h +// RiveRuntime +// +// Created by Matt Sullivan on 8/31/20. +// Copyright © 2020 Rive. All rights reserved. +// + +#import +#import + +NS_ASSUME_NONNULL_BEGIN + +@interface RiveRenderer : NSObject + +-(instancetype) initWithContext:(UIBezierPath *) context; + +@end + +NS_ASSUME_NONNULL_END diff --git a/Source/Runtime/RiveRenderer.mm b/Source/Runtime/RiveRenderer.mm new file mode 100644 index 0000000..7e25526 --- /dev/null +++ b/Source/Runtime/RiveRenderer.mm @@ -0,0 +1,26 @@ +// +// RiveRenderer.m +// RiveRuntime +// +// Created by Matt Sullivan on 8/31/20. +// Copyright © 2020 Rive. All rights reserved. +// + +#import "RiveRenderer.h" + + +@implementation RiveRenderer + +//iOSRenderer *renderer; +UIBezierPath *renderContext; + +-(instancetype) initWithContext:(UIBezierPath *) context { + if (self = [super init]) { + renderContext = context; + return self; + } else { + return nil; + } +} + +@end diff --git a/Source/TestHeader.h b/Source/TestHeader.h new file mode 100644 index 0000000..1499e31 --- /dev/null +++ b/Source/TestHeader.h @@ -0,0 +1,15 @@ +// +// TestHeader.h +// RiveRuntime +// +// Created by Matt Sullivan on 8/30/20. +// Copyright © 2020 Rive. All rights reserved. +// + +#ifndef TestHeader_h +#define TestHeader_h + +#import "RiveRuntime/Runtime/RiveFile.h" + + +#endif /* TestHeader_h */