diff --git a/Example/Pods/Pods.xcodeproj/project.pbxproj b/Example/Pods/Pods.xcodeproj/project.pbxproj index ffa9df6fa6..99d9acf6d3 100644 --- a/Example/Pods/Pods.xcodeproj/project.pbxproj +++ b/Example/Pods/Pods.xcodeproj/project.pbxproj @@ -8,251 +8,259 @@ /* Begin PBXBuildFile section */ 01B90D54FAED1AE4FD2D90E5B97772B5 /* Pods-Lottie Viewer-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 9AE28354BEE8C3C41E6AFE2DFC2E018D /* Pods-Lottie Viewer-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 039B9195607CF9436EB16FC422C7C8F6 /* LOTValueInterpolator.m in Sources */ = {isa = PBXBuildFile; fileRef = 40AB914034285EFBF52E103FB005E657 /* LOTValueInterpolator.m */; }; - 05D6165CEC602834F3CC154694226DAF /* LOTPolygonAnimator.m in Sources */ = {isa = PBXBuildFile; fileRef = 38EADF596ED162A0EE3D35E987685FD7 /* LOTPolygonAnimator.m */; }; - 05DCB2668AE71B8461C6B0038D7F0B84 /* LOTColorInterpolator.h in Headers */ = {isa = PBXBuildFile; fileRef = 23FA32C327A312DAAA9ED200805F76B7 /* LOTColorInterpolator.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 08C7E4B86DE6DB906CCB9A481A65C313 /* LOTRenderGroup.h in Headers */ = {isa = PBXBuildFile; fileRef = 428DD5AEB7E323676A510C146F1094C6 /* LOTRenderGroup.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 08E6A4E0F674A367F312F6D66EE953E0 /* LOTAnimationView_Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = A9B2C2F7B5FF9CBF0156C2A393E74EC7 /* LOTAnimationView_Internal.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 08F6D82193AB77499BD8E58E0E3105D7 /* LOTNumberInterpolator.m in Sources */ = {isa = PBXBuildFile; fileRef = EEE3A349FAA8F7B5DE1167968D29A4DE /* LOTNumberInterpolator.m */; }; - 09EC2FB3DC9FF040795E659488718844 /* LOTLayerGroup.h in Headers */ = {isa = PBXBuildFile; fileRef = F33AD0B7CE0E660FB299E773A9F8F96D /* LOTLayerGroup.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 0AA963C7A974BDCA1F55D16BCF14B4F6 /* LOTRenderNode.m in Sources */ = {isa = PBXBuildFile; fileRef = 7236E29E9520E96B96DA447A0F73D04A /* LOTRenderNode.m */; }; - 0B453D5F7C054F621EF62F392CFE3706 /* LOTCircleAnimator.h in Headers */ = {isa = PBXBuildFile; fileRef = 8042D1984741739FE2632E3381091EB2 /* LOTCircleAnimator.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 0BA283A9224B96C6CF9095CDB429C471 /* LOTLayerContainer.m in Sources */ = {isa = PBXBuildFile; fileRef = 5D8DAA2C3DCE843D862FC6B4C6892802 /* LOTLayerContainer.m */; }; - 0DB4F05B1A2C6AF5EFE1B2E6260922F9 /* LOTArrayInterpolator.h in Headers */ = {isa = PBXBuildFile; fileRef = EBF64DB27BB35CA09D041C9D2F9CEC4E /* LOTArrayInterpolator.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 0EC98F47772B09070C279DD0F32C0D4B /* LOTTrimPathNode.h in Headers */ = {isa = PBXBuildFile; fileRef = 4693DA6769DE389ACDF653903848C95B /* LOTTrimPathNode.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 0F2B78A56E6DB35F129B56AAF595DDB3 /* LOTSizeInterpolator.h in Headers */ = {isa = PBXBuildFile; fileRef = D96D088283758BBDC60716E7A54335B7 /* LOTSizeInterpolator.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 0F3426DBA3F18A3960BC1FD3EC944703 /* LOTRenderGroup.m in Sources */ = {isa = PBXBuildFile; fileRef = A83C74E1BE1843229C1EAC13B0DA0245 /* LOTRenderGroup.m */; }; - 142217BC037E8E46E4D25DE2CE646163 /* LOTPathInterpolator.h in Headers */ = {isa = PBXBuildFile; fileRef = 82941F8BBD825D99E98F170139381C57 /* LOTPathInterpolator.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 0245942B198683A20AD6F626B687431C /* LOTCompositionContainer.m in Sources */ = {isa = PBXBuildFile; fileRef = C7BC534D86AC2359352FC6671F83BDC7 /* LOTCompositionContainer.m */; }; + 0407B5FE687C101034594DFF7A04E997 /* LOTPolystarAnimator.m in Sources */ = {isa = PBXBuildFile; fileRef = C42115F3B2945D84380F9E656A1B9F48 /* LOTPolystarAnimator.m */; }; + 04217E5B30D82DCFA063E54CFD05218D /* LOTPathInterpolator.m in Sources */ = {isa = PBXBuildFile; fileRef = 2E71C3833821DFA2123490CE5786AED4 /* LOTPathInterpolator.m */; }; + 04664392D507F924479281DFCDEA88D3 /* LOTRepeaterRenderer.h in Headers */ = {isa = PBXBuildFile; fileRef = A9D29A71E99723F7CE4CEF8B9A8D4C23 /* LOTRepeaterRenderer.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 0B3B91633107A151A36E291D4D9323E4 /* LOTAnimationView_Compat.h in Headers */ = {isa = PBXBuildFile; fileRef = 5E3AC90F32703CE393FBB9199E8E6900 /* LOTAnimationView_Compat.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 0F257F1D67A58F5A04AEAC05D07EE110 /* CALayer+Compat.m in Sources */ = {isa = PBXBuildFile; fileRef = 9B56F1E5281EF1C7D517C356ABDB0E5E /* CALayer+Compat.m */; }; + 0F54F0C2C657AC52F9342E46E2975E3D /* LOTKeypath.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F2FC4086F209D0B9CA768C11A8E5518 /* LOTKeypath.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 11ED8106DD969F9F36AF8C08F0E3717A /* LOTShapePath.h in Headers */ = {isa = PBXBuildFile; fileRef = 9582A5D2F9520C1CC62EAF342EBB7BBA /* LOTShapePath.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 13AFB8C8A869249A261F2117C9B00981 /* CGGeometry+LOTAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = 18EA856E98C145EB7C34191962E18191 /* CGGeometry+LOTAdditions.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 152E12A252E27089D997AE7DF07AC2FE /* LOTPolygonAnimator.h in Headers */ = {isa = PBXBuildFile; fileRef = B15D464E8BA5683658A7A69691796C20 /* LOTPolygonAnimator.h */; settings = {ATTRIBUTES = (Project, ); }; }; 15FC70FD083E40FAD0F5944D41DD88BE /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7B84DD8BA444B84A5807EA458734DA5D /* Foundation.framework */; }; - 1614629FE71A6B3389F1DC69319E5218 /* LOTAnimationView.m in Sources */ = {isa = PBXBuildFile; fileRef = 8D3EF8864151AD375897EEEE0049265B /* LOTAnimationView.m */; }; - 1746042C2014C2DFF10A9B5DFA581F06 /* LOTRadialGradientLayer.h in Headers */ = {isa = PBXBuildFile; fileRef = 086A58805232A189CDBDA97740A7F97B /* LOTRadialGradientLayer.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 176B06845D3B01A0CBD5704441F35727 /* LOTShapeRectangle.h in Headers */ = {isa = PBXBuildFile; fileRef = 3CA45971085CDBB78AAE42054A76E077 /* LOTShapeRectangle.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 17FE8B4840FC738F17DDD059F0536734 /* LOTAnimationView_Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = A9B2C2F7B5FF9CBF0156C2A393E74EC7 /* LOTAnimationView_Internal.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 189AA10449833F0096ADBB8649133D6F /* LOTMask.h in Headers */ = {isa = PBXBuildFile; fileRef = 8BF5C0DCDD5501651D216815D08406BA /* LOTMask.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 19A65FE2DF94AEF64B64A10C55751729 /* LOTSizeInterpolator.h in Headers */ = {isa = PBXBuildFile; fileRef = D96D088283758BBDC60716E7A54335B7 /* LOTSizeInterpolator.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 1A9D251062D71F7D2EEF8DC916D56D32 /* UIColor+Expanded.m in Sources */ = {isa = PBXBuildFile; fileRef = 40C41F2E48B907C6D99813DF7A9C2A31 /* UIColor+Expanded.m */; }; - 1BE1967989F1CBF4B1FEAC5930A98942 /* LOTAnimationCache.m in Sources */ = {isa = PBXBuildFile; fileRef = C6794BE326B903E370B9B60F81621424 /* LOTAnimationCache.m */; }; - 1BF546B43291C580F1E52373F839CDC2 /* LOTLayerContainer.h in Headers */ = {isa = PBXBuildFile; fileRef = C35369D2190E7D0E03D5F0C9B66E3840 /* LOTLayerContainer.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 1DE1AFC96982EEB453EEB7600522593C /* LOTRadialGradientLayer.m in Sources */ = {isa = PBXBuildFile; fileRef = DE70957692229A5521E1209B34FD6341 /* LOTRadialGradientLayer.m */; }; - 1DEADDEE877E816C3F7F13A9199BD2B4 /* LOTAnimationView.m in Sources */ = {isa = PBXBuildFile; fileRef = 8D3EF8864151AD375897EEEE0049265B /* LOTAnimationView.m */; }; - 1F1DEA86F6F5DD31791BC1BB08599902 /* LOTKeyframe.h in Headers */ = {isa = PBXBuildFile; fileRef = 8A73292F17F72D91AD677901388AC371 /* LOTKeyframe.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 20519EF1676AE789152EC8E87B22877C /* Lottie.h in Headers */ = {isa = PBXBuildFile; fileRef = 7CF1D3E47D4044924E21C0FCAB9095D0 /* Lottie.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 216924F5335BA83DA0728E373BEA2E40 /* LOTRadialGradientLayer.h in Headers */ = {isa = PBXBuildFile; fileRef = 086A58805232A189CDBDA97740A7F97B /* LOTRadialGradientLayer.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 22D9C89FF7B853E3903EEC9A46790F68 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CA13E2F72B2A84E8D774F18DD936CA54 /* UIKit.framework */; }; - 28464475CBD4E279EC7C939A05244FA8 /* LOTRenderNode.m in Sources */ = {isa = PBXBuildFile; fileRef = 7236E29E9520E96B96DA447A0F73D04A /* LOTRenderNode.m */; }; - 288A3F3C86FF65F66418279C19A856A7 /* LOTFillRenderer.h in Headers */ = {isa = PBXBuildFile; fileRef = 0AAE803FD23C4072276F802275CC75A2 /* LOTFillRenderer.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 29E071D0746E2E313294D7E11331B3C7 /* LOTAssetGroup.h in Headers */ = {isa = PBXBuildFile; fileRef = B54D672768B8B9D47FEC96B75323ABAB /* LOTAssetGroup.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 2C78D7F87D67367F046B493A0B52F8D0 /* LOTAnimatedSwitch.h in Headers */ = {isa = PBXBuildFile; fileRef = A503EF472B37FAEC8C7B7A02EB48EAD0 /* LOTAnimatedSwitch.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 2CEF6276DDC731E6E120EEADEBFF5BC3 /* LOTPointInterpolator.m in Sources */ = {isa = PBXBuildFile; fileRef = E04BB719CBA0390A9D86A94BDEA57CC1 /* LOTPointInterpolator.m */; }; - 2EDE30108B669C16B96A2949F58BC09A /* LOTAnimationCache.m in Sources */ = {isa = PBXBuildFile; fileRef = C6794BE326B903E370B9B60F81621424 /* LOTAnimationCache.m */; }; - 31692C57AEC902D759ACC5DDEF9D7DED /* LOTNumberInterpolator.m in Sources */ = {isa = PBXBuildFile; fileRef = EEE3A349FAA8F7B5DE1167968D29A4DE /* LOTNumberInterpolator.m */; }; - 340A9D013F5EC78D683F6B0ED56D5532 /* LOTShapeStar.m in Sources */ = {isa = PBXBuildFile; fileRef = E75A43CAEC39661AAF5A0D8FE4EE6DCC /* LOTShapeStar.m */; }; - 36233CD0C2416D63617E247F53D3F065 /* LOTShapeRectangle.h in Headers */ = {isa = PBXBuildFile; fileRef = 3CA45971085CDBB78AAE42054A76E077 /* LOTShapeRectangle.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 3679C0D06A26B6DAC656388E01B399DA /* LOTRenderNode.h in Headers */ = {isa = PBXBuildFile; fileRef = 9B6923575F8A5D34B244D82AEE41C3F6 /* LOTRenderNode.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 370DDD919DC09EE5594D1CDDE74EC1B4 /* LOTComposition.m in Sources */ = {isa = PBXBuildFile; fileRef = E755B311E223826B3558EEB629C0287D /* LOTComposition.m */; }; - 3838FECA6E248EAE12D6294EFEEEC236 /* LOTShapeGradientFill.h in Headers */ = {isa = PBXBuildFile; fileRef = AF175CC26A097490ED6F811DB044BFD9 /* LOTShapeGradientFill.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 39D329BCFA65D5EB5E378735DF321FFF /* LOTPathInterpolator.h in Headers */ = {isa = PBXBuildFile; fileRef = 82941F8BBD825D99E98F170139381C57 /* LOTPathInterpolator.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 3AD32255965332DAC58DF1CFD81DE078 /* LOTShapeStroke.m in Sources */ = {isa = PBXBuildFile; fileRef = 5E38775E835996063AD3975DB0D0685F /* LOTShapeStroke.m */; }; - 3AF620CCDF8D49FD4107E98DDAF67D4B /* LOTPolygonAnimator.h in Headers */ = {isa = PBXBuildFile; fileRef = DB7F41DB9747216ADF000810800EEB15 /* LOTPolygonAnimator.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 3C8AF7D35EAE318A864E02EC4CF720F3 /* LOTShapeGroup.m in Sources */ = {isa = PBXBuildFile; fileRef = 42CB682861D71E87DD35419F2BCF9D31 /* LOTShapeGroup.m */; }; - 3DE0AB32CE32304D9C60D9D0B3DB92C7 /* NSValue+Compat.h in Headers */ = {isa = PBXBuildFile; fileRef = F20E4E1B4E2532FB0310955D634DA69E /* NSValue+Compat.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 3EC25FB0AE9BB89BA3C53A9AF516877D /* LOTAnimationView.h in Headers */ = {isa = PBXBuildFile; fileRef = B087CA2D09A4887C49F464890E7A177E /* LOTAnimationView.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 3ED234EAAA8C9BDC01834AC43932E235 /* NSValue+Compat.m in Sources */ = {isa = PBXBuildFile; fileRef = 5619C860054C32A3C1A3F063CCAA986A /* NSValue+Compat.m */; }; - 4104D2E5DC9985A96076E91FA23EE160 /* LOTPointInterpolator.h in Headers */ = {isa = PBXBuildFile; fileRef = F57D6A49BAAF8072A4DC91D40E0D1EAF /* LOTPointInterpolator.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 42D51345DDBE7850866F30EA222512DE /* UIColor+Expanded.h in Headers */ = {isa = PBXBuildFile; fileRef = 659E43C54C18D4FD539A4E332F7790F5 /* UIColor+Expanded.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 42F09F9430AA878A11E2B0A1B0477782 /* LOTShapeFill.h in Headers */ = {isa = PBXBuildFile; fileRef = 8B7CB99752B9512D6263AF2DF763BAF2 /* LOTShapeFill.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 43D48F3BB8489E7A75E5350717B13740 /* LOTLayer.m in Sources */ = {isa = PBXBuildFile; fileRef = 2984C6FFF4ACA3196271E2F1976ADA69 /* LOTLayer.m */; }; - 443B5953F6F057649E1A6EDA4161BF79 /* LOTGradientFillRender.m in Sources */ = {isa = PBXBuildFile; fileRef = C4099F44D1ECCF4DB09FC399C80EB167 /* LOTGradientFillRender.m */; }; - 45251126639B00012E9D005BC5B3F3A1 /* LOTAssetGroup.m in Sources */ = {isa = PBXBuildFile; fileRef = 3F74EB15D58D3270AEB2060CFE7570CC /* LOTAssetGroup.m */; }; - 46C517F2808125A9BFD0BED3E6212932 /* LOTAssetGroup.h in Headers */ = {isa = PBXBuildFile; fileRef = B54D672768B8B9D47FEC96B75323ABAB /* LOTAssetGroup.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 489F2282D377E1D8CFD97D0725B8D7E3 /* LOTShapeGradientFill.m in Sources */ = {isa = PBXBuildFile; fileRef = 272D6A3046E0CACC4BF991956B10036C /* LOTShapeGradientFill.m */; }; - 4961F1A12FC2CD4B00A02CBF7447F5AD /* LOTFillRenderer.m in Sources */ = {isa = PBXBuildFile; fileRef = 46614A552F667CC55E45A19F9B0978D1 /* LOTFillRenderer.m */; }; - 49657576E8DE83877C20F78BB8BB7DA7 /* LOTPolystarAnimator.m in Sources */ = {isa = PBXBuildFile; fileRef = 3242711C4E767B6FF3AEC1BAA95BA71F /* LOTPolystarAnimator.m */; }; - 49CE298811DA943A0A712B164206D2CE /* LOTTransformInterpolator.m in Sources */ = {isa = PBXBuildFile; fileRef = E977A18230CBF470460C58037A437B84 /* LOTTransformInterpolator.m */; }; - 4AE9E825285273B5940996E875602EBC /* CALayer+Compat.h in Headers */ = {isa = PBXBuildFile; fileRef = 227843D236B655642C7E3C469ED005F1 /* CALayer+Compat.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 4C7675328043BA3F923BD74A2368296C /* LOTShapeRepeater.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F3B72A8E2380FF41995F178E51B5B94 /* LOTShapeRepeater.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 4CF69F568D6D5E3BF63CF2ED982194B6 /* CALayer+Compat.m in Sources */ = {isa = PBXBuildFile; fileRef = EC357B89D82B770D72FCBA6E21488805 /* CALayer+Compat.m */; }; - 4D813C6B2C6D0CB9332A2EB4D10B46A4 /* LOTCacheProvider.m in Sources */ = {isa = PBXBuildFile; fileRef = 6E7AAD90809A5BE65838A5AF376F98AA /* LOTCacheProvider.m */; }; - 4DF0409283D2210FE43E9F20DD3EAFE6 /* LOTRadialGradientLayer.m in Sources */ = {isa = PBXBuildFile; fileRef = DE70957692229A5521E1209B34FD6341 /* LOTRadialGradientLayer.m */; }; - 4ED420CFB267149D4AD7A1F3117746D9 /* LOTCacheProvider.h in Headers */ = {isa = PBXBuildFile; fileRef = E54B3DC1B45E6FFED2DE45ED43DBA4C5 /* LOTCacheProvider.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 4F08B370A2FB80CABB7F65EAC100C2D4 /* LOTShapeStroke.h in Headers */ = {isa = PBXBuildFile; fileRef = FAE123FFEA3FFA98D5492A4C7FBB5F2B /* LOTShapeStroke.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 4FC4954471EE3D5AD44F4712935D7A27 /* LOTShapeRectangle.m in Sources */ = {isa = PBXBuildFile; fileRef = 4AEFD97349588D80E639AE803E87AB1E /* LOTShapeRectangle.m */; }; - 513273116B98486E2215B0FDFDDA7232 /* LOTAnimationCache.h in Headers */ = {isa = PBXBuildFile; fileRef = 6398418947AEE1FF891887426F2CB24F /* LOTAnimationCache.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 53339B491D546570BAD86C545DF0A549 /* lottie-ios-iOS-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 54C415EA7F1183D8CBF4DD450C8E917A /* lottie-ios-iOS-dummy.m */; }; - 53594627CE015253466AAFBA397EF35A /* CGGeometry+LOTAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = ED2CD43EDD5AB0839147E1B17C971EEA /* CGGeometry+LOTAdditions.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 54490E3D47D31DB8376AD527E54229EB /* LOTMaskContainer.h in Headers */ = {isa = PBXBuildFile; fileRef = C437F32E715B1F2CAF96458B882481DF /* LOTMaskContainer.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 56621F549766F443CA6D42052F64F056 /* LOTSizeInterpolator.m in Sources */ = {isa = PBXBuildFile; fileRef = A48CC90FA6A3CD3F89DB0144907532E2 /* LOTSizeInterpolator.m */; }; - 5896996BCBDFBA74B408DB5AD3F571E4 /* LOTLayerGroup.m in Sources */ = {isa = PBXBuildFile; fileRef = 2147F7AB75635C2E30C7748741753CEA /* LOTLayerGroup.m */; }; - 5BAC75E9E79DE097EDC1D92A7D46B1DA /* LOTKeyframe.m in Sources */ = {isa = PBXBuildFile; fileRef = 5241AB8D3B3AF2F3825A93F0B32D9C5D /* LOTKeyframe.m */; }; - 5C97F2B33A75479BF2431CA8EC0BF543 /* LOTShapeRectangle.m in Sources */ = {isa = PBXBuildFile; fileRef = 4AEFD97349588D80E639AE803E87AB1E /* LOTShapeRectangle.m */; }; - 5DDA09BAE2AB6CC139B4BBB1F055D1C7 /* LOTMask.m in Sources */ = {isa = PBXBuildFile; fileRef = 60363DC5D5E8F3C2C28A8715DA390170 /* LOTMask.m */; }; - 5F0AF8379F419BBBA67545B8E349B5C2 /* LOTValueInterpolator.h in Headers */ = {isa = PBXBuildFile; fileRef = 96C32584B6FCC9133BDAC268ADA1C133 /* LOTValueInterpolator.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 602ECC5DDE59E798B2FFC1207AC00015 /* LOTLayer.h in Headers */ = {isa = PBXBuildFile; fileRef = FA83154549FBF8250618D1CC7ED5B418 /* LOTLayer.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 60627A06FAE6D353FC466F70BFE1712F /* CGGeometry+LOTAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = ED2CD43EDD5AB0839147E1B17C971EEA /* CGGeometry+LOTAdditions.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 607BB99553882ABD5F914BD374C57502 /* LOTShapeGradientFill.m in Sources */ = {isa = PBXBuildFile; fileRef = 272D6A3046E0CACC4BF991956B10036C /* LOTShapeGradientFill.m */; }; - 60D710EE0DE4F38CF088979CF35747F0 /* LOTMaskContainer.m in Sources */ = {isa = PBXBuildFile; fileRef = 6ABA14F23A54CFF8B2258DE667642BFD /* LOTMaskContainer.m */; }; - 61F671315535EE6D02570019383BCD94 /* LOTPolygonAnimator.m in Sources */ = {isa = PBXBuildFile; fileRef = 38EADF596ED162A0EE3D35E987685FD7 /* LOTPolygonAnimator.m */; }; - 62870B3A6FAF858C78F9EB434176AE30 /* CALayer+Compat.m in Sources */ = {isa = PBXBuildFile; fileRef = EC357B89D82B770D72FCBA6E21488805 /* CALayer+Compat.m */; }; - 63BCF9DA38A1BE48070968771932986A /* LOTLayer.h in Headers */ = {isa = PBXBuildFile; fileRef = FA83154549FBF8250618D1CC7ED5B418 /* LOTLayer.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 63D8DDB2B3A09388FCF92334B055DF23 /* LOTStrokeRenderer.h in Headers */ = {isa = PBXBuildFile; fileRef = 56A4BF06F98D77ADB3B462913C16217B /* LOTStrokeRenderer.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 64C0EC04F4CB37F4FD01C1A5258BA47E /* LOTNumberInterpolator.h in Headers */ = {isa = PBXBuildFile; fileRef = 194F1B32D0624C138E12323981E4B3B3 /* LOTNumberInterpolator.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 6505EC7B7323A8E08A20DBE33ED2BF14 /* LOTRoundedRectAnimator.m in Sources */ = {isa = PBXBuildFile; fileRef = B4A18DDFFFD13D69C09000FFD121ECDE /* LOTRoundedRectAnimator.m */; }; - 663DB103A15D98565CA4B58DB71011E3 /* LOTComposition.h in Headers */ = {isa = PBXBuildFile; fileRef = DCA786C9E19C1EC03BC9679E27A6F20F /* LOTComposition.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 6643A93A7EF064E08642ED4CA3828AEC /* NSValue+Compat.m in Sources */ = {isa = PBXBuildFile; fileRef = 5619C860054C32A3C1A3F063CCAA986A /* NSValue+Compat.m */; }; - 66CCE1FE84B1834A596C56BD93D7B76D /* LOTPointInterpolator.m in Sources */ = {isa = PBXBuildFile; fileRef = E04BB719CBA0390A9D86A94BDEA57CC1 /* LOTPointInterpolator.m */; }; - 66D99639ABB799193854726D740E8274 /* LOTRenderNode.h in Headers */ = {isa = PBXBuildFile; fileRef = 9B6923575F8A5D34B244D82AEE41C3F6 /* LOTRenderNode.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 675FEB51CD39377FA3AE0EA835B84C32 /* LOTRepeaterRenderer.m in Sources */ = {isa = PBXBuildFile; fileRef = 0468A1630D67266809023D1E0248D7B5 /* LOTRepeaterRenderer.m */; }; - 6780218BB2E9504FC7837E51154BB485 /* LOTAnimatorNode.h in Headers */ = {isa = PBXBuildFile; fileRef = 55E650C85AEA6D05D50287F5D07A6EB0 /* LOTAnimatorNode.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 686A90ACB0868082EAA1385487435FAF /* UIColor+Expanded.m in Sources */ = {isa = PBXBuildFile; fileRef = 40C41F2E48B907C6D99813DF7A9C2A31 /* UIColor+Expanded.m */; }; + 182E21C4790123AC8E49E3FE744C360B /* LOTNumberInterpolator.h in Headers */ = {isa = PBXBuildFile; fileRef = 9C97B8831F5FDF75284CD9F433A2B8F7 /* LOTNumberInterpolator.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 196AB9366251FACE47E9822F4D686936 /* LOTPolygonAnimator.m in Sources */ = {isa = PBXBuildFile; fileRef = A3307462A6C8C5FED10A9F16E752B24A /* LOTPolygonAnimator.m */; }; + 1A8161188217B01A50FFE8E272B31C34 /* LOTAnimatorNode.m in Sources */ = {isa = PBXBuildFile; fileRef = 8A199E5D932514BB84B2CE010F3713CB /* LOTAnimatorNode.m */; }; + 1BA63D485F6F972EF62A943C46582774 /* LOTShapeTrimPath.m in Sources */ = {isa = PBXBuildFile; fileRef = 4E1F0FDF5268894547EB1C7FC507ED30 /* LOTShapeTrimPath.m */; }; + 1C683BEDD5B22A48B0CE467CEBFE3EED /* LOTTransformInterpolator.h in Headers */ = {isa = PBXBuildFile; fileRef = 61D63E2A019BF14C7A1B2CB86A19DA9F /* LOTTransformInterpolator.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 1C718B8EC0AA36B832C2970F3226862C /* LOTAnimatedControl.m in Sources */ = {isa = PBXBuildFile; fileRef = 5386A88237C7DCCDD62F5F1758E0A34A /* LOTAnimatedControl.m */; }; + 1CC0515547691F58AD0EA63968364500 /* LOTMask.h in Headers */ = {isa = PBXBuildFile; fileRef = 543BDC1D5AA10F0E690ECC1D58B6A608 /* LOTMask.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 1CEB1483E5DA09A7CA4E0B2312F8B995 /* LOTSizeInterpolator.m in Sources */ = {isa = PBXBuildFile; fileRef = 76E079C7802C56C5C7C985D44B5E4084 /* LOTSizeInterpolator.m */; }; + 20FF2F371F6E0BFB2D01F988401A9060 /* LOTMaskContainer.h in Headers */ = {isa = PBXBuildFile; fileRef = 5064887F8EAA1248C794BD8148E14A32 /* LOTMaskContainer.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 21D66F020950DC35A0CE7984B81C4C22 /* LOTShapeTransform.m in Sources */ = {isa = PBXBuildFile; fileRef = 245B48E160E5ACDDE4DBB76BCF845D2F /* LOTShapeTransform.m */; }; + 220D6C4779733CF3978EE481683A49A1 /* LOTShapeGradientFill.m in Sources */ = {isa = PBXBuildFile; fileRef = 7E335339E18CA751DB8D08D11A91DD44 /* LOTShapeGradientFill.m */; }; + 23E29AE9C3810A30418B57D8A70E465F /* LOTShapeGroup.h in Headers */ = {isa = PBXBuildFile; fileRef = 2BA2DAF580D8E1E762C64C730E86C4F4 /* LOTShapeGroup.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 2400EA89C1BB2531E11E1535DF955E26 /* LOTCircleAnimator.m in Sources */ = {isa = PBXBuildFile; fileRef = 9121F8C30F38B6B3F922266AEFF60FC0 /* LOTCircleAnimator.m */; }; + 24FA899C815EF3C7C34E9B6989797FF7 /* LOTLayerGroup.m in Sources */ = {isa = PBXBuildFile; fileRef = 2CCBDC43BD9347A9F269C13873D9712D /* LOTLayerGroup.m */; }; + 25390C1D6331A6EF3A2FF1284400DB98 /* LOTShapeTrimPath.h in Headers */ = {isa = PBXBuildFile; fileRef = 33BA62FECB64376459C90558FD042AE5 /* LOTShapeTrimPath.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 267900BE93A759FF194999978F88E330 /* LOTStrokeRenderer.m in Sources */ = {isa = PBXBuildFile; fileRef = A51AFC17F0E6E2A6C99E481475601F3B /* LOTStrokeRenderer.m */; }; + 26EB742B980A9E50852186BBF750EBCC /* LOTCacheProvider.m in Sources */ = {isa = PBXBuildFile; fileRef = 54757B02899CE4435B14EA17C1ED85B1 /* LOTCacheProvider.m */; }; + 27127F0AE2A22071A756730B3A7DF109 /* LOTRenderNode.h in Headers */ = {isa = PBXBuildFile; fileRef = 9FA966FC6903715F4F17D904CCCA54A4 /* LOTRenderNode.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 271BDB0436B2782E7A30F973B714845B /* LOTRenderGroup.h in Headers */ = {isa = PBXBuildFile; fileRef = A820A48AB0D547858DF28B0E9655F394 /* LOTRenderGroup.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 28897D2EEBD3B69C16C000A306ACB6B0 /* LOTShapeStroke.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F992FE6E0A432C6BE035D3396C8C9F9 /* LOTShapeStroke.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 2A32D17B1E3B0822EF8190261E19898F /* LOTShapeStar.h in Headers */ = {isa = PBXBuildFile; fileRef = 8A6EC5B13B17F7EC7B827CCC81DD6D59 /* LOTShapeStar.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 2A7AF2E94DFBCB9A39A5061B887721BF /* LOTModels.h in Headers */ = {isa = PBXBuildFile; fileRef = DA5257757C925993A2F45291CE0EBF80 /* LOTModels.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 2AB487DE40461D624AF3C0995C9C83A5 /* CoreVideo.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DFB9B48CA5FB64F65C9333F75A778DD2 /* CoreVideo.framework */; }; + 2B3BC59641A93634B8D39D67F92FCD11 /* LOTShapePath.m in Sources */ = {isa = PBXBuildFile; fileRef = 6A22F2A85EEBD74C4973C0DDF14DC6C7 /* LOTShapePath.m */; }; + 2BADB045DEBDD4FB8005617887205A8D /* LOTAnimationCache.m in Sources */ = {isa = PBXBuildFile; fileRef = 7D6D543892348908F509AAE5109E56AB /* LOTAnimationCache.m */; }; + 2C9C1FC5E2ACC77F51EAE950B3DD6FDA /* LOTCircleAnimator.m in Sources */ = {isa = PBXBuildFile; fileRef = 9121F8C30F38B6B3F922266AEFF60FC0 /* LOTCircleAnimator.m */; }; + 2D4B6625E638E6982B02B6DF445486C8 /* LOTMask.m in Sources */ = {isa = PBXBuildFile; fileRef = AAA938B623E2B97CB7E3033A55310ED0 /* LOTMask.m */; }; + 2D7D527C6F041D1B0437B1081014B9D1 /* LOTRoundedRectAnimator.h in Headers */ = {isa = PBXBuildFile; fileRef = 8185B383E94F862CB5CE59971F4C64C8 /* LOTRoundedRectAnimator.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 2D7D5FF76FFD20D9A90C59186074F965 /* LOTValueInterpolator.h in Headers */ = {isa = PBXBuildFile; fileRef = A202CACFB83935506D990DA56B7E021B /* LOTValueInterpolator.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 2DFB8A31A4455EAA675051E9EB42476E /* LOTShapeGradientFill.m in Sources */ = {isa = PBXBuildFile; fileRef = 7E335339E18CA751DB8D08D11A91DD44 /* LOTShapeGradientFill.m */; }; + 2E09199050E843A958F92BE3B6D7E442 /* LOTShapeStar.m in Sources */ = {isa = PBXBuildFile; fileRef = 3F5FB9238FEEA60721BE0990A18176CB /* LOTShapeStar.m */; }; + 308006C09948E893E0E2A82C8B91C138 /* LOTPathAnimator.h in Headers */ = {isa = PBXBuildFile; fileRef = 891DD5D2A60C077B85E9FCA84C18EE50 /* LOTPathAnimator.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 315EBDA22F11469CF5818EDC6D27C2B5 /* LOTValueCallback.h in Headers */ = {isa = PBXBuildFile; fileRef = 2A74ED85DE78AA3150EACE898881F461 /* LOTValueCallback.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 32F204181F28A5C447DB96EF74A7B710 /* LOTRepeaterRenderer.h in Headers */ = {isa = PBXBuildFile; fileRef = A9D29A71E99723F7CE4CEF8B9A8D4C23 /* LOTRepeaterRenderer.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 3333975900AE78BBDF3D2E5D40A0CF2E /* Lottie.h in Headers */ = {isa = PBXBuildFile; fileRef = 93CDC8E7E4755289FBCA32811B5A28E4 /* Lottie.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 3415A2ADC279644668330DE55AF314B9 /* LOTMaskContainer.m in Sources */ = {isa = PBXBuildFile; fileRef = B261320B19BCDE5BECAEC81C6251E8AD /* LOTMaskContainer.m */; }; + 35D1B584BBAB0EE9D83289B2E136F39C /* LOTAnimationView_Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = BF11495E4589E92A2AC50DF80791FA55 /* LOTAnimationView_Internal.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 363825BA318813C37FFADCCAFCC174AB /* LOTLayerContainer.h in Headers */ = {isa = PBXBuildFile; fileRef = 3E1AF07A2708493FCD2CD125784B7141 /* LOTLayerContainer.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 37F068158255C742855A8E87EDC2F2FA /* CGGeometry+LOTAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = 18EA856E98C145EB7C34191962E18191 /* CGGeometry+LOTAdditions.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 384BED9EB996AB1AC267FDE82FC472AF /* LOTAsset.h in Headers */ = {isa = PBXBuildFile; fileRef = 0E9F71BCB0F40FE922DF9F1570AA4867 /* LOTAsset.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 385AE04267BF8E38B6ABFA253118A4E4 /* LOTPolygonAnimator.h in Headers */ = {isa = PBXBuildFile; fileRef = B15D464E8BA5683658A7A69691796C20 /* LOTPolygonAnimator.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 38C5D9E68EFFEC114588FF9469EFD1D2 /* LOTAnimationView_Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = BF11495E4589E92A2AC50DF80791FA55 /* LOTAnimationView_Internal.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 3936C7C307D1E197FA2513204F22581E /* LOTShapeRectangle.h in Headers */ = {isa = PBXBuildFile; fileRef = 536713FE7AC1A4F2BC2E93D81DFEB882 /* LOTShapeRectangle.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 3939F8FBA9D78BA5D659169180EFA1E8 /* LOTFillRenderer.h in Headers */ = {isa = PBXBuildFile; fileRef = 68E1687B5AF4D546A1AFC23A152F70AD /* LOTFillRenderer.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 3A8A3C8FF234B6AC96D8B3FF519D25DE /* LOTLayer.h in Headers */ = {isa = PBXBuildFile; fileRef = 521EC30358351BCE62767560A7C68513 /* LOTLayer.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 3B70BDA4AA19D68322140F6DCFBE8CD0 /* LOTRenderNode.h in Headers */ = {isa = PBXBuildFile; fileRef = 9FA966FC6903715F4F17D904CCCA54A4 /* LOTRenderNode.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 3BE174EE0D33169751CE11EF1BB204F8 /* LOTRadialGradientLayer.h in Headers */ = {isa = PBXBuildFile; fileRef = D27D22931112993E55C05269E53E6735 /* LOTRadialGradientLayer.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 3E4CA99768A6C68888D7031AD4A4CF65 /* LOTSizeInterpolator.h in Headers */ = {isa = PBXBuildFile; fileRef = F2A2B345BCD59E1325C15AB515C91DC8 /* LOTSizeInterpolator.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 41963A7F8151229D0E6737185F6FC008 /* lottie-ios-OSX-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 7D00258E4C4D882665FA7673AF9DE81C /* lottie-ios-OSX-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 4442A7657200FD90C1EEC41358B5E26A /* LOTShapePath.m in Sources */ = {isa = PBXBuildFile; fileRef = 6A22F2A85EEBD74C4973C0DDF14DC6C7 /* LOTShapePath.m */; }; + 446E31D00DFD183A6DB89A51372A2C37 /* LOTRepeaterRenderer.m in Sources */ = {isa = PBXBuildFile; fileRef = 0009F85E49E1B884B4F661D142DB183E /* LOTRepeaterRenderer.m */; }; + 4476D0F053FEB25570B74CD43E59FBF6 /* LOTShapeTrimPath.h in Headers */ = {isa = PBXBuildFile; fileRef = 33BA62FECB64376459C90558FD042AE5 /* LOTShapeTrimPath.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 46BE37498E81E2CD02B0173933E46285 /* LOTShapeRectangle.m in Sources */ = {isa = PBXBuildFile; fileRef = 4A24096E10060F5B7E287A1E125EBB63 /* LOTShapeRectangle.m */; }; + 4775B3ADCEF6C547581132729EB1DB09 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8F9FC62FF143AB6667CDD8163FCFDE1C /* Cocoa.framework */; }; + 487243222FFF593CF190A5C27BCC30F0 /* LOTArrayInterpolator.h in Headers */ = {isa = PBXBuildFile; fileRef = 2CBA32868BFFDD5BAFE59B416B31D38F /* LOTArrayInterpolator.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 48CAAEB307FBB9316CCF6FFA538A38C3 /* LOTAnimationTransitionController.m in Sources */ = {isa = PBXBuildFile; fileRef = A9D79B6C91D3C1B0A2044C71F6454E61 /* LOTAnimationTransitionController.m */; }; + 48D0B79E284EEE56196483BF46948135 /* LOTPointInterpolator.h in Headers */ = {isa = PBXBuildFile; fileRef = A38530742CB69DD4770852828DD9A88A /* LOTPointInterpolator.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 49AEE3366D2E5A3796B5D7CF39CAEA05 /* LOTShapeGradientFill.h in Headers */ = {isa = PBXBuildFile; fileRef = 6B45C5DAF912B239B840F0CA41CC32A6 /* LOTShapeGradientFill.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 4A8C1E76FCF8905EDFE04A3291115DF3 /* LOTKeyframe.m in Sources */ = {isa = PBXBuildFile; fileRef = 34AF815C52B27A7782E3842FC8BC1CCB /* LOTKeyframe.m */; }; + 4BB4BDB2396879B5847830859B2B2142 /* LOTAnimatorNode.m in Sources */ = {isa = PBXBuildFile; fileRef = 8A199E5D932514BB84B2CE010F3713CB /* LOTAnimatorNode.m */; }; + 4C158D88E9833215066174DE83B0071F /* LOTBezierData.m in Sources */ = {isa = PBXBuildFile; fileRef = 4480558105469D51379A0EA86124F9A9 /* LOTBezierData.m */; }; + 4E5D28830B5B916567298F02CB3B649F /* LOTRoundedRectAnimator.m in Sources */ = {isa = PBXBuildFile; fileRef = 7C6D047937C224F003CA77C2073CDD10 /* LOTRoundedRectAnimator.m */; }; + 4FB18ECF0191E70DD4BA05CD9BBB2570 /* LOTAnimatorNode.h in Headers */ = {isa = PBXBuildFile; fileRef = 9EFECFAB1F0290E6A9BA90F5513273EA /* LOTAnimatorNode.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 51B1E851F3452DD93AED8ECA283DBF89 /* LOTAsset.h in Headers */ = {isa = PBXBuildFile; fileRef = 0E9F71BCB0F40FE922DF9F1570AA4867 /* LOTAsset.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 527E28C1AF75FB3C06E64EC6F1953AF7 /* LOTShapeCircle.m in Sources */ = {isa = PBXBuildFile; fileRef = E4C883E96A6E2DB3D0D97B13E4150C01 /* LOTShapeCircle.m */; }; + 54EC42D59F729EBD84A27FA29F5499F9 /* LOTRenderNode.m in Sources */ = {isa = PBXBuildFile; fileRef = E6353AC1F176558980AE9E1C2840BFFE /* LOTRenderNode.m */; }; + 579DD00D3361808B8D2014AD53798678 /* LOTKeypath.m in Sources */ = {isa = PBXBuildFile; fileRef = BA727AFCBF3E057F952AA493DA423361 /* LOTKeypath.m */; }; + 57A9A57F7610983616B56CAE60840D81 /* LOTShapeStar.m in Sources */ = {isa = PBXBuildFile; fileRef = 3F5FB9238FEEA60721BE0990A18176CB /* LOTShapeStar.m */; }; + 5A6DBBED4F0AE608DD85D1C415A9A7FA /* LOTShapeTrimPath.m in Sources */ = {isa = PBXBuildFile; fileRef = 4E1F0FDF5268894547EB1C7FC507ED30 /* LOTShapeTrimPath.m */; }; + 5B58D7E48BED80A3A8CC4E57C42B5E3A /* lottie-ios-iOS-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 0508D1F4EB475E8EA9FD7082C7562045 /* lottie-ios-iOS-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 5BC796D89E263113A896D6B4DD876CD4 /* LOTCompositionContainer.h in Headers */ = {isa = PBXBuildFile; fileRef = 7D873E9FCFE5C1F9619C1A10FEF4F195 /* LOTCompositionContainer.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 5BF895DA9BEFD25EEC84A1FDD793FDB5 /* LOTShapeRepeater.m in Sources */ = {isa = PBXBuildFile; fileRef = 6F84F1736D6E33DCF1A32E42F64C5C87 /* LOTShapeRepeater.m */; }; + 5C1C159FD9C8AF8EF4889B4514FC8944 /* LOTLayerContainer.h in Headers */ = {isa = PBXBuildFile; fileRef = 3E1AF07A2708493FCD2CD125784B7141 /* LOTLayerContainer.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 5CDCF9F2ADF9058934D8A4E78E9744DA /* LOTHelpers.h in Headers */ = {isa = PBXBuildFile; fileRef = F97ABD273FEDF707A881A3A4D86A8BAC /* LOTHelpers.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 5DF74FE8E7FD3ACE29ED0CBC7CF20888 /* LOTShapeGroup.m in Sources */ = {isa = PBXBuildFile; fileRef = 2D450E5F4ECEB3AE2A86EEB12A5B8521 /* LOTShapeGroup.m */; }; + 5E20F8AC5160F12C2BBC8E498DB98914 /* LOTAssetGroup.m in Sources */ = {isa = PBXBuildFile; fileRef = 450FD39F04E68EAD2100497895395162 /* LOTAssetGroup.m */; }; + 5FCE0D20EB54A7C76300F2AA1B391FF4 /* LOTNumberInterpolator.m in Sources */ = {isa = PBXBuildFile; fileRef = C85CC443D8EE7944453BEBA6CE2FD7F9 /* LOTNumberInterpolator.m */; }; + 607ADA2BFFC478CA09D4942035E5413F /* LOTShapeGroup.h in Headers */ = {isa = PBXBuildFile; fileRef = 2BA2DAF580D8E1E762C64C730E86C4F4 /* LOTShapeGroup.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 6277F9D8DFA4B9EDD54914DAD612A3FE /* LOTPathAnimator.h in Headers */ = {isa = PBXBuildFile; fileRef = 891DD5D2A60C077B85E9FCA84C18EE50 /* LOTPathAnimator.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 62F819EDE106C9AF5A48CD5E57C4B0BF /* LOTAsset.m in Sources */ = {isa = PBXBuildFile; fileRef = F5B5431F0457FB3A977D48753E1588F9 /* LOTAsset.m */; }; + 63CCEB6C46D5EC206E3BBA87CCA70455 /* LOTColorInterpolator.m in Sources */ = {isa = PBXBuildFile; fileRef = 593CCF481C36ACB023B63EF6EC81C50E /* LOTColorInterpolator.m */; }; + 6457446AAD69F1E7E27FCD388CD15810 /* LOTBezierData.h in Headers */ = {isa = PBXBuildFile; fileRef = A7BDA7CF04F19101FCBAB905B11E121C /* LOTBezierData.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 65EAAF30E370D6CB96B19F2967C355FB /* Lottie.h in Headers */ = {isa = PBXBuildFile; fileRef = 93CDC8E7E4755289FBCA32811B5A28E4 /* Lottie.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 66ED935FCD17B8D65B48DD0972536BB6 /* LOTKeypath.m in Sources */ = {isa = PBXBuildFile; fileRef = BA727AFCBF3E057F952AA493DA423361 /* LOTKeypath.m */; }; + 67AB86A84F67EF95802D057ABBCB5CF5 /* LOTGradientFillRender.h in Headers */ = {isa = PBXBuildFile; fileRef = 22EBB006E69A449C65530E592CD2A626 /* LOTGradientFillRender.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 6860ECB54FB94F8AAB1064AA48E7F0D2 /* LOTAnimationView.h in Headers */ = {isa = PBXBuildFile; fileRef = 8341FEA310739FC825ADA6DEDC31E740 /* LOTAnimationView.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 6924453FBB64F539204F67B491A3A623 /* LOTMaskContainer.m in Sources */ = {isa = PBXBuildFile; fileRef = B261320B19BCDE5BECAEC81C6251E8AD /* LOTMaskContainer.m */; }; + 693FACDB284FCE7E2D361336AE927087 /* LOTPlatformCompat.h in Headers */ = {isa = PBXBuildFile; fileRef = C50301FDF7BA8E27D2F58240E54D1286 /* LOTPlatformCompat.h */; settings = {ATTRIBUTES = (Project, ); }; }; 695E0CCAE6F585FBCDE5F397DA85EC93 /* Pods-lottie-ios_Tests-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 74883CF1E01724853AB546D683B3DEA1 /* Pods-lottie-ios_Tests-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 6A91ADA713788FD14709EFADCC873E8D /* LOTShapeFill.m in Sources */ = {isa = PBXBuildFile; fileRef = 8A490E1B7F6AE8F98A80AE1B2E5D034C /* LOTShapeFill.m */; }; - 6CB4430906D6612E111E9C23DFE82E48 /* LOTPathAnimator.h in Headers */ = {isa = PBXBuildFile; fileRef = 8B5218EC59B214FFDB753A1E532F1FD4 /* LOTPathAnimator.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 697E59AFC56A05D8078AFB496CD53D14 /* LOTValueCallback.m in Sources */ = {isa = PBXBuildFile; fileRef = FF48818E5315026FD6DC14944C835345 /* LOTValueCallback.m */; }; + 69D152F69D8AA8758CED146A373184F3 /* LOTAnimatedSwitch.m in Sources */ = {isa = PBXBuildFile; fileRef = FEB990F12F16E85B463D89CCCDEB25D0 /* LOTAnimatedSwitch.m */; }; + 6A1122517F7339A3AF466D3BE85F3E90 /* LOTShapeFill.m in Sources */ = {isa = PBXBuildFile; fileRef = F27E360BB2A6D9499651CCB95A3E833D /* LOTShapeFill.m */; }; + 6A370089882E12048A3475621E2D274B /* lottie-ios-OSX-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 60CC0BDE6346F89ADB5DB741F83E073E /* lottie-ios-OSX-dummy.m */; }; + 6A518EBF040706876BEF7E08108CCC8A /* LOTLayerGroup.h in Headers */ = {isa = PBXBuildFile; fileRef = A6EA7077BFF4E93DCC2D2DB02718FE11 /* LOTLayerGroup.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 6B0358F14500CBEC7C5F761B876F4AB5 /* LOTHelpers.h in Headers */ = {isa = PBXBuildFile; fileRef = F97ABD273FEDF707A881A3A4D86A8BAC /* LOTHelpers.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 6B6CEC576B2627DD623E91EA3DBD4B94 /* LOTArrayInterpolator.m in Sources */ = {isa = PBXBuildFile; fileRef = EF928FD6B208204FBD2A31FBD3FCA15B /* LOTArrayInterpolator.m */; }; + 6BA8EB4ABBA09675FE750C5E62934CC4 /* AppKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 63E8A32304416366E7C4FC7A2D6C3A08 /* AppKit.framework */; }; + 6D694D5CCF4D05AEE830F115443F8DF8 /* LOTAsset.m in Sources */ = {isa = PBXBuildFile; fileRef = F5B5431F0457FB3A977D48753E1588F9 /* LOTAsset.m */; }; + 6DBFC2390E96FD5E7E41022B71576FB2 /* LOTPointInterpolator.m in Sources */ = {isa = PBXBuildFile; fileRef = F04F28C155C4AA0B6C3866A9B7F945F9 /* LOTPointInterpolator.m */; }; 6E546A07530D4E0B229B36F2BC7AFC89 /* Pods-Lottie-Example-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 957779C8BD629DE80F8E678BC2E2E54A /* Pods-Lottie-Example-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 6E6C819278602168F1EF518CEFFA662D /* LOTCircleAnimator.m in Sources */ = {isa = PBXBuildFile; fileRef = 9DCDDA899EEFBA305F1468F251D2F617 /* LOTCircleAnimator.m */; }; - 6EC4BE69D5F1A9AE3FBD9944BB4D2A35 /* LOTGradientFillRender.m in Sources */ = {isa = PBXBuildFile; fileRef = C4099F44D1ECCF4DB09FC399C80EB167 /* LOTGradientFillRender.m */; }; - 70BBEF28602EC3CC686384685B8A2459 /* LOTAnimatorNode.m in Sources */ = {isa = PBXBuildFile; fileRef = 5E6DCE2446C4A632A3DEFF4E4D286993 /* LOTAnimatorNode.m */; }; - 7169D42FBB7F021F214F53DE107FD839 /* LOTTrimPathNode.h in Headers */ = {isa = PBXBuildFile; fileRef = 4693DA6769DE389ACDF653903848C95B /* LOTTrimPathNode.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 7209E9AD97B88AFBC6953021833A4C0A /* LOTFillRenderer.m in Sources */ = {isa = PBXBuildFile; fileRef = 46614A552F667CC55E45A19F9B0978D1 /* LOTFillRenderer.m */; }; - 72C55F5FC2798BA9C4BC25CC77AA8A47 /* LOTShapeStar.m in Sources */ = {isa = PBXBuildFile; fileRef = E75A43CAEC39661AAF5A0D8FE4EE6DCC /* LOTShapeStar.m */; }; - 75523FD0992AF7AF07F31457B24AA8B6 /* LOTStrokeRenderer.h in Headers */ = {isa = PBXBuildFile; fileRef = 56A4BF06F98D77ADB3B462913C16217B /* LOTStrokeRenderer.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 759C5A60DBBCC3584456215954FC70F7 /* UIColor.h in Headers */ = {isa = PBXBuildFile; fileRef = A13285A000D2951144B0BD24953D0E7E /* UIColor.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 760B302E95E75C575418939D2598E79B /* NSValue+Compat.h in Headers */ = {isa = PBXBuildFile; fileRef = F20E4E1B4E2532FB0310955D634DA69E /* NSValue+Compat.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 7612EC2B7F53F0B12EAAF3723B6D0AD0 /* LOTComposition.m in Sources */ = {isa = PBXBuildFile; fileRef = E755B311E223826B3558EEB629C0287D /* LOTComposition.m */; }; - 768CAD11689E8551916D48353B48D464 /* LOTFillRenderer.h in Headers */ = {isa = PBXBuildFile; fileRef = 0AAE803FD23C4072276F802275CC75A2 /* LOTFillRenderer.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 783828FF1E1546EE1104CE1C6BFC2BCB /* LOTModels.h in Headers */ = {isa = PBXBuildFile; fileRef = EF76A4F44D3EC0D867DD4DE52895BF18 /* LOTModels.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 7841900EC097E61F410BDA91AE910D59 /* LOTBezierPath.m in Sources */ = {isa = PBXBuildFile; fileRef = 5DA174E536B7A8FF5B4F181BCE1D2C56 /* LOTBezierPath.m */; }; - 79DBD83A12B2303D5BA2AA33E32D5AF9 /* LOTShapeFill.h in Headers */ = {isa = PBXBuildFile; fileRef = 8B7CB99752B9512D6263AF2DF763BAF2 /* LOTShapeFill.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 79E4A857473280F5F26343CE5A5BDF24 /* LOTBezierPath.h in Headers */ = {isa = PBXBuildFile; fileRef = D95D8467E79916FBC12B8B32D2278D9F /* LOTBezierPath.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 79F35A8D10BE733C0355FD3656C0F85C /* LOTArrayInterpolator.m in Sources */ = {isa = PBXBuildFile; fileRef = 876290A891B0E804E9010420CBFB2DF0 /* LOTArrayInterpolator.m */; }; - 7A2826DC237ED3AD81FD9AF9BCCF8D4D /* LOTTransformInterpolator.h in Headers */ = {isa = PBXBuildFile; fileRef = E9C5D93102924F61B1666731B13299C8 /* LOTTransformInterpolator.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 7A509A21B07AD04878007991161AE3A5 /* UIColor.m in Sources */ = {isa = PBXBuildFile; fileRef = 28990FC90E08798A110AFD134EAD0190 /* UIColor.m */; }; - 7CCB11B87705FFE84A4CC24B94E40C6B /* LOTShapeCircle.m in Sources */ = {isa = PBXBuildFile; fileRef = D8D4D2612BAB4E96A1EFC2C1A379B795 /* LOTShapeCircle.m */; }; - 7CD7BC6B5A5228313894C99C74C49B0A /* LOTAsset.m in Sources */ = {isa = PBXBuildFile; fileRef = D0D9BFD66BC6F81E4A9602BC4EE57D8A /* LOTAsset.m */; }; - 7D04734F561A78B0B63C5933FBA971AB /* LOTTransformInterpolator.h in Headers */ = {isa = PBXBuildFile; fileRef = E9C5D93102924F61B1666731B13299C8 /* LOTTransformInterpolator.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 7E5AE22174A1CFE5429B74AAAD6A27BE /* LOTLayer.m in Sources */ = {isa = PBXBuildFile; fileRef = 2984C6FFF4ACA3196271E2F1976ADA69 /* LOTLayer.m */; }; - 7F80A4DDB120F7AC6AAD2079037F5A28 /* AppKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 63E8A32304416366E7C4FC7A2D6C3A08 /* AppKit.framework */; }; - 7FA23FDECF0C2AF05F508F58039189DF /* LOTPointInterpolator.h in Headers */ = {isa = PBXBuildFile; fileRef = F57D6A49BAAF8072A4DC91D40E0D1EAF /* LOTPointInterpolator.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 7FCA350AC5512378D3ABB51F6F82D159 /* LOTPlatformCompat.h in Headers */ = {isa = PBXBuildFile; fileRef = A70EA4E2038B16F19EF5A99D144B3273 /* LOTPlatformCompat.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 82031F30EAE949CAEB86C26E16B1746F /* LOTAnimatorNode.m in Sources */ = {isa = PBXBuildFile; fileRef = 5E6DCE2446C4A632A3DEFF4E4D286993 /* LOTAnimatorNode.m */; }; - 83D3596F839B0DDFF44B858EE13E2D68 /* LOTRenderGroup.h in Headers */ = {isa = PBXBuildFile; fileRef = 428DD5AEB7E323676A510C146F1094C6 /* LOTRenderGroup.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 84208027617685F469AFADDC255A5EE3 /* LOTComposition.h in Headers */ = {isa = PBXBuildFile; fileRef = DCA786C9E19C1EC03BC9679E27A6F20F /* LOTComposition.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 844C91B4C01C3D2D3DED42D65D097777 /* LOTBezierData.m in Sources */ = {isa = PBXBuildFile; fileRef = A3076BBC1E5633342EB6DC328972318B /* LOTBezierData.m */; }; - 853B6289D633F828C5AF115C92D2001B /* LOTNumberInterpolator.h in Headers */ = {isa = PBXBuildFile; fileRef = 194F1B32D0624C138E12323981E4B3B3 /* LOTNumberInterpolator.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 856CAC612783A5302E8E5685929BA416 /* LOTSizeInterpolator.m in Sources */ = {isa = PBXBuildFile; fileRef = A48CC90FA6A3CD3F89DB0144907532E2 /* LOTSizeInterpolator.m */; }; + 6E9E4EA68319927D2F7EB514083A7A0B /* LOTNumberInterpolator.m in Sources */ = {isa = PBXBuildFile; fileRef = C85CC443D8EE7944453BEBA6CE2FD7F9 /* LOTNumberInterpolator.m */; }; + 6F2A127587786360244DF52C73D0E9F1 /* LOTTrimPathNode.m in Sources */ = {isa = PBXBuildFile; fileRef = 5638F0FF469208491F432907994C7502 /* LOTTrimPathNode.m */; }; + 6F374D492FEAFD2367F73372CA4B409D /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7B84DD8BA444B84A5807EA458734DA5D /* Foundation.framework */; }; + 6F7D2CB132F0AC9EDB00F514D7F14805 /* LOTAnimationView.m in Sources */ = {isa = PBXBuildFile; fileRef = 0A9BD8C23179DADD5C4FF9E7D187B043 /* LOTAnimationView.m */; }; + 71DA841B8E74CF5A37127BD3C86AF1BD /* LOTComposition.m in Sources */ = {isa = PBXBuildFile; fileRef = C32960F4E2AB2E8060FF8D1D99EC982C /* LOTComposition.m */; }; + 720D9854315269DD159C4458E508C3D5 /* LOTPathAnimator.m in Sources */ = {isa = PBXBuildFile; fileRef = 7D1442D30C3E3EB79709C2DEAE546228 /* LOTPathAnimator.m */; }; + 74944F106797A23AF0AC41B2E151AEEC /* LOTAnimatedControl.h in Headers */ = {isa = PBXBuildFile; fileRef = AE1A396186B488C8424B3EED6B847BF4 /* LOTAnimatedControl.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 75EA3AB76CD50AD9A8D91D199C63ADD1 /* LOTMask.m in Sources */ = {isa = PBXBuildFile; fileRef = AAA938B623E2B97CB7E3033A55310ED0 /* LOTMask.m */; }; + 77B2096C4DBC5371CDD26EE24D94C8E5 /* LOTPathAnimator.m in Sources */ = {isa = PBXBuildFile; fileRef = 7D1442D30C3E3EB79709C2DEAE546228 /* LOTPathAnimator.m */; }; + 792F8F04A09ED647BE4097BAA13A20F5 /* LOTValueInterpolator.h in Headers */ = {isa = PBXBuildFile; fileRef = A202CACFB83935506D990DA56B7E021B /* LOTValueInterpolator.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 79F93140683F6B3951D6D8253513052B /* LOTAnimationCache.h in Headers */ = {isa = PBXBuildFile; fileRef = 4E74F5FB415EC7EA39AC029FA525577B /* LOTAnimationCache.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 7A565587264907FA9DB634EC3865805F /* LOTMask.h in Headers */ = {isa = PBXBuildFile; fileRef = 543BDC1D5AA10F0E690ECC1D58B6A608 /* LOTMask.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 7B643D3D77F8351A545EE38C8592CF2A /* LOTFillRenderer.m in Sources */ = {isa = PBXBuildFile; fileRef = DD4FD4AD47A15DA21BE7004345E59FF1 /* LOTFillRenderer.m */; }; + 7C1DF6BF2A7AB34686ED8128F3FFC849 /* LOTRadialGradientLayer.h in Headers */ = {isa = PBXBuildFile; fileRef = D27D22931112993E55C05269E53E6735 /* LOTRadialGradientLayer.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 7D83D8A088BE0F31E3DCAF7526A23893 /* CALayer+Compat.h in Headers */ = {isa = PBXBuildFile; fileRef = F975602C737030EF0919EE751E8E24DB /* CALayer+Compat.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 7E59BD5F856B2693BE324A9671C3810A /* NSValue+Compat.m in Sources */ = {isa = PBXBuildFile; fileRef = B5A29569D371C0A9530FBAF5463FB1B2 /* NSValue+Compat.m */; }; + 801A86250D801A4D33F33850CFC6366C /* LOTShapeRectangle.h in Headers */ = {isa = PBXBuildFile; fileRef = 536713FE7AC1A4F2BC2E93D81DFEB882 /* LOTShapeRectangle.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 814C1F9E86C897A1B4EF05F97A885C96 /* LOTLayer.m in Sources */ = {isa = PBXBuildFile; fileRef = BF608B78F94F2F6159A526758E25EFCF /* LOTLayer.m */; }; + 8181F07EF79C7566681F6D7F0E9636F1 /* LOTAnimationView.m in Sources */ = {isa = PBXBuildFile; fileRef = 0A9BD8C23179DADD5C4FF9E7D187B043 /* LOTAnimationView.m */; }; + 81CC40FEE46E025FD84B9BF6168E5BD1 /* LOTKeyframe.h in Headers */ = {isa = PBXBuildFile; fileRef = 10B78B281BE30EE85830187B033E4782 /* LOTKeyframe.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 837247D8E2E25ECFD51F0416A4FDC91A /* LOTComposition.h in Headers */ = {isa = PBXBuildFile; fileRef = BA841F3D7281B18F353CFC76B67729DE /* LOTComposition.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 8525B3CCC74E3D9BF08663A77C5AA5C0 /* LOTShapeCircle.h in Headers */ = {isa = PBXBuildFile; fileRef = A1C00F0E74B77AE86CA7D7377D83B46A /* LOTShapeCircle.h */; settings = {ATTRIBUTES = (Project, ); }; }; 85F796CD33CB23088638090D7AA2DECA /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8F9FC62FF143AB6667CDD8163FCFDE1C /* Cocoa.framework */; }; - 876A467886FE386602A0CCA5366394F4 /* LOTAsset.h in Headers */ = {isa = PBXBuildFile; fileRef = A39BDC8A9726CAF24D70EE23BB5BD1FE /* LOTAsset.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 886BBBB6641F02227C03BA968C109266 /* CGGeometry+LOTAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = 51FC9391B6C5C85F1F7B1FDA2CC8FDFE /* CGGeometry+LOTAdditions.m */; }; - 89C5DB9F027A010909487B1883013647 /* LOTColorInterpolator.m in Sources */ = {isa = PBXBuildFile; fileRef = 9EA83D1C50D183A2FB07BBEB1B9D948F /* LOTColorInterpolator.m */; }; - 89E21ED032F6F9976A3B8F12F5521353 /* LOTAnimationView.h in Headers */ = {isa = PBXBuildFile; fileRef = B087CA2D09A4887C49F464890E7A177E /* LOTAnimationView.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 8AE917C6489CBB3002EC97FBE1A387B6 /* LOTShapeStar.h in Headers */ = {isa = PBXBuildFile; fileRef = 7C79E6BF7DA299701FC84C9F393E47F3 /* LOTShapeStar.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 8B7610A943F48F4E2205C958ABCDA436 /* LOTShapeCircle.h in Headers */ = {isa = PBXBuildFile; fileRef = 2CD964EAAA18892EF6258722B95F951B /* LOTShapeCircle.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 8D3D2D4402D2A7E6A86C5426D16B2BBD /* LOTTrimPathNode.m in Sources */ = {isa = PBXBuildFile; fileRef = AF55B5448A81359F1A814270B3666679 /* LOTTrimPathNode.m */; }; - 8D84482A5F91273876710F786FBFF89C /* LOTShapeStar.h in Headers */ = {isa = PBXBuildFile; fileRef = 7C79E6BF7DA299701FC84C9F393E47F3 /* LOTShapeStar.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 8E6C305A474C510FB922CF7DE59678D7 /* LOTShapePath.m in Sources */ = {isa = PBXBuildFile; fileRef = F4DDEC0BF4954778BB020C2A3C4A37A0 /* LOTShapePath.m */; }; - 8FF223849446967A0E0D296E1D9AE8F3 /* LOTHelpers.h in Headers */ = {isa = PBXBuildFile; fileRef = B6041F9522F368C2926E52A7CBBBFD48 /* LOTHelpers.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 9223968694A94B0C31015566F9163A8E /* LOTShapeTrimPath.m in Sources */ = {isa = PBXBuildFile; fileRef = C388AA1307273BB39C929D94248DE0AF /* LOTShapeTrimPath.m */; }; - 92391609A7D27513E0CB57BBC7921C2E /* LOTCircleAnimator.m in Sources */ = {isa = PBXBuildFile; fileRef = 9DCDDA899EEFBA305F1468F251D2F617 /* LOTCircleAnimator.m */; }; - 92C695B69B18B4DDF128C49D699FB56A /* LOTMaskContainer.h in Headers */ = {isa = PBXBuildFile; fileRef = C437F32E715B1F2CAF96458B882481DF /* LOTMaskContainer.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 941D25738ADDB44CB544E244BC39740D /* LOTShapePath.h in Headers */ = {isa = PBXBuildFile; fileRef = 405A59319C59F8B5A56AA4A3248319CB /* LOTShapePath.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 94C191471DD62DC9B9708CC3D91D2A52 /* LOTPolystarAnimator.m in Sources */ = {isa = PBXBuildFile; fileRef = 3242711C4E767B6FF3AEC1BAA95BA71F /* LOTPolystarAnimator.m */; }; - 94C9F10C05731F76C54779ED4FAC0CFC /* LOTShapeStroke.h in Headers */ = {isa = PBXBuildFile; fileRef = FAE123FFEA3FFA98D5492A4C7FBB5F2B /* LOTShapeStroke.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 94D93FD87E0A71761BC64B8D3DBA1C82 /* LOTRepeaterRenderer.h in Headers */ = {isa = PBXBuildFile; fileRef = 4A308318BDA8CEC76246D104E31729F5 /* LOTRepeaterRenderer.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 95FE420F8346466F8DE580883A6EF578 /* LOTAnimationCache.h in Headers */ = {isa = PBXBuildFile; fileRef = 6398418947AEE1FF891887426F2CB24F /* LOTAnimationCache.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 96220941F3AD3B8C36AE10CDD5985C3C /* LOTBezierData.h in Headers */ = {isa = PBXBuildFile; fileRef = D687D64D0C9A938635B9C9D9F30AE281 /* LOTBezierData.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 96A1AB7D5ABA11DB98AB0A270330B009 /* LOTHelpers.h in Headers */ = {isa = PBXBuildFile; fileRef = B6041F9522F368C2926E52A7CBBBFD48 /* LOTHelpers.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 96E45CDF220E0A132F7A1FC36B4FBF56 /* CALayer+Compat.h in Headers */ = {isa = PBXBuildFile; fileRef = 227843D236B655642C7E3C469ED005F1 /* CALayer+Compat.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 9779EF7B57AEA9589B1DA018AF96590C /* LOTCircleAnimator.h in Headers */ = {isa = PBXBuildFile; fileRef = 8042D1984741739FE2632E3381091EB2 /* LOTCircleAnimator.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 9B1827319A7793D8933B6981C1CB0870 /* LOTPathInterpolator.m in Sources */ = {isa = PBXBuildFile; fileRef = 0221FBCD051E76A64256E6E1279A59A0 /* LOTPathInterpolator.m */; }; - 9B83263F9E0F082EBFC39A0749C30F19 /* LOTKeyframe.m in Sources */ = {isa = PBXBuildFile; fileRef = 5241AB8D3B3AF2F3825A93F0B32D9C5D /* LOTKeyframe.m */; }; - 9C067191DDF83EB5606006CC79475701 /* UIColor.m in Sources */ = {isa = PBXBuildFile; fileRef = 28990FC90E08798A110AFD134EAD0190 /* UIColor.m */; }; - 9C72393C22D538DEE58282B8271F3AF5 /* LOTShapeRepeater.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F3B72A8E2380FF41995F178E51B5B94 /* LOTShapeRepeater.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 9CE86081FC0EB0840BB6529EB4297EA1 /* CGGeometry+LOTAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = 51FC9391B6C5C85F1F7B1FDA2CC8FDFE /* CGGeometry+LOTAdditions.m */; }; + 8741ED8D30661234B96C0E7678BFCF0E /* LOTStrokeRenderer.h in Headers */ = {isa = PBXBuildFile; fileRef = 30E9D1262F3F3D80327A08CD6345E51E /* LOTStrokeRenderer.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 87520039B5D9F37A33E46D25EBBB2D20 /* LOTLayerGroup.h in Headers */ = {isa = PBXBuildFile; fileRef = A6EA7077BFF4E93DCC2D2DB02718FE11 /* LOTLayerGroup.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 884CC732725C3CCBCB67786E81943787 /* LOTAnimatorNode.h in Headers */ = {isa = PBXBuildFile; fileRef = 9EFECFAB1F0290E6A9BA90F5513273EA /* LOTAnimatorNode.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 887509BFC57AE5CEAED48BFD69C2CB87 /* LOTRepeaterRenderer.m in Sources */ = {isa = PBXBuildFile; fileRef = 0009F85E49E1B884B4F661D142DB183E /* LOTRepeaterRenderer.m */; }; + 88E26D84B40DDB9E7E5AD5990651C848 /* UIColor.h in Headers */ = {isa = PBXBuildFile; fileRef = 345A665333D59935D8DCCAFCE457762D /* UIColor.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 8931FE090842BCE2B9D1A844DBD06A51 /* LOTValueInterpolator.m in Sources */ = {isa = PBXBuildFile; fileRef = F77F168056C99E1AE6C4C6BBCFC7D9CA /* LOTValueInterpolator.m */; }; + 89C0F97887E53223A55AE86598996737 /* LOTShapeFill.m in Sources */ = {isa = PBXBuildFile; fileRef = F27E360BB2A6D9499651CCB95A3E833D /* LOTShapeFill.m */; }; + 8AB5AE18933F9F386B31DE5D80510F68 /* LOTShapePath.h in Headers */ = {isa = PBXBuildFile; fileRef = 9582A5D2F9520C1CC62EAF342EBB7BBA /* LOTShapePath.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 8B9694670F681223044F1511D3568224 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CA13E2F72B2A84E8D774F18DD936CA54 /* UIKit.framework */; }; + 8C9DB9C0DA78FCDFCF0C5F1BEA228723 /* LOTAssetGroup.h in Headers */ = {isa = PBXBuildFile; fileRef = 7CD3706DB5874050E418954E3029AD3D /* LOTAssetGroup.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 8D7874ADC7B9333BD6724B9AC23EAD8B /* LOTPointInterpolator.m in Sources */ = {isa = PBXBuildFile; fileRef = F04F28C155C4AA0B6C3866A9B7F945F9 /* LOTPointInterpolator.m */; }; + 8E455BA7BEBABBD800C01F4285DFBC98 /* UIColor+Expanded.h in Headers */ = {isa = PBXBuildFile; fileRef = A4DDD27C9DC70FEB86BA92158ED0DCAE /* UIColor+Expanded.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 900BB7D83CD706EAACD57EFEC6A68B10 /* LOTModels.h in Headers */ = {isa = PBXBuildFile; fileRef = DA5257757C925993A2F45291CE0EBF80 /* LOTModels.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 90C4AE981233049188B9194497367476 /* LOTKeyframe.m in Sources */ = {isa = PBXBuildFile; fileRef = 34AF815C52B27A7782E3842FC8BC1CCB /* LOTKeyframe.m */; }; + 9245547A0443A7165D81641A881A5390 /* LOTShapeGroup.m in Sources */ = {isa = PBXBuildFile; fileRef = 2D450E5F4ECEB3AE2A86EEB12A5B8521 /* LOTShapeGroup.m */; }; + 926033FCE27E93AD3B31D0C8CB48B4E9 /* LOTRoundedRectAnimator.h in Headers */ = {isa = PBXBuildFile; fileRef = 8185B383E94F862CB5CE59971F4C64C8 /* LOTRoundedRectAnimator.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 92FD4555E7B74A24166EC44410BAA9C3 /* NSValue+Compat.h in Headers */ = {isa = PBXBuildFile; fileRef = 1098D39EEB50537E5D1874166FA26426 /* NSValue+Compat.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 9429F1CB9003DFE5991561E68C486D97 /* LOTBezierData.m in Sources */ = {isa = PBXBuildFile; fileRef = 4480558105469D51379A0EA86124F9A9 /* LOTBezierData.m */; }; + 96EF3DEE748D06C6C6C82DBFD1B7C07D /* UIColor+Expanded.m in Sources */ = {isa = PBXBuildFile; fileRef = C3A33578A6371962FBB57B72B7439B73 /* UIColor+Expanded.m */; }; + 982C1B105ACA34AF920844297EA43F19 /* LOTCacheProvider.h in Headers */ = {isa = PBXBuildFile; fileRef = 9E5993DF4D520DB1CE9D9DC7A081100D /* LOTCacheProvider.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 9A95820B7EBD228EF61B2E785D59096C /* LOTTransformInterpolator.m in Sources */ = {isa = PBXBuildFile; fileRef = B9FC8FCBF300DFCD6B130C2D70DFB5B8 /* LOTTransformInterpolator.m */; }; + 9AA2191EF47BC5D7A36067E58944B5E0 /* LOTPointInterpolator.h in Headers */ = {isa = PBXBuildFile; fileRef = A38530742CB69DD4770852828DD9A88A /* LOTPointInterpolator.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 9B6782B402BC8BD3CE8BE6A3EF1EA32C /* LOTShapeTransform.h in Headers */ = {isa = PBXBuildFile; fileRef = EDD0730A9EFC6BF546605EC950466378 /* LOTShapeTransform.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 9C19CFBC85D557925C42FA89E2467E84 /* LOTBezierPath.m in Sources */ = {isa = PBXBuildFile; fileRef = F17767C205B354B5CAB2481BAB5F9DA0 /* LOTBezierPath.m */; }; + 9C85451C685D3BE137F43D593A196085 /* LOTComposition.h in Headers */ = {isa = PBXBuildFile; fileRef = BA841F3D7281B18F353CFC76B67729DE /* LOTComposition.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 9DAF28C5EBB64484FB5FF0ABC18778BE /* LOTBezierData.h in Headers */ = {isa = PBXBuildFile; fileRef = A7BDA7CF04F19101FCBAB905B11E121C /* LOTBezierData.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 9E31DC5F6402D3F9A77EE46539335C35 /* LOTRenderNode.m in Sources */ = {isa = PBXBuildFile; fileRef = E6353AC1F176558980AE9E1C2840BFFE /* LOTRenderNode.m */; }; 9E52F4F7D4588D34FC4EAAF7B00E2724 /* Pods-lottie-ios_Tests-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 392AE6678DE5B261D36B7164386E03C8 /* Pods-lottie-ios_Tests-dummy.m */; }; - 9EFFD89E82B2F5882CA5C63CEC2D3673 /* LOTMaskContainer.m in Sources */ = {isa = PBXBuildFile; fileRef = 6ABA14F23A54CFF8B2258DE667642BFD /* LOTMaskContainer.m */; }; - 9F84B7240D74991EF3EFEE6D57FFA8C9 /* LOTCompositionContainer.m in Sources */ = {isa = PBXBuildFile; fileRef = 4BCF27BA792F612421FF59C04FA59850 /* LOTCompositionContainer.m */; }; - A053EF8D74FC9348579B5AADFD9D38E6 /* CoreVideo.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DFB9B48CA5FB64F65C9333F75A778DD2 /* CoreVideo.framework */; }; - A072967E29B764BE7087572312A6C808 /* Lottie.h in Headers */ = {isa = PBXBuildFile; fileRef = 7CF1D3E47D4044924E21C0FCAB9095D0 /* Lottie.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 9F4C35E06D050DC13F70F902842DDB62 /* LOTRadialGradientLayer.m in Sources */ = {isa = PBXBuildFile; fileRef = 26D4E05F5322BF3B72C8611356635EF3 /* LOTRadialGradientLayer.m */; }; + 9F8E70C59494804C7B1EFF0E19D2FC38 /* CGGeometry+LOTAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = D0A5736FB11B4EBBBA591FAD3A65333D /* CGGeometry+LOTAdditions.m */; }; + A020AAFC356971BA31B30D48A52EA0EA /* LOTColorInterpolator.h in Headers */ = {isa = PBXBuildFile; fileRef = 5CD1545364AD1612AAE8C24E0B02B768 /* LOTColorInterpolator.h */; settings = {ATTRIBUTES = (Project, ); }; }; + A0BCD29823B2E49E2EAD4297EB1A8FFA /* LOTMaskContainer.h in Headers */ = {isa = PBXBuildFile; fileRef = 5064887F8EAA1248C794BD8148E14A32 /* LOTMaskContainer.h */; settings = {ATTRIBUTES = (Project, ); }; }; + A16055DA48300C542E82E5B7CF1138AF /* LOTShapeTransform.m in Sources */ = {isa = PBXBuildFile; fileRef = 245B48E160E5ACDDE4DBB76BCF845D2F /* LOTShapeTransform.m */; }; + A16F224D941D78055C0B826C049151DE /* LOTShapeRepeater.h in Headers */ = {isa = PBXBuildFile; fileRef = 5B11F488A6E654EFE96E3C095DD95134 /* LOTShapeRepeater.h */; settings = {ATTRIBUTES = (Project, ); }; }; + A19C05B7E137515CDD4CB813447F3A25 /* LOTStrokeRenderer.h in Headers */ = {isa = PBXBuildFile; fileRef = 30E9D1262F3F3D80327A08CD6345E51E /* LOTStrokeRenderer.h */; settings = {ATTRIBUTES = (Project, ); }; }; + A3B672079706E5CB7D7F4825EE6C076A /* LOTArrayInterpolator.m in Sources */ = {isa = PBXBuildFile; fileRef = EF928FD6B208204FBD2A31FBD3FCA15B /* LOTArrayInterpolator.m */; }; A3F1908F279F394BDF70BFC74585F2C8 /* Pods-Lottie Viewer-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = E6CC126717DE752766A8C58E618A6BA1 /* Pods-Lottie Viewer-dummy.m */; }; - A44BE408F66FC90811F2D78CFEA3E79B /* LOTRoundedRectAnimator.m in Sources */ = {isa = PBXBuildFile; fileRef = B4A18DDFFFD13D69C09000FFD121ECDE /* LOTRoundedRectAnimator.m */; }; - A4A2A6A3C1A75F74EA7CF6B35AC3AF23 /* LOTShapeTransform.h in Headers */ = {isa = PBXBuildFile; fileRef = E6C87A40CDE5E282FACD344EEF9BCBE8 /* LOTShapeTransform.h */; settings = {ATTRIBUTES = (Project, ); }; }; - A4D2BBF485F6FB659CD62F63B4A0A66F /* LOTPathAnimator.m in Sources */ = {isa = PBXBuildFile; fileRef = 5A5058F11E3F1D9871124199C1B3D9E4 /* LOTPathAnimator.m */; }; - A6D3FBC7036C7AE7E819A1186E356EAF /* LOTAnimationView_Compat.h in Headers */ = {isa = PBXBuildFile; fileRef = 46D9F748EFA7C7149612B4AC164C2CAA /* LOTAnimationView_Compat.h */; settings = {ATTRIBUTES = (Public, ); }; }; - A7D6518E8D1314A31C2068956426F05B /* LOTMask.m in Sources */ = {isa = PBXBuildFile; fileRef = 60363DC5D5E8F3C2C28A8715DA390170 /* LOTMask.m */; }; - A94B87370940B3B63B096538C2E458AF /* LOTPathAnimator.h in Headers */ = {isa = PBXBuildFile; fileRef = 8B5218EC59B214FFDB753A1E532F1FD4 /* LOTPathAnimator.h */; settings = {ATTRIBUTES = (Project, ); }; }; - AC342BBD83EFC640054FCE7A41092A58 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8F9FC62FF143AB6667CDD8163FCFDE1C /* Cocoa.framework */; }; - AC4FF6975E16E6D4AC2E2F207A8533E9 /* LOTBezierData.h in Headers */ = {isa = PBXBuildFile; fileRef = D687D64D0C9A938635B9C9D9F30AE281 /* LOTBezierData.h */; settings = {ATTRIBUTES = (Project, ); }; }; - AC6AB070726F2F6FD477E2F4E4F1EAD7 /* UIColor+Expanded.h in Headers */ = {isa = PBXBuildFile; fileRef = 659E43C54C18D4FD539A4E332F7790F5 /* UIColor+Expanded.h */; settings = {ATTRIBUTES = (Project, ); }; }; - AD3DC697C0A4A56D1A3D99BB9499A84E /* LOTStrokeRenderer.m in Sources */ = {isa = PBXBuildFile; fileRef = 6DBF60E20E0F3964D13D808F657EC3D0 /* LOTStrokeRenderer.m */; }; - ADE286185EAECAA6785078A38F0BAC3E /* UIColor.h in Headers */ = {isa = PBXBuildFile; fileRef = A13285A000D2951144B0BD24953D0E7E /* UIColor.h */; settings = {ATTRIBUTES = (Project, ); }; }; - ADE433504AAD68322956F1A2DC14705C /* LOTPlatformCompat.h in Headers */ = {isa = PBXBuildFile; fileRef = A70EA4E2038B16F19EF5A99D144B3273 /* LOTPlatformCompat.h */; settings = {ATTRIBUTES = (Project, ); }; }; - AE71899163E79F1D0FC97FB7ACDD65CC /* LOTArrayInterpolator.m in Sources */ = {isa = PBXBuildFile; fileRef = 876290A891B0E804E9010420CBFB2DF0 /* LOTArrayInterpolator.m */; }; - AE7C31AF5DC22B80C0933E254509C452 /* LOTRenderGroup.m in Sources */ = {isa = PBXBuildFile; fileRef = A83C74E1BE1843229C1EAC13B0DA0245 /* LOTRenderGroup.m */; }; - AEFE56A62E0F7E116A2C432C97BDE0C4 /* LOTShapeGradientFill.h in Headers */ = {isa = PBXBuildFile; fileRef = AF175CC26A097490ED6F811DB044BFD9 /* LOTShapeGradientFill.h */; settings = {ATTRIBUTES = (Project, ); }; }; - AF19FFEFC9E0F066DCDD6842CED77EE3 /* LOTRepeaterRenderer.h in Headers */ = {isa = PBXBuildFile; fileRef = 4A308318BDA8CEC76246D104E31729F5 /* LOTRepeaterRenderer.h */; settings = {ATTRIBUTES = (Project, ); }; }; - AFE084E2925B8897B2565319EB9D6337 /* lottie-ios-OSX-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 7D00258E4C4D882665FA7673AF9DE81C /* lottie-ios-OSX-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - B047D5A4E0C92C165A15F24464356261 /* LOTGradientFillRender.h in Headers */ = {isa = PBXBuildFile; fileRef = 135B555C252D40EFA4CF36C8B6B91EBE /* LOTGradientFillRender.h */; settings = {ATTRIBUTES = (Project, ); }; }; - B1CB788FCE83A0631BC0C8F4961ADC69 /* LOTShapeTrimPath.m in Sources */ = {isa = PBXBuildFile; fileRef = C388AA1307273BB39C929D94248DE0AF /* LOTShapeTrimPath.m */; }; - B2A86FFFD9D52E81D028DC9867D0F7A0 /* LOTLayerContainer.h in Headers */ = {isa = PBXBuildFile; fileRef = C35369D2190E7D0E03D5F0C9B66E3840 /* LOTLayerContainer.h */; settings = {ATTRIBUTES = (Project, ); }; }; - B32EAC56F6E02F526EB6C99DE01C438D /* LOTTrimPathNode.m in Sources */ = {isa = PBXBuildFile; fileRef = AF55B5448A81359F1A814270B3666679 /* LOTTrimPathNode.m */; }; + A6501F9301B7A8280D9BD8A0D4E64942 /* LOTNumberInterpolator.h in Headers */ = {isa = PBXBuildFile; fileRef = 9C97B8831F5FDF75284CD9F433A2B8F7 /* LOTNumberInterpolator.h */; settings = {ATTRIBUTES = (Project, ); }; }; + A6C63ED90783A9C6586CA167B233D5A1 /* LOTShapeFill.h in Headers */ = {isa = PBXBuildFile; fileRef = DC5DC300A9713A2CF620ED314317C11F /* LOTShapeFill.h */; settings = {ATTRIBUTES = (Project, ); }; }; + A7E8695D891C9758EAC6742289CC7BAE /* LOTShapeCircle.m in Sources */ = {isa = PBXBuildFile; fileRef = E4C883E96A6E2DB3D0D97B13E4150C01 /* LOTShapeCircle.m */; }; + A8036D5CBDBA0991EFD73CF8421A90E3 /* UIColor+Expanded.h in Headers */ = {isa = PBXBuildFile; fileRef = A4DDD27C9DC70FEB86BA92158ED0DCAE /* UIColor+Expanded.h */; settings = {ATTRIBUTES = (Project, ); }; }; + A898C9BCCC9ABA7CD033E9C14A38A634 /* LOTTrimPathNode.h in Headers */ = {isa = PBXBuildFile; fileRef = D7424BD049D3E38D852E331CB92F69BF /* LOTTrimPathNode.h */; settings = {ATTRIBUTES = (Project, ); }; }; + AA9C4CC820E1F2092C3608586340322F /* LOTPathInterpolator.h in Headers */ = {isa = PBXBuildFile; fileRef = 35F58BD726980DFBEB409F4C8E7EF7DD /* LOTPathInterpolator.h */; settings = {ATTRIBUTES = (Project, ); }; }; + AB867314C2BD041288B7164541E46681 /* LOTPolygonAnimator.m in Sources */ = {isa = PBXBuildFile; fileRef = A3307462A6C8C5FED10A9F16E752B24A /* LOTPolygonAnimator.m */; }; + AC717FBE474925D1CC73D82439A1853C /* LOTShapeStroke.m in Sources */ = {isa = PBXBuildFile; fileRef = C67C9707D2EA2A3734B3A289F5E483B0 /* LOTShapeStroke.m */; }; + ACC3FBD078A9E475E4B7F3A1812F56A5 /* LOTShapeTransform.h in Headers */ = {isa = PBXBuildFile; fileRef = EDD0730A9EFC6BF546605EC950466378 /* LOTShapeTransform.h */; settings = {ATTRIBUTES = (Project, ); }; }; + ACEF86EDD2B44DE942DA3B5F7E656956 /* LOTComposition.m in Sources */ = {isa = PBXBuildFile; fileRef = C32960F4E2AB2E8060FF8D1D99EC982C /* LOTComposition.m */; }; + ACF9BB3F011EDADA044BD6570C299E77 /* LOTTransformInterpolator.m in Sources */ = {isa = PBXBuildFile; fileRef = B9FC8FCBF300DFCD6B130C2D70DFB5B8 /* LOTTransformInterpolator.m */; }; + AD86B59A5AE699E9050D5682455DD1A9 /* LOTShapeGradientFill.h in Headers */ = {isa = PBXBuildFile; fileRef = 6B45C5DAF912B239B840F0CA41CC32A6 /* LOTShapeGradientFill.h */; settings = {ATTRIBUTES = (Project, ); }; }; + ADAF3B282B8B4A1F2413F50BAF199F3D /* CGGeometry+LOTAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = D0A5736FB11B4EBBBA591FAD3A65333D /* CGGeometry+LOTAdditions.m */; }; + AE202F9606396BB75D90CFB1EC8C5BC4 /* LOTBezierPath.m in Sources */ = {isa = PBXBuildFile; fileRef = F17767C205B354B5CAB2481BAB5F9DA0 /* LOTBezierPath.m */; }; + AE5F2557EDAAE5DCFB0615DFA12C052A /* LOTAnimationCache.h in Headers */ = {isa = PBXBuildFile; fileRef = 4E74F5FB415EC7EA39AC029FA525577B /* LOTAnimationCache.h */; settings = {ATTRIBUTES = (Public, ); }; }; + AEB03ECA05399E63C643973D5C0B46B9 /* LOTTrimPathNode.m in Sources */ = {isa = PBXBuildFile; fileRef = 5638F0FF469208491F432907994C7502 /* LOTTrimPathNode.m */; }; + AF3587257B98B3A268016BD730F671AD /* LOTCircleAnimator.h in Headers */ = {isa = PBXBuildFile; fileRef = 981A7F32888CC43622C4C6E1A41EA449 /* LOTCircleAnimator.h */; settings = {ATTRIBUTES = (Project, ); }; }; + AFCC085EB6B83F73A3E403A02C393694 /* LOTFillRenderer.h in Headers */ = {isa = PBXBuildFile; fileRef = 68E1687B5AF4D546A1AFC23A152F70AD /* LOTFillRenderer.h */; settings = {ATTRIBUTES = (Project, ); }; }; B3CFE17627AD96132E88A45FBD85C4E4 /* Pods-Lottie-Example-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 6B2EA2A4719AB76E637979AE2E65E786 /* Pods-Lottie-Example-dummy.m */; }; + B4039F6AEBEE0D39EC6C92DC3960963E /* LOTGradientFillRender.m in Sources */ = {isa = PBXBuildFile; fileRef = D8A357F62DB6E2FEFA3581128A08EB2A /* LOTGradientFillRender.m */; }; + B8445ECC0712E24DB9F45065360BD293 /* LOTTransformInterpolator.h in Headers */ = {isa = PBXBuildFile; fileRef = 61D63E2A019BF14C7A1B2CB86A19DA9F /* LOTTransformInterpolator.h */; settings = {ATTRIBUTES = (Project, ); }; }; B8BCA47B1A77DF95917998D9085EFAA9 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7B84DD8BA444B84A5807EA458734DA5D /* Foundation.framework */; }; - BB505B6625A3191ED62A370464964D87 /* LOTShapeCircle.m in Sources */ = {isa = PBXBuildFile; fileRef = D8D4D2612BAB4E96A1EFC2C1A379B795 /* LOTShapeCircle.m */; }; - BBA49D2F013B52969ECFB84659DF04AE /* LOTRoundedRectAnimator.h in Headers */ = {isa = PBXBuildFile; fileRef = 50A7B85C7FF3F62AA8229881037A84F9 /* LOTRoundedRectAnimator.h */; settings = {ATTRIBUTES = (Project, ); }; }; - BBE368FED1915B20CEC1E69227B45683 /* LOTAnimatedSwitch.m in Sources */ = {isa = PBXBuildFile; fileRef = C43F696E5119C1A62FC708886D861CFD /* LOTAnimatedSwitch.m */; }; - BC10EA3E13BADB5C3146FDBF73FD1A3A /* LOTValueInterpolator.m in Sources */ = {isa = PBXBuildFile; fileRef = 40AB914034285EFBF52E103FB005E657 /* LOTValueInterpolator.m */; }; - BCBCC1C69D47506C917977C12BD7A8B3 /* LOTRepeaterRenderer.m in Sources */ = {isa = PBXBuildFile; fileRef = 0468A1630D67266809023D1E0248D7B5 /* LOTRepeaterRenderer.m */; }; - BD0FFCE664E3940072042D1036BB9FE3 /* LOTLayerContainer.m in Sources */ = {isa = PBXBuildFile; fileRef = 5D8DAA2C3DCE843D862FC6B4C6892802 /* LOTLayerContainer.m */; }; - BF97243BE5E56133C8E010764F91E8B5 /* LOTStrokeRenderer.m in Sources */ = {isa = PBXBuildFile; fileRef = 6DBF60E20E0F3964D13D808F657EC3D0 /* LOTStrokeRenderer.m */; }; - C2BEC0BBD97858E8C5C28E5817177D03 /* LOTAnimationTransitionController.h in Headers */ = {isa = PBXBuildFile; fileRef = 786D7137457B872697EDE5C057C222E9 /* LOTAnimationTransitionController.h */; settings = {ATTRIBUTES = (Public, ); }; }; - C30673BB9552799EB7D68E6931DD8DB5 /* LOTShapeRepeater.m in Sources */ = {isa = PBXBuildFile; fileRef = 61A745957B3F1CA9CD1FEE1F8C951BA1 /* LOTShapeRepeater.m */; }; - C490E9C2CF5C1443715780FFC89769B9 /* LOTAnimationTransitionController.m in Sources */ = {isa = PBXBuildFile; fileRef = C492C77CFABF205B4C791EAFA5DA8931 /* LOTAnimationTransitionController.m */; }; - C5081E3D0804BDEFBF04277F969BA90E /* LOTArrayInterpolator.h in Headers */ = {isa = PBXBuildFile; fileRef = EBF64DB27BB35CA09D041C9D2F9CEC4E /* LOTArrayInterpolator.h */; settings = {ATTRIBUTES = (Project, ); }; }; - C5D5D546A2F8B96B97EE7D87A978FEB7 /* LOTShapeCircle.h in Headers */ = {isa = PBXBuildFile; fileRef = 2CD964EAAA18892EF6258722B95F951B /* LOTShapeCircle.h */; settings = {ATTRIBUTES = (Project, ); }; }; - C604C42A486965AA98FD260135A97941 /* LOTAsset.m in Sources */ = {isa = PBXBuildFile; fileRef = D0D9BFD66BC6F81E4A9602BC4EE57D8A /* LOTAsset.m */; }; - C7542194267B0A684D9DA4A6B212C53B /* LOTKeyframe.h in Headers */ = {isa = PBXBuildFile; fileRef = 8A73292F17F72D91AD677901388AC371 /* LOTKeyframe.h */; settings = {ATTRIBUTES = (Project, ); }; }; - C8C316D731CD5AC2F63CF8D7DB67C5FE /* lottie-ios-OSX-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 60CC0BDE6346F89ADB5DB741F83E073E /* lottie-ios-OSX-dummy.m */; }; - C9CFF370EC8DD782B2FB0ADE5C9B9EE6 /* lottie-ios-iOS-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 0508D1F4EB475E8EA9FD7082C7562045 /* lottie-ios-iOS-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - CC5897D1A3AA2911E9EF756BB4527BEE /* LOTAsset.h in Headers */ = {isa = PBXBuildFile; fileRef = A39BDC8A9726CAF24D70EE23BB5BD1FE /* LOTAsset.h */; settings = {ATTRIBUTES = (Project, ); }; }; - CCA7CF8243A89451BC9633E613FC7151 /* LOTAnimationView_Compat.h in Headers */ = {isa = PBXBuildFile; fileRef = 46D9F748EFA7C7149612B4AC164C2CAA /* LOTAnimationView_Compat.h */; settings = {ATTRIBUTES = (Public, ); }; }; - CDE9CB16ACB6B4A3FE2BD2B1DA79EF12 /* LOTAssetGroup.m in Sources */ = {isa = PBXBuildFile; fileRef = 3F74EB15D58D3270AEB2060CFE7570CC /* LOTAssetGroup.m */; }; - CE0FC93B43A524D1F7D19B460DBDC0C7 /* LOTAnimatedControl.m in Sources */ = {isa = PBXBuildFile; fileRef = E0164FC244194F75006E20FE48527D07 /* LOTAnimatedControl.m */; }; - CF264386E9E451CF993345A14448ACC9 /* LOTAnimatedControl.h in Headers */ = {isa = PBXBuildFile; fileRef = B6E3985D0D99F02F56FBC928EC0E7223 /* LOTAnimatedControl.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D5C6F7C043AAEFC9AA94DB717766AD98 /* LOTBezierPath.h in Headers */ = {isa = PBXBuildFile; fileRef = D95D8467E79916FBC12B8B32D2278D9F /* LOTBezierPath.h */; settings = {ATTRIBUTES = (Project, ); }; }; - D822DEC7423289CE6C5EDD2F76220A87 /* LOTShapeGroup.m in Sources */ = {isa = PBXBuildFile; fileRef = 42CB682861D71E87DD35419F2BCF9D31 /* LOTShapeGroup.m */; }; - D8D6C71856D22FD2837C92162078DFF2 /* LOTColorInterpolator.m in Sources */ = {isa = PBXBuildFile; fileRef = 9EA83D1C50D183A2FB07BBEB1B9D948F /* LOTColorInterpolator.m */; }; - DB3635C8878C4DF06895A24C93F387F1 /* LOTBezierPath.m in Sources */ = {isa = PBXBuildFile; fileRef = 5DA174E536B7A8FF5B4F181BCE1D2C56 /* LOTBezierPath.m */; }; - DC75D7C902FA3FB6831C5F586BF0A9EB /* LOTCompositionContainer.m in Sources */ = {isa = PBXBuildFile; fileRef = 4BCF27BA792F612421FF59C04FA59850 /* LOTCompositionContainer.m */; }; - DCA9E79B329A9C7089354744495ACF4F /* LOTShapeTransform.m in Sources */ = {isa = PBXBuildFile; fileRef = 9EFF1F328A3093B9807BE52930AD0D53 /* LOTShapeTransform.m */; }; - DD50A114BE50A1C4B1A389E60CE85E24 /* LOTModels.h in Headers */ = {isa = PBXBuildFile; fileRef = EF76A4F44D3EC0D867DD4DE52895BF18 /* LOTModels.h */; settings = {ATTRIBUTES = (Project, ); }; }; - DD6471B94F03758B2F98A20FE2E44872 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7B84DD8BA444B84A5807EA458734DA5D /* Foundation.framework */; }; - DDEA3FF8E8CA403B1DE21A8A42A7D6E9 /* LOTLayerGroup.h in Headers */ = {isa = PBXBuildFile; fileRef = F33AD0B7CE0E660FB299E773A9F8F96D /* LOTLayerGroup.h */; settings = {ATTRIBUTES = (Project, ); }; }; - DE13550992089CBE5A2C4B755992555D /* LOTShapeTrimPath.h in Headers */ = {isa = PBXBuildFile; fileRef = 37CF631AD94762958323013D561D0562 /* LOTShapeTrimPath.h */; settings = {ATTRIBUTES = (Project, ); }; }; - DEC864A40CE0DB7A6775D90DA4765071 /* LOTPolygonAnimator.h in Headers */ = {isa = PBXBuildFile; fileRef = DB7F41DB9747216ADF000810800EEB15 /* LOTPolygonAnimator.h */; settings = {ATTRIBUTES = (Project, ); }; }; - DF3BA27820767F6D0F6A82BFD9474B73 /* LOTCompositionContainer.h in Headers */ = {isa = PBXBuildFile; fileRef = A0DFFD5220DC4CDACD93E46EB55A1F92 /* LOTCompositionContainer.h */; settings = {ATTRIBUTES = (Project, ); }; }; - E0B6E044E3C2BE1CD1F3B7B38C76487B /* LOTShapePath.m in Sources */ = {isa = PBXBuildFile; fileRef = F4DDEC0BF4954778BB020C2A3C4A37A0 /* LOTShapePath.m */; }; - E3FB33796190ABC187C4DD4F2F1FF9A3 /* LOTShapePath.h in Headers */ = {isa = PBXBuildFile; fileRef = 405A59319C59F8B5A56AA4A3248319CB /* LOTShapePath.h */; settings = {ATTRIBUTES = (Project, ); }; }; - E40A3FB1287C96D693F48780A016ED3F /* LOTColorInterpolator.h in Headers */ = {isa = PBXBuildFile; fileRef = 23FA32C327A312DAAA9ED200805F76B7 /* LOTColorInterpolator.h */; settings = {ATTRIBUTES = (Project, ); }; }; - E57EC26912C56DB801BCA105B1E38F64 /* LOTShapeRepeater.m in Sources */ = {isa = PBXBuildFile; fileRef = 61A745957B3F1CA9CD1FEE1F8C951BA1 /* LOTShapeRepeater.m */; }; - E772D17129596FDF838A33A26908028F /* LOTPolystarAnimator.h in Headers */ = {isa = PBXBuildFile; fileRef = 3328CBFDABE689C4A43C029461A4A1DB /* LOTPolystarAnimator.h */; settings = {ATTRIBUTES = (Project, ); }; }; - E96CE89C7C1A6A3ED3E75A01432A7FBB /* LOTShapeGroup.h in Headers */ = {isa = PBXBuildFile; fileRef = 8CB1CC0D11409074C70E4C609F1448EE /* LOTShapeGroup.h */; settings = {ATTRIBUTES = (Project, ); }; }; - EAA3E05E943798C0A996FF4C9FA611E9 /* LOTShapeTrimPath.h in Headers */ = {isa = PBXBuildFile; fileRef = 37CF631AD94762958323013D561D0562 /* LOTShapeTrimPath.h */; settings = {ATTRIBUTES = (Project, ); }; }; - EACD4A8E26C963A25FCB1239384A5F4C /* LOTLayerGroup.m in Sources */ = {isa = PBXBuildFile; fileRef = 2147F7AB75635C2E30C7748741753CEA /* LOTLayerGroup.m */; }; - EB7BA9F9897A557B348C7B06B632D059 /* LOTMask.h in Headers */ = {isa = PBXBuildFile; fileRef = 8BF5C0DCDD5501651D216815D08406BA /* LOTMask.h */; settings = {ATTRIBUTES = (Project, ); }; }; - EBD0227652E595ED3B98FB63CD19067D /* LOTRoundedRectAnimator.h in Headers */ = {isa = PBXBuildFile; fileRef = 50A7B85C7FF3F62AA8229881037A84F9 /* LOTRoundedRectAnimator.h */; settings = {ATTRIBUTES = (Project, ); }; }; - ED180731A6DA3D54432F35F66B7E302C /* LOTGradientFillRender.h in Headers */ = {isa = PBXBuildFile; fileRef = 135B555C252D40EFA4CF36C8B6B91EBE /* LOTGradientFillRender.h */; settings = {ATTRIBUTES = (Project, ); }; }; - EEB08096C988F00CFDE9BD6C9171FB83 /* LOTCompositionContainer.h in Headers */ = {isa = PBXBuildFile; fileRef = A0DFFD5220DC4CDACD93E46EB55A1F92 /* LOTCompositionContainer.h */; settings = {ATTRIBUTES = (Project, ); }; }; - F2BC18A67E6462A5B95B86D213A99B3F /* LOTAnimatorNode.h in Headers */ = {isa = PBXBuildFile; fileRef = 55E650C85AEA6D05D50287F5D07A6EB0 /* LOTAnimatorNode.h */; settings = {ATTRIBUTES = (Project, ); }; }; - F474F0C2F24152C28BB17F9F2FDDB223 /* LOTShapeGroup.h in Headers */ = {isa = PBXBuildFile; fileRef = 8CB1CC0D11409074C70E4C609F1448EE /* LOTShapeGroup.h */; settings = {ATTRIBUTES = (Project, ); }; }; - F6B91A01736088808F00D1B43CC2E7FA /* LOTShapeFill.m in Sources */ = {isa = PBXBuildFile; fileRef = 8A490E1B7F6AE8F98A80AE1B2E5D034C /* LOTShapeFill.m */; }; - F772CBD9F5D2376A0329571DB7C949B7 /* LOTPathAnimator.m in Sources */ = {isa = PBXBuildFile; fileRef = 5A5058F11E3F1D9871124199C1B3D9E4 /* LOTPathAnimator.m */; }; - F87B2EABBEA37E0935718B6400DF6754 /* LOTShapeTransform.m in Sources */ = {isa = PBXBuildFile; fileRef = 9EFF1F328A3093B9807BE52930AD0D53 /* LOTShapeTransform.m */; }; - FA186EC1F104AD0C5026A68518372DBC /* LOTShapeStroke.m in Sources */ = {isa = PBXBuildFile; fileRef = 5E38775E835996063AD3975DB0D0685F /* LOTShapeStroke.m */; }; - FB1A193171350ED85E89AC0480808A04 /* LOTBezierData.m in Sources */ = {isa = PBXBuildFile; fileRef = A3076BBC1E5633342EB6DC328972318B /* LOTBezierData.m */; }; - FB62A10B7776C450974859DCAE75FDFB /* LOTPolystarAnimator.h in Headers */ = {isa = PBXBuildFile; fileRef = 3328CBFDABE689C4A43C029461A4A1DB /* LOTPolystarAnimator.h */; settings = {ATTRIBUTES = (Project, ); }; }; - FBF6F943722FA0BF60102D606D1DDBC8 /* LOTTransformInterpolator.m in Sources */ = {isa = PBXBuildFile; fileRef = E977A18230CBF470460C58037A437B84 /* LOTTransformInterpolator.m */; }; - FCFBD9EDDF1711A7BD0A04D3E2AA6539 /* LOTPathInterpolator.m in Sources */ = {isa = PBXBuildFile; fileRef = 0221FBCD051E76A64256E6E1279A59A0 /* LOTPathInterpolator.m */; }; - FDDB82AFFF44E487FFB233CFAD5921C9 /* LOTShapeTransform.h in Headers */ = {isa = PBXBuildFile; fileRef = E6C87A40CDE5E282FACD344EEF9BCBE8 /* LOTShapeTransform.h */; settings = {ATTRIBUTES = (Project, ); }; }; - FF9255EB4CD11DD726E677442B7AAA35 /* LOTValueInterpolator.h in Headers */ = {isa = PBXBuildFile; fileRef = 96C32584B6FCC9133BDAC268ADA1C133 /* LOTValueInterpolator.h */; settings = {ATTRIBUTES = (Project, ); }; }; + B9447EFFFC8D0BEF45388C63EF687305 /* LOTCompositionContainer.m in Sources */ = {isa = PBXBuildFile; fileRef = C7BC534D86AC2359352FC6671F83BDC7 /* LOTCompositionContainer.m */; }; + BB708965FEF94963CE914C96060EFA1E /* LOTShapeRepeater.h in Headers */ = {isa = PBXBuildFile; fileRef = 5B11F488A6E654EFE96E3C095DD95134 /* LOTShapeRepeater.h */; settings = {ATTRIBUTES = (Project, ); }; }; + BBA1F0CF8B6D179132DF990A8C577492 /* LOTAnimationView.h in Headers */ = {isa = PBXBuildFile; fileRef = 8341FEA310739FC825ADA6DEDC31E740 /* LOTAnimationView.h */; settings = {ATTRIBUTES = (Public, ); }; }; + BCC2490C18DB821E84BF0DDC5C87B0C3 /* LOTRenderGroup.h in Headers */ = {isa = PBXBuildFile; fileRef = A820A48AB0D547858DF28B0E9655F394 /* LOTRenderGroup.h */; settings = {ATTRIBUTES = (Project, ); }; }; + BE3F781DD5EF414ABB7EC05C32845D2A /* LOTBezierPath.h in Headers */ = {isa = PBXBuildFile; fileRef = 57614F5D4203365231BFFE6644631A19 /* LOTBezierPath.h */; settings = {ATTRIBUTES = (Project, ); }; }; + BFFEF019B646C877FA9C677CBB6DE463 /* LOTShapeCircle.h in Headers */ = {isa = PBXBuildFile; fileRef = A1C00F0E74B77AE86CA7D7377D83B46A /* LOTShapeCircle.h */; settings = {ATTRIBUTES = (Project, ); }; }; + C0E81B9675C5A0CE2DE6ECC7FC604E1D /* LOTValueCallback.h in Headers */ = {isa = PBXBuildFile; fileRef = 2A74ED85DE78AA3150EACE898881F461 /* LOTValueCallback.h */; settings = {ATTRIBUTES = (Public, ); }; }; + C14722398A37454433B6BAB68AE2A51E /* LOTValueCallback.m in Sources */ = {isa = PBXBuildFile; fileRef = FF48818E5315026FD6DC14944C835345 /* LOTValueCallback.m */; }; + C40581EB45FE2C71C252B87CC6B170F0 /* UIColor+Expanded.m in Sources */ = {isa = PBXBuildFile; fileRef = C3A33578A6371962FBB57B72B7439B73 /* UIColor+Expanded.m */; }; + C63CD0DFEE5113D475030A35517B513F /* LOTColorInterpolator.h in Headers */ = {isa = PBXBuildFile; fileRef = 5CD1545364AD1612AAE8C24E0B02B768 /* LOTColorInterpolator.h */; settings = {ATTRIBUTES = (Project, ); }; }; + C74274FD295632A494C9AE59FAEF3BFC /* LOTShapeFill.h in Headers */ = {isa = PBXBuildFile; fileRef = DC5DC300A9713A2CF620ED314317C11F /* LOTShapeFill.h */; settings = {ATTRIBUTES = (Project, ); }; }; + C84342E1725B26853F57446BA8F18C3F /* LOTSizeInterpolator.m in Sources */ = {isa = PBXBuildFile; fileRef = 76E079C7802C56C5C7C985D44B5E4084 /* LOTSizeInterpolator.m */; }; + C95CCA4ADE5937504A5979ED1E871063 /* UIColor.m in Sources */ = {isa = PBXBuildFile; fileRef = 1B4C04705594EE8AEF41CC582DCCF4AA /* UIColor.m */; }; + CA523AE186ECE2AEAEFB4FB592B2EF7C /* NSValue+Compat.m in Sources */ = {isa = PBXBuildFile; fileRef = B5A29569D371C0A9530FBAF5463FB1B2 /* NSValue+Compat.m */; }; + CAC7095A47554A792E0BCD3E0298F6EB /* LOTShapeStroke.m in Sources */ = {isa = PBXBuildFile; fileRef = C67C9707D2EA2A3734B3A289F5E483B0 /* LOTShapeStroke.m */; }; + CF633E1A0CED8B1E2E4F0BB4FFE3E5CC /* LOTPlatformCompat.h in Headers */ = {isa = PBXBuildFile; fileRef = C50301FDF7BA8E27D2F58240E54D1286 /* LOTPlatformCompat.h */; settings = {ATTRIBUTES = (Project, ); }; }; + D07BFEFC5B578C8BC70F9192F0CF443D /* LOTSizeInterpolator.h in Headers */ = {isa = PBXBuildFile; fileRef = F2A2B345BCD59E1325C15AB515C91DC8 /* LOTSizeInterpolator.h */; settings = {ATTRIBUTES = (Project, ); }; }; + D1456B82A211B889DC4C48B09EF336F6 /* LOTShapeStar.h in Headers */ = {isa = PBXBuildFile; fileRef = 8A6EC5B13B17F7EC7B827CCC81DD6D59 /* LOTShapeStar.h */; settings = {ATTRIBUTES = (Project, ); }; }; + D203466435C3B03FD545731C840F61EF /* LOTBezierPath.h in Headers */ = {isa = PBXBuildFile; fileRef = 57614F5D4203365231BFFE6644631A19 /* LOTBezierPath.h */; settings = {ATTRIBUTES = (Project, ); }; }; + D25626CF5418DC6299C7F05B2B957CC5 /* LOTRadialGradientLayer.m in Sources */ = {isa = PBXBuildFile; fileRef = 26D4E05F5322BF3B72C8611356635EF3 /* LOTRadialGradientLayer.m */; }; + D399E122ED284FD80ABB0955D21A1FD3 /* NSValue+Compat.h in Headers */ = {isa = PBXBuildFile; fileRef = 1098D39EEB50537E5D1874166FA26426 /* NSValue+Compat.h */; settings = {ATTRIBUTES = (Project, ); }; }; + D4DB48C26373D780A7F6CC97EAF789B7 /* LOTGradientFillRender.m in Sources */ = {isa = PBXBuildFile; fileRef = D8A357F62DB6E2FEFA3581128A08EB2A /* LOTGradientFillRender.m */; }; + D4EBF866D3CD27E3CCA936E819C05993 /* LOTKeyframe.h in Headers */ = {isa = PBXBuildFile; fileRef = 10B78B281BE30EE85830187B033E4782 /* LOTKeyframe.h */; settings = {ATTRIBUTES = (Project, ); }; }; + D69E130C25EE0B1C39EDDAE77FED1DA8 /* LOTFillRenderer.m in Sources */ = {isa = PBXBuildFile; fileRef = DD4FD4AD47A15DA21BE7004345E59FF1 /* LOTFillRenderer.m */; }; + D8A844267091FD6F34B7B9B47E5FF668 /* LOTArrayInterpolator.h in Headers */ = {isa = PBXBuildFile; fileRef = 2CBA32868BFFDD5BAFE59B416B31D38F /* LOTArrayInterpolator.h */; settings = {ATTRIBUTES = (Project, ); }; }; + D9015A2C08A9F316FD6FCE37D654B51E /* LOTPolystarAnimator.h in Headers */ = {isa = PBXBuildFile; fileRef = 717B2B64150E5A94217C560C674FB5B3 /* LOTPolystarAnimator.h */; settings = {ATTRIBUTES = (Project, ); }; }; + D9F1B9BE6F232737502BC979E98E12A4 /* LOTPathInterpolator.m in Sources */ = {isa = PBXBuildFile; fileRef = 2E71C3833821DFA2123490CE5786AED4 /* LOTPathInterpolator.m */; }; + DCE10CD8A7223BD1223449673513CE18 /* LOTRenderGroup.m in Sources */ = {isa = PBXBuildFile; fileRef = DACE6FE000D87D2ED388D53C9A09105E /* LOTRenderGroup.m */; }; + DE2328862B54EE1A30C36C78504493FC /* LOTLayerContainer.m in Sources */ = {isa = PBXBuildFile; fileRef = FB18CA5A449F638545857EFBFDB896FB /* LOTLayerContainer.m */; }; + DE581763B694705ADD84331FB30468C6 /* LOTGradientFillRender.h in Headers */ = {isa = PBXBuildFile; fileRef = 22EBB006E69A449C65530E592CD2A626 /* LOTGradientFillRender.h */; settings = {ATTRIBUTES = (Project, ); }; }; + DF18DFEA0DFBF56E8785493F8F9D01FF /* LOTLayerContainer.m in Sources */ = {isa = PBXBuildFile; fileRef = FB18CA5A449F638545857EFBFDB896FB /* LOTLayerContainer.m */; }; + E1D382A25C1793A85F3BDBF484ABD94A /* LOTAssetGroup.m in Sources */ = {isa = PBXBuildFile; fileRef = 450FD39F04E68EAD2100497895395162 /* LOTAssetGroup.m */; }; + E5E029D32C225C4CB65EC0BDB8E26C4E /* LOTKeypath.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F2FC4086F209D0B9CA768C11A8E5518 /* LOTKeypath.h */; settings = {ATTRIBUTES = (Public, ); }; }; + E67670C8C4471E82BB5FAD665AF488B1 /* LOTPolystarAnimator.m in Sources */ = {isa = PBXBuildFile; fileRef = C42115F3B2945D84380F9E656A1B9F48 /* LOTPolystarAnimator.m */; }; + E74ADCB287028C758738FDFC27378C19 /* LOTAnimationView_Compat.h in Headers */ = {isa = PBXBuildFile; fileRef = 5E3AC90F32703CE393FBB9199E8E6900 /* LOTAnimationView_Compat.h */; settings = {ATTRIBUTES = (Public, ); }; }; + E7C306DD9CBAC3B6B18AB1C0EE7A8E0C /* LOTLayer.m in Sources */ = {isa = PBXBuildFile; fileRef = BF608B78F94F2F6159A526758E25EFCF /* LOTLayer.m */; }; + E93E9402CD446D3F077FF6DA7D7E1DCC /* LOTShapeRepeater.m in Sources */ = {isa = PBXBuildFile; fileRef = 6F84F1736D6E33DCF1A32E42F64C5C87 /* LOTShapeRepeater.m */; }; + EBB44FF4B109D4131EB2EC79F6B989CE /* UIColor.m in Sources */ = {isa = PBXBuildFile; fileRef = 1B4C04705594EE8AEF41CC582DCCF4AA /* UIColor.m */; }; + EC0416504C864774C92044245B491E5D /* lottie-ios-iOS-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 54C415EA7F1183D8CBF4DD450C8E917A /* lottie-ios-iOS-dummy.m */; }; + ED9563AE9C61252A8F9C9C4635ADE4EE /* LOTStrokeRenderer.m in Sources */ = {isa = PBXBuildFile; fileRef = A51AFC17F0E6E2A6C99E481475601F3B /* LOTStrokeRenderer.m */; }; + EE490F848693BA9AE4048EF46B9A1DEC /* LOTRoundedRectAnimator.m in Sources */ = {isa = PBXBuildFile; fileRef = 7C6D047937C224F003CA77C2073CDD10 /* LOTRoundedRectAnimator.m */; }; + EE7AD9E944C8C82535E6559C95022DE8 /* LOTCircleAnimator.h in Headers */ = {isa = PBXBuildFile; fileRef = 981A7F32888CC43622C4C6E1A41EA449 /* LOTCircleAnimator.h */; settings = {ATTRIBUTES = (Project, ); }; }; + EE81AEC77F34DA40A24980C7C025C7C5 /* LOTShapeStroke.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F992FE6E0A432C6BE035D3396C8C9F9 /* LOTShapeStroke.h */; settings = {ATTRIBUTES = (Project, ); }; }; + EFD56A1C718F70F6AA7B1514CC404CF1 /* LOTAnimationTransitionController.h in Headers */ = {isa = PBXBuildFile; fileRef = CB76900FD85771E2DC16A26864657F3D /* LOTAnimationTransitionController.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F216E175900A503A4768617320517785 /* LOTRenderGroup.m in Sources */ = {isa = PBXBuildFile; fileRef = DACE6FE000D87D2ED388D53C9A09105E /* LOTRenderGroup.m */; }; + F231226C194DFED2518ED022E2B96255 /* CALayer+Compat.h in Headers */ = {isa = PBXBuildFile; fileRef = F975602C737030EF0919EE751E8E24DB /* CALayer+Compat.h */; settings = {ATTRIBUTES = (Project, ); }; }; + F33190F1D6EF8A845C0BD0148900FE64 /* LOTShapeRectangle.m in Sources */ = {isa = PBXBuildFile; fileRef = 4A24096E10060F5B7E287A1E125EBB63 /* LOTShapeRectangle.m */; }; + F524BFE7ED0B24F4D2C030506CDAE2C0 /* LOTLayerGroup.m in Sources */ = {isa = PBXBuildFile; fileRef = 2CCBDC43BD9347A9F269C13873D9712D /* LOTLayerGroup.m */; }; + F6811A33B2BD1B51683F4EC935EE3CC5 /* LOTAssetGroup.h in Headers */ = {isa = PBXBuildFile; fileRef = 7CD3706DB5874050E418954E3029AD3D /* LOTAssetGroup.h */; settings = {ATTRIBUTES = (Project, ); }; }; + F7ACC51F07EA8A86E6224D58C6549068 /* LOTPolystarAnimator.h in Headers */ = {isa = PBXBuildFile; fileRef = 717B2B64150E5A94217C560C674FB5B3 /* LOTPolystarAnimator.h */; settings = {ATTRIBUTES = (Project, ); }; }; + F7D3FA154E819C195AA9CCA4F3FEFF9E /* LOTAnimatedSwitch.h in Headers */ = {isa = PBXBuildFile; fileRef = A122904155EAAC1CF9A88AC054FD2D69 /* LOTAnimatedSwitch.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F97CCA7473FC33E50833AA0C7B3AF767 /* LOTTrimPathNode.h in Headers */ = {isa = PBXBuildFile; fileRef = D7424BD049D3E38D852E331CB92F69BF /* LOTTrimPathNode.h */; settings = {ATTRIBUTES = (Project, ); }; }; + FBC49AAE60E240C2B9A5C5C419EBB7D8 /* LOTColorInterpolator.m in Sources */ = {isa = PBXBuildFile; fileRef = 593CCF481C36ACB023B63EF6EC81C50E /* LOTColorInterpolator.m */; }; + FBCE9E625BEB11B8376254FA66A5C7A1 /* UIColor.h in Headers */ = {isa = PBXBuildFile; fileRef = 345A665333D59935D8DCCAFCE457762D /* UIColor.h */; settings = {ATTRIBUTES = (Project, ); }; }; + FBDA762F1D32997EB027052A7D129296 /* LOTAnimationCache.m in Sources */ = {isa = PBXBuildFile; fileRef = 7D6D543892348908F509AAE5109E56AB /* LOTAnimationCache.m */; }; + FCD289D91D81BE68689CDD4A891082D5 /* LOTCompositionContainer.h in Headers */ = {isa = PBXBuildFile; fileRef = 7D873E9FCFE5C1F9619C1A10FEF4F195 /* LOTCompositionContainer.h */; settings = {ATTRIBUTES = (Project, ); }; }; + FDBE169E5C76E1BBDEB793B7D6D080E6 /* LOTLayer.h in Headers */ = {isa = PBXBuildFile; fileRef = 521EC30358351BCE62767560A7C68513 /* LOTLayer.h */; settings = {ATTRIBUTES = (Project, ); }; }; + FF0E5D9A7BBFB26657B14FDE137379FD /* LOTValueInterpolator.m in Sources */ = {isa = PBXBuildFile; fileRef = F77F168056C99E1AE6C4C6BBCFC7D9CA /* LOTValueInterpolator.m */; }; + FF3A7841C8BE6551A895349283035A83 /* LOTPathInterpolator.h in Headers */ = {isa = PBXBuildFile; fileRef = 35F58BD726980DFBEB409F4C8E7EF7DD /* LOTPathInterpolator.h */; settings = {ATTRIBUTES = (Project, ); }; }; + FFF60F0544F6BF0A58409C308BAB3A52 /* CALayer+Compat.m in Sources */ = {isa = PBXBuildFile; fileRef = 9B56F1E5281EF1C7D517C356ABDB0E5E /* CALayer+Compat.m */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -260,254 +268,259 @@ isa = PBXContainerItemProxy; containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; proxyType = 1; - remoteGlobalIDString = F30904A4E2B528D7322F8C34AD2C7625; + remoteGlobalIDString = 17CF872940024461716375A5C025FB2C; remoteInfo = "lottie-ios-iOS"; }; D4791C006ECE4521039908D2894E5846 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; proxyType = 1; - remoteGlobalIDString = C3ED1BE19A2E3ADF592D40371146E32D; + remoteGlobalIDString = 9BE15F564123A732B06C9999504090F9; remoteInfo = "lottie-ios-OSX"; }; /* End PBXContainerItemProxy section */ /* Begin PBXFileReference section */ - 0221FBCD051E76A64256E6E1279A59A0 /* LOTPathInterpolator.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = LOTPathInterpolator.m; sourceTree = ""; }; - 0468A1630D67266809023D1E0248D7B5 /* LOTRepeaterRenderer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = LOTRepeaterRenderer.m; sourceTree = ""; }; + 0009F85E49E1B884B4F661D142DB183E /* LOTRepeaterRenderer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = LOTRepeaterRenderer.m; sourceTree = ""; }; 0508D1F4EB475E8EA9FD7082C7562045 /* lottie-ios-iOS-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "lottie-ios-iOS-umbrella.h"; path = "../lottie-ios-iOS/lottie-ios-iOS-umbrella.h"; sourceTree = ""; }; - 086A58805232A189CDBDA97740A7F97B /* LOTRadialGradientLayer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTRadialGradientLayer.h; sourceTree = ""; }; - 0AAE803FD23C4072276F802275CC75A2 /* LOTFillRenderer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTFillRenderer.h; sourceTree = ""; }; - 135B555C252D40EFA4CF36C8B6B91EBE /* LOTGradientFillRender.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTGradientFillRender.h; sourceTree = ""; }; + 0A9BD8C23179DADD5C4FF9E7D187B043 /* LOTAnimationView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = LOTAnimationView.m; sourceTree = ""; }; + 0E9F71BCB0F40FE922DF9F1570AA4867 /* LOTAsset.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTAsset.h; sourceTree = ""; }; + 1098D39EEB50537E5D1874166FA26426 /* NSValue+Compat.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "NSValue+Compat.h"; sourceTree = ""; }; + 10B78B281BE30EE85830187B033E4782 /* LOTKeyframe.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTKeyframe.h; sourceTree = ""; }; 1688BB5C71E5E3A2AB6A945B3793E06E /* Pods-lottie-ios_Tests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-lottie-ios_Tests.release.xcconfig"; sourceTree = ""; }; - 194F1B32D0624C138E12323981E4B3B3 /* LOTNumberInterpolator.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTNumberInterpolator.h; sourceTree = ""; }; + 18EA856E98C145EB7C34191962E18191 /* CGGeometry+LOTAdditions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "CGGeometry+LOTAdditions.h"; sourceTree = ""; }; 1A6EFDACDACB6E43B1C860B406F5CC02 /* Pods_Lottie_Example.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = Pods_Lottie_Example.framework; path = "Pods-Lottie-Example.framework"; sourceTree = BUILT_PRODUCTS_DIR; }; + 1B4C04705594EE8AEF41CC582DCCF4AA /* UIColor.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = UIColor.m; sourceTree = ""; }; 200981A59C027D7B3DD2231DB8680AAA /* Pods-Lottie-Example.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-Lottie-Example.release.xcconfig"; sourceTree = ""; }; - 2147F7AB75635C2E30C7748741753CEA /* LOTLayerGroup.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = LOTLayerGroup.m; sourceTree = ""; }; - 227843D236B655642C7E3C469ED005F1 /* CALayer+Compat.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "CALayer+Compat.h"; sourceTree = ""; }; 22BDFBAA4524EAF16132AD22EC39BA9D /* Pods-lottie-ios_Tests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-lottie-ios_Tests.debug.xcconfig"; sourceTree = ""; }; + 22EBB006E69A449C65530E592CD2A626 /* LOTGradientFillRender.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTGradientFillRender.h; sourceTree = ""; }; 23289CF2CB9CCDE468ABF8D7040AB9F7 /* lottie-ios-OSX-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "lottie-ios-OSX-prefix.pch"; sourceTree = ""; }; - 23FA32C327A312DAAA9ED200805F76B7 /* LOTColorInterpolator.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTColorInterpolator.h; sourceTree = ""; }; - 272D6A3046E0CACC4BF991956B10036C /* LOTShapeGradientFill.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = LOTShapeGradientFill.m; sourceTree = ""; }; - 28990FC90E08798A110AFD134EAD0190 /* UIColor.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = UIColor.m; sourceTree = ""; }; - 2984C6FFF4ACA3196271E2F1976ADA69 /* LOTLayer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = LOTLayer.m; sourceTree = ""; }; + 245B48E160E5ACDDE4DBB76BCF845D2F /* LOTShapeTransform.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = LOTShapeTransform.m; sourceTree = ""; }; + 26D4E05F5322BF3B72C8611356635EF3 /* LOTRadialGradientLayer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = LOTRadialGradientLayer.m; sourceTree = ""; }; + 2A74ED85DE78AA3150EACE898881F461 /* LOTValueCallback.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTValueCallback.h; sourceTree = ""; }; + 2BA2DAF580D8E1E762C64C730E86C4F4 /* LOTShapeGroup.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTShapeGroup.h; sourceTree = ""; }; 2CB517641B868E9238D1CBF2F61FC321 /* Pods-Lottie-Example-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-Lottie-Example-acknowledgements.markdown"; sourceTree = ""; }; - 2CD964EAAA18892EF6258722B95F951B /* LOTShapeCircle.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTShapeCircle.h; sourceTree = ""; }; - 3242711C4E767B6FF3AEC1BAA95BA71F /* LOTPolystarAnimator.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = LOTPolystarAnimator.m; sourceTree = ""; }; + 2CBA32868BFFDD5BAFE59B416B31D38F /* LOTArrayInterpolator.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTArrayInterpolator.h; sourceTree = ""; }; + 2CCBDC43BD9347A9F269C13873D9712D /* LOTLayerGroup.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = LOTLayerGroup.m; sourceTree = ""; }; + 2D450E5F4ECEB3AE2A86EEB12A5B8521 /* LOTShapeGroup.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = LOTShapeGroup.m; sourceTree = ""; }; + 2E71C3833821DFA2123490CE5786AED4 /* LOTPathInterpolator.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = LOTPathInterpolator.m; sourceTree = ""; }; + 30E9D1262F3F3D80327A08CD6345E51E /* LOTStrokeRenderer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTStrokeRenderer.h; sourceTree = ""; }; 32A6F597E0546E4D2A2E39015759C533 /* Pods_Lottie_Viewer.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = Pods_Lottie_Viewer.framework; path = "Pods-Lottie Viewer.framework"; sourceTree = BUILT_PRODUCTS_DIR; }; - 3328CBFDABE689C4A43C029461A4A1DB /* LOTPolystarAnimator.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTPolystarAnimator.h; sourceTree = ""; }; - 37CF631AD94762958323013D561D0562 /* LOTShapeTrimPath.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTShapeTrimPath.h; sourceTree = ""; }; - 38EADF596ED162A0EE3D35E987685FD7 /* LOTPolygonAnimator.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = LOTPolygonAnimator.m; sourceTree = ""; }; + 33BA62FECB64376459C90558FD042AE5 /* LOTShapeTrimPath.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTShapeTrimPath.h; sourceTree = ""; }; + 345A665333D59935D8DCCAFCE457762D /* UIColor.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = UIColor.h; sourceTree = ""; }; + 34AF815C52B27A7782E3842FC8BC1CCB /* LOTKeyframe.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = LOTKeyframe.m; sourceTree = ""; }; + 35F58BD726980DFBEB409F4C8E7EF7DD /* LOTPathInterpolator.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTPathInterpolator.h; sourceTree = ""; }; 392AE6678DE5B261D36B7164386E03C8 /* Pods-lottie-ios_Tests-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-lottie-ios_Tests-dummy.m"; sourceTree = ""; }; - 3CA45971085CDBB78AAE42054A76E077 /* LOTShapeRectangle.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTShapeRectangle.h; sourceTree = ""; }; 3DF4ABD88E12E333FE644FFDE33C8DD8 /* Pods-lottie-ios_Tests-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-lottie-ios_Tests-acknowledgements.plist"; sourceTree = ""; }; + 3E1AF07A2708493FCD2CD125784B7141 /* LOTLayerContainer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTLayerContainer.h; sourceTree = ""; }; 3E4E92FF73D0C5408716B831624378F8 /* Pods-Lottie-Example.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-Lottie-Example.debug.xcconfig"; sourceTree = ""; }; - 3F74EB15D58D3270AEB2060CFE7570CC /* LOTAssetGroup.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = LOTAssetGroup.m; sourceTree = ""; }; + 3F5FB9238FEEA60721BE0990A18176CB /* LOTShapeStar.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = LOTShapeStar.m; sourceTree = ""; }; 3FC57817E38FEE88C847125F31F36F1F /* lottie-ios-iOS.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "lottie-ios-iOS.xcconfig"; path = "../lottie-ios-iOS/lottie-ios-iOS.xcconfig"; sourceTree = ""; }; - 405A59319C59F8B5A56AA4A3248319CB /* LOTShapePath.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTShapePath.h; sourceTree = ""; }; - 40AB914034285EFBF52E103FB005E657 /* LOTValueInterpolator.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = LOTValueInterpolator.m; sourceTree = ""; }; - 40C41F2E48B907C6D99813DF7A9C2A31 /* UIColor+Expanded.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "UIColor+Expanded.m"; sourceTree = ""; }; - 428DD5AEB7E323676A510C146F1094C6 /* LOTRenderGroup.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTRenderGroup.h; sourceTree = ""; }; - 42CB682861D71E87DD35419F2BCF9D31 /* LOTShapeGroup.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = LOTShapeGroup.m; sourceTree = ""; }; - 46614A552F667CC55E45A19F9B0978D1 /* LOTFillRenderer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = LOTFillRenderer.m; sourceTree = ""; }; - 4693DA6769DE389ACDF653903848C95B /* LOTTrimPathNode.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTTrimPathNode.h; sourceTree = ""; }; - 46D9F748EFA7C7149612B4AC164C2CAA /* LOTAnimationView_Compat.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTAnimationView_Compat.h; sourceTree = ""; }; - 4A308318BDA8CEC76246D104E31729F5 /* LOTRepeaterRenderer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTRepeaterRenderer.h; sourceTree = ""; }; - 4AEFD97349588D80E639AE803E87AB1E /* LOTShapeRectangle.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = LOTShapeRectangle.m; sourceTree = ""; }; - 4BCF27BA792F612421FF59C04FA59850 /* LOTCompositionContainer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = LOTCompositionContainer.m; sourceTree = ""; }; + 4480558105469D51379A0EA86124F9A9 /* LOTBezierData.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = LOTBezierData.m; sourceTree = ""; }; + 450FD39F04E68EAD2100497895395162 /* LOTAssetGroup.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = LOTAssetGroup.m; sourceTree = ""; }; + 4A24096E10060F5B7E287A1E125EBB63 /* LOTShapeRectangle.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = LOTShapeRectangle.m; sourceTree = ""; }; 4CD8D48838914CC935697BC0B8645E9A /* Pods-Lottie-Example.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; path = "Pods-Lottie-Example.modulemap"; sourceTree = ""; }; - 50A7B85C7FF3F62AA8229881037A84F9 /* LOTRoundedRectAnimator.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTRoundedRectAnimator.h; sourceTree = ""; }; - 51FC9391B6C5C85F1F7B1FDA2CC8FDFE /* CGGeometry+LOTAdditions.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "CGGeometry+LOTAdditions.m"; sourceTree = ""; }; - 5241AB8D3B3AF2F3825A93F0B32D9C5D /* LOTKeyframe.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = LOTKeyframe.m; sourceTree = ""; }; + 4E1F0FDF5268894547EB1C7FC507ED30 /* LOTShapeTrimPath.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = LOTShapeTrimPath.m; sourceTree = ""; }; + 4E74F5FB415EC7EA39AC029FA525577B /* LOTAnimationCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTAnimationCache.h; sourceTree = ""; }; + 5064887F8EAA1248C794BD8148E14A32 /* LOTMaskContainer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTMaskContainer.h; sourceTree = ""; }; + 521EC30358351BCE62767560A7C68513 /* LOTLayer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTLayer.h; sourceTree = ""; }; + 536713FE7AC1A4F2BC2E93D81DFEB882 /* LOTShapeRectangle.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTShapeRectangle.h; sourceTree = ""; }; + 5386A88237C7DCCDD62F5F1758E0A34A /* LOTAnimatedControl.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = LOTAnimatedControl.m; sourceTree = ""; }; 539ADAB8D98168C3A5104707E1819800 /* Pods-Lottie Viewer-resources.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-Lottie Viewer-resources.sh"; sourceTree = ""; }; + 543BDC1D5AA10F0E690ECC1D58B6A608 /* LOTMask.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTMask.h; sourceTree = ""; }; + 54757B02899CE4435B14EA17C1ED85B1 /* LOTCacheProvider.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = LOTCacheProvider.m; sourceTree = ""; }; 54C415EA7F1183D8CBF4DD450C8E917A /* lottie-ios-iOS-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "lottie-ios-iOS-dummy.m"; path = "../lottie-ios-iOS/lottie-ios-iOS-dummy.m"; sourceTree = ""; }; 55280B1678DBB5373CEB5963E62E39C8 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 55E650C85AEA6D05D50287F5D07A6EB0 /* LOTAnimatorNode.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTAnimatorNode.h; sourceTree = ""; }; - 5619C860054C32A3C1A3F063CCAA986A /* NSValue+Compat.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "NSValue+Compat.m"; sourceTree = ""; }; - 56A4BF06F98D77ADB3B462913C16217B /* LOTStrokeRenderer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTStrokeRenderer.h; sourceTree = ""; }; + 5638F0FF469208491F432907994C7502 /* LOTTrimPathNode.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = LOTTrimPathNode.m; sourceTree = ""; }; + 57614F5D4203365231BFFE6644631A19 /* LOTBezierPath.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTBezierPath.h; sourceTree = ""; }; 57B1FEF3178D7604EED65FA3A99A03DD /* lottie-ios-iOS.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; name = "lottie-ios-iOS.modulemap"; path = "../lottie-ios-iOS/lottie-ios-iOS.modulemap"; sourceTree = ""; }; - 5A5058F11E3F1D9871124199C1B3D9E4 /* LOTPathAnimator.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = LOTPathAnimator.m; sourceTree = ""; }; - 5D8DAA2C3DCE843D862FC6B4C6892802 /* LOTLayerContainer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = LOTLayerContainer.m; sourceTree = ""; }; - 5DA174E536B7A8FF5B4F181BCE1D2C56 /* LOTBezierPath.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = LOTBezierPath.m; sourceTree = ""; }; - 5E38775E835996063AD3975DB0D0685F /* LOTShapeStroke.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = LOTShapeStroke.m; sourceTree = ""; }; - 5E6DCE2446C4A632A3DEFF4E4D286993 /* LOTAnimatorNode.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = LOTAnimatorNode.m; sourceTree = ""; }; - 5F3B72A8E2380FF41995F178E51B5B94 /* LOTShapeRepeater.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTShapeRepeater.h; sourceTree = ""; }; - 60363DC5D5E8F3C2C28A8715DA390170 /* LOTMask.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = LOTMask.m; sourceTree = ""; }; + 593CCF481C36ACB023B63EF6EC81C50E /* LOTColorInterpolator.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = LOTColorInterpolator.m; sourceTree = ""; }; + 5B11F488A6E654EFE96E3C095DD95134 /* LOTShapeRepeater.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTShapeRepeater.h; sourceTree = ""; }; + 5CD1545364AD1612AAE8C24E0B02B768 /* LOTColorInterpolator.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTColorInterpolator.h; sourceTree = ""; }; + 5E3AC90F32703CE393FBB9199E8E6900 /* LOTAnimationView_Compat.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTAnimationView_Compat.h; sourceTree = ""; }; + 5F2FC4086F209D0B9CA768C11A8E5518 /* LOTKeypath.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTKeypath.h; sourceTree = ""; }; + 5F992FE6E0A432C6BE035D3396C8C9F9 /* LOTShapeStroke.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTShapeStroke.h; sourceTree = ""; }; 60CC0BDE6346F89ADB5DB741F83E073E /* lottie-ios-OSX-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "lottie-ios-OSX-dummy.m"; sourceTree = ""; }; - 61A745957B3F1CA9CD1FEE1F8C951BA1 /* LOTShapeRepeater.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = LOTShapeRepeater.m; sourceTree = ""; }; + 61D63E2A019BF14C7A1B2CB86A19DA9F /* LOTTransformInterpolator.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTTransformInterpolator.h; sourceTree = ""; }; 61E8C766168C906716D70FDBED5C32CA /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 6398418947AEE1FF891887426F2CB24F /* LOTAnimationCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTAnimationCache.h; sourceTree = ""; }; 63E8A32304416366E7C4FC7A2D6C3A08 /* AppKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AppKit.framework; path = Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.12.sdk/System/Library/Frameworks/AppKit.framework; sourceTree = DEVELOPER_DIR; }; - 659E43C54C18D4FD539A4E332F7790F5 /* UIColor+Expanded.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "UIColor+Expanded.h"; sourceTree = ""; }; 68BD4E155A46A5ACAC446D5FC4010BFB /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; name = Info.plist; path = "../lottie-ios-iOS/Info.plist"; sourceTree = ""; }; - 6ABA14F23A54CFF8B2258DE667642BFD /* LOTMaskContainer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = LOTMaskContainer.m; sourceTree = ""; }; + 68E1687B5AF4D546A1AFC23A152F70AD /* LOTFillRenderer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTFillRenderer.h; sourceTree = ""; }; + 6A22F2A85EEBD74C4973C0DDF14DC6C7 /* LOTShapePath.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = LOTShapePath.m; sourceTree = ""; }; 6AE2E9ED9175D72655AC45CF4432C1C7 /* lottie-ios-OSX.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "lottie-ios-OSX.xcconfig"; sourceTree = ""; }; 6B2EA2A4719AB76E637979AE2E65E786 /* Pods-Lottie-Example-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-Lottie-Example-dummy.m"; sourceTree = ""; }; - 6DBF60E20E0F3964D13D808F657EC3D0 /* LOTStrokeRenderer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = LOTStrokeRenderer.m; sourceTree = ""; }; - 6E7AAD90809A5BE65838A5AF376F98AA /* LOTCacheProvider.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = LOTCacheProvider.m; sourceTree = ""; }; - 7236E29E9520E96B96DA447A0F73D04A /* LOTRenderNode.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = LOTRenderNode.m; sourceTree = ""; }; + 6B45C5DAF912B239B840F0CA41CC32A6 /* LOTShapeGradientFill.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTShapeGradientFill.h; sourceTree = ""; }; + 6F84F1736D6E33DCF1A32E42F64C5C87 /* LOTShapeRepeater.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = LOTShapeRepeater.m; sourceTree = ""; }; + 717B2B64150E5A94217C560C674FB5B3 /* LOTPolystarAnimator.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTPolystarAnimator.h; sourceTree = ""; }; 74883CF1E01724853AB546D683B3DEA1 /* Pods-lottie-ios_Tests-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-lottie-ios_Tests-umbrella.h"; sourceTree = ""; }; 75F4DD86D133631479410B893D4B04F4 /* Pods_lottie_ios_Tests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = Pods_lottie_ios_Tests.framework; path = "Pods-lottie-ios_Tests.framework"; sourceTree = BUILT_PRODUCTS_DIR; }; 766EB392982CB8B00285AF081FA67A18 /* Pods-lottie-ios_Tests-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-lottie-ios_Tests-acknowledgements.markdown"; sourceTree = ""; }; - 786D7137457B872697EDE5C057C222E9 /* LOTAnimationTransitionController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTAnimationTransitionController.h; sourceTree = ""; }; + 76E079C7802C56C5C7C985D44B5E4084 /* LOTSizeInterpolator.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = LOTSizeInterpolator.m; sourceTree = ""; }; 7B84DD8BA444B84A5807EA458734DA5D /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS10.0.sdk/System/Library/Frameworks/Foundation.framework; sourceTree = DEVELOPER_DIR; }; - 7C79E6BF7DA299701FC84C9F393E47F3 /* LOTShapeStar.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTShapeStar.h; sourceTree = ""; }; - 7CF1D3E47D4044924E21C0FCAB9095D0 /* Lottie.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = Lottie.h; sourceTree = ""; }; + 7C6D047937C224F003CA77C2073CDD10 /* LOTRoundedRectAnimator.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = LOTRoundedRectAnimator.m; sourceTree = ""; }; + 7CD3706DB5874050E418954E3029AD3D /* LOTAssetGroup.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTAssetGroup.h; sourceTree = ""; }; 7D00258E4C4D882665FA7673AF9DE81C /* lottie-ios-OSX-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "lottie-ios-OSX-umbrella.h"; sourceTree = ""; }; + 7D1442D30C3E3EB79709C2DEAE546228 /* LOTPathAnimator.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = LOTPathAnimator.m; sourceTree = ""; }; + 7D6D543892348908F509AAE5109E56AB /* LOTAnimationCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = LOTAnimationCache.m; sourceTree = ""; }; + 7D873E9FCFE5C1F9619C1A10FEF4F195 /* LOTCompositionContainer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTCompositionContainer.h; sourceTree = ""; }; 7DA1DF4DC5CE76C3EF3AFAF093E3B908 /* Pods-Lottie Viewer-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-Lottie Viewer-acknowledgements.plist"; sourceTree = ""; }; - 8042D1984741739FE2632E3381091EB2 /* LOTCircleAnimator.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTCircleAnimator.h; sourceTree = ""; }; + 7E335339E18CA751DB8D08D11A91DD44 /* LOTShapeGradientFill.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = LOTShapeGradientFill.m; sourceTree = ""; }; 804BBDA063F6BE0570BCF2BE94D00E85 /* lottie-ios-OSX.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; path = "lottie-ios-OSX.modulemap"; sourceTree = ""; }; - 82941F8BBD825D99E98F170139381C57 /* LOTPathInterpolator.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTPathInterpolator.h; sourceTree = ""; }; - 876290A891B0E804E9010420CBFB2DF0 /* LOTArrayInterpolator.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = LOTArrayInterpolator.m; sourceTree = ""; }; - 8A490E1B7F6AE8F98A80AE1B2E5D034C /* LOTShapeFill.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = LOTShapeFill.m; sourceTree = ""; }; - 8A73292F17F72D91AD677901388AC371 /* LOTKeyframe.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTKeyframe.h; sourceTree = ""; }; - 8B5218EC59B214FFDB753A1E532F1FD4 /* LOTPathAnimator.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTPathAnimator.h; sourceTree = ""; }; - 8B7CB99752B9512D6263AF2DF763BAF2 /* LOTShapeFill.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTShapeFill.h; sourceTree = ""; }; - 8BF5C0DCDD5501651D216815D08406BA /* LOTMask.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTMask.h; sourceTree = ""; }; - 8CB1CC0D11409074C70E4C609F1448EE /* LOTShapeGroup.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTShapeGroup.h; sourceTree = ""; }; - 8D3EF8864151AD375897EEEE0049265B /* LOTAnimationView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = LOTAnimationView.m; sourceTree = ""; }; + 8185B383E94F862CB5CE59971F4C64C8 /* LOTRoundedRectAnimator.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTRoundedRectAnimator.h; sourceTree = ""; }; + 8341FEA310739FC825ADA6DEDC31E740 /* LOTAnimationView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTAnimationView.h; sourceTree = ""; }; + 891DD5D2A60C077B85E9FCA84C18EE50 /* LOTPathAnimator.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTPathAnimator.h; sourceTree = ""; }; + 8A199E5D932514BB84B2CE010F3713CB /* LOTAnimatorNode.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = LOTAnimatorNode.m; sourceTree = ""; }; + 8A6EC5B13B17F7EC7B827CCC81DD6D59 /* LOTShapeStar.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTShapeStar.h; sourceTree = ""; }; 8D6D246FF2E46CE46B6F9453A989B292 /* Pods-Lottie-Example-resources.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-Lottie-Example-resources.sh"; sourceTree = ""; }; 8DE920DB509B09F953A5AC49A25A0138 /* Pods-lottie-ios_Tests.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; path = "Pods-lottie-ios_Tests.modulemap"; sourceTree = ""; }; 8F9FC62FF143AB6667CDD8163FCFDE1C /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.12.sdk/System/Library/Frameworks/Cocoa.framework; sourceTree = DEVELOPER_DIR; }; 90EF56A40FDBFDD04B5EB248A2D1C35C /* Pods-lottie-ios_Tests-resources.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-lottie-ios_Tests-resources.sh"; sourceTree = ""; }; + 9121F8C30F38B6B3F922266AEFF60FC0 /* LOTCircleAnimator.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = LOTCircleAnimator.m; sourceTree = ""; }; 92739E3C4C309D0CE7610B1348E7BF12 /* Pods-Lottie Viewer-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-Lottie Viewer-acknowledgements.markdown"; sourceTree = ""; }; 93361AC71C1E15FE77A86A3A784E84B0 /* Pods-lottie-ios_Tests-frameworks.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-lottie-ios_Tests-frameworks.sh"; sourceTree = ""; }; 937CB982BF7625A942908DCE0D0B45FB /* Lottie.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = Lottie.framework; path = "lottie-ios-OSX.framework"; sourceTree = BUILT_PRODUCTS_DIR; }; 93A4A3777CF96A4AAC1D13BA6DCCEA73 /* Podfile */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; lastKnownFileType = text; name = Podfile; path = ../Podfile; sourceTree = SOURCE_ROOT; xcLanguageSpecificationIdentifier = xcode.lang.ruby; }; + 93CDC8E7E4755289FBCA32811B5A28E4 /* Lottie.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = Lottie.h; sourceTree = ""; }; 957779C8BD629DE80F8E678BC2E2E54A /* Pods-Lottie-Example-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-Lottie-Example-umbrella.h"; sourceTree = ""; }; 957CDEEF051F9285513835BC0A9E2DD8 /* Pods-Lottie-Example-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-Lottie-Example-acknowledgements.plist"; sourceTree = ""; }; - 96C32584B6FCC9133BDAC268ADA1C133 /* LOTValueInterpolator.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTValueInterpolator.h; sourceTree = ""; }; + 9582A5D2F9520C1CC62EAF342EBB7BBA /* LOTShapePath.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTShapePath.h; sourceTree = ""; }; 97149B27FC504CA715F1A3D792D28F99 /* Pods-Lottie Viewer-frameworks.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-Lottie Viewer-frameworks.sh"; sourceTree = ""; }; + 981A7F32888CC43622C4C6E1A41EA449 /* LOTCircleAnimator.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTCircleAnimator.h; sourceTree = ""; }; 9AE28354BEE8C3C41E6AFE2DFC2E018D /* Pods-Lottie Viewer-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-Lottie Viewer-umbrella.h"; sourceTree = ""; }; - 9B6923575F8A5D34B244D82AEE41C3F6 /* LOTRenderNode.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTRenderNode.h; sourceTree = ""; }; - 9DCDDA899EEFBA305F1468F251D2F617 /* LOTCircleAnimator.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = LOTCircleAnimator.m; sourceTree = ""; }; - 9EA83D1C50D183A2FB07BBEB1B9D948F /* LOTColorInterpolator.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = LOTColorInterpolator.m; sourceTree = ""; }; - 9EFF1F328A3093B9807BE52930AD0D53 /* LOTShapeTransform.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = LOTShapeTransform.m; sourceTree = ""; }; - A0DFFD5220DC4CDACD93E46EB55A1F92 /* LOTCompositionContainer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTCompositionContainer.h; sourceTree = ""; }; - A13285A000D2951144B0BD24953D0E7E /* UIColor.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = UIColor.h; sourceTree = ""; }; - A3076BBC1E5633342EB6DC328972318B /* LOTBezierData.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = LOTBezierData.m; sourceTree = ""; }; - A39BDC8A9726CAF24D70EE23BB5BD1FE /* LOTAsset.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTAsset.h; sourceTree = ""; }; - A48CC90FA6A3CD3F89DB0144907532E2 /* LOTSizeInterpolator.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = LOTSizeInterpolator.m; sourceTree = ""; }; - A503EF472B37FAEC8C7B7A02EB48EAD0 /* LOTAnimatedSwitch.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTAnimatedSwitch.h; sourceTree = ""; }; - A70EA4E2038B16F19EF5A99D144B3273 /* LOTPlatformCompat.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTPlatformCompat.h; sourceTree = ""; }; - A83C74E1BE1843229C1EAC13B0DA0245 /* LOTRenderGroup.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = LOTRenderGroup.m; sourceTree = ""; }; - A9B2C2F7B5FF9CBF0156C2A393E74EC7 /* LOTAnimationView_Internal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTAnimationView_Internal.h; sourceTree = ""; }; - AF175CC26A097490ED6F811DB044BFD9 /* LOTShapeGradientFill.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTShapeGradientFill.h; sourceTree = ""; }; + 9B56F1E5281EF1C7D517C356ABDB0E5E /* CALayer+Compat.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "CALayer+Compat.m"; sourceTree = ""; }; + 9C97B8831F5FDF75284CD9F433A2B8F7 /* LOTNumberInterpolator.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTNumberInterpolator.h; sourceTree = ""; }; + 9E5993DF4D520DB1CE9D9DC7A081100D /* LOTCacheProvider.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTCacheProvider.h; sourceTree = ""; }; + 9EFECFAB1F0290E6A9BA90F5513273EA /* LOTAnimatorNode.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTAnimatorNode.h; sourceTree = ""; }; + 9FA966FC6903715F4F17D904CCCA54A4 /* LOTRenderNode.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTRenderNode.h; sourceTree = ""; }; + A122904155EAAC1CF9A88AC054FD2D69 /* LOTAnimatedSwitch.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTAnimatedSwitch.h; sourceTree = ""; }; + A1C00F0E74B77AE86CA7D7377D83B46A /* LOTShapeCircle.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTShapeCircle.h; sourceTree = ""; }; + A202CACFB83935506D990DA56B7E021B /* LOTValueInterpolator.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTValueInterpolator.h; sourceTree = ""; }; + A3307462A6C8C5FED10A9F16E752B24A /* LOTPolygonAnimator.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = LOTPolygonAnimator.m; sourceTree = ""; }; + A38530742CB69DD4770852828DD9A88A /* LOTPointInterpolator.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTPointInterpolator.h; sourceTree = ""; }; + A4DDD27C9DC70FEB86BA92158ED0DCAE /* UIColor+Expanded.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "UIColor+Expanded.h"; sourceTree = ""; }; + A51AFC17F0E6E2A6C99E481475601F3B /* LOTStrokeRenderer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = LOTStrokeRenderer.m; sourceTree = ""; }; + A6EA7077BFF4E93DCC2D2DB02718FE11 /* LOTLayerGroup.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTLayerGroup.h; sourceTree = ""; }; + A7BDA7CF04F19101FCBAB905B11E121C /* LOTBezierData.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTBezierData.h; sourceTree = ""; }; + A820A48AB0D547858DF28B0E9655F394 /* LOTRenderGroup.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTRenderGroup.h; sourceTree = ""; }; + A9D29A71E99723F7CE4CEF8B9A8D4C23 /* LOTRepeaterRenderer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTRepeaterRenderer.h; sourceTree = ""; }; + A9D79B6C91D3C1B0A2044C71F6454E61 /* LOTAnimationTransitionController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = LOTAnimationTransitionController.m; sourceTree = ""; }; + AAA938B623E2B97CB7E3033A55310ED0 /* LOTMask.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = LOTMask.m; sourceTree = ""; }; + AE1A396186B488C8424B3EED6B847BF4 /* LOTAnimatedControl.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTAnimatedControl.h; sourceTree = ""; }; AF2DE7A29FB4261F8DF6B5D2E56A7759 /* Pods-Lottie Viewer.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-Lottie Viewer.debug.xcconfig"; sourceTree = ""; }; - AF55B5448A81359F1A814270B3666679 /* LOTTrimPathNode.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = LOTTrimPathNode.m; sourceTree = ""; }; - B087CA2D09A4887C49F464890E7A177E /* LOTAnimationView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTAnimationView.h; sourceTree = ""; }; - B4A18DDFFFD13D69C09000FFD121ECDE /* LOTRoundedRectAnimator.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = LOTRoundedRectAnimator.m; sourceTree = ""; }; - B54D672768B8B9D47FEC96B75323ABAB /* LOTAssetGroup.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTAssetGroup.h; sourceTree = ""; }; - B6041F9522F368C2926E52A7CBBBFD48 /* LOTHelpers.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTHelpers.h; sourceTree = ""; }; - B6E3985D0D99F02F56FBC928EC0E7223 /* LOTAnimatedControl.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTAnimatedControl.h; sourceTree = ""; }; + B15D464E8BA5683658A7A69691796C20 /* LOTPolygonAnimator.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTPolygonAnimator.h; sourceTree = ""; }; + B261320B19BCDE5BECAEC81C6251E8AD /* LOTMaskContainer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = LOTMaskContainer.m; sourceTree = ""; }; + B5A29569D371C0A9530FBAF5463FB1B2 /* NSValue+Compat.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "NSValue+Compat.m"; sourceTree = ""; }; + B9FC8FCBF300DFCD6B130C2D70DFB5B8 /* LOTTransformInterpolator.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = LOTTransformInterpolator.m; sourceTree = ""; }; + BA727AFCBF3E057F952AA493DA423361 /* LOTKeypath.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = LOTKeypath.m; sourceTree = ""; }; + BA841F3D7281B18F353CFC76B67729DE /* LOTComposition.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTComposition.h; sourceTree = ""; }; BBBFB35C75DBB9AACD3D259D46474425 /* Lottie.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = Lottie.framework; path = "lottie-ios-iOS.framework"; sourceTree = BUILT_PRODUCTS_DIR; }; - C35369D2190E7D0E03D5F0C9B66E3840 /* LOTLayerContainer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTLayerContainer.h; sourceTree = ""; }; - C388AA1307273BB39C929D94248DE0AF /* LOTShapeTrimPath.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = LOTShapeTrimPath.m; sourceTree = ""; }; - C4099F44D1ECCF4DB09FC399C80EB167 /* LOTGradientFillRender.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = LOTGradientFillRender.m; sourceTree = ""; }; - C437F32E715B1F2CAF96458B882481DF /* LOTMaskContainer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTMaskContainer.h; sourceTree = ""; }; - C43F696E5119C1A62FC708886D861CFD /* LOTAnimatedSwitch.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = LOTAnimatedSwitch.m; sourceTree = ""; }; - C492C77CFABF205B4C791EAFA5DA8931 /* LOTAnimationTransitionController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = LOTAnimationTransitionController.m; sourceTree = ""; }; - C6794BE326B903E370B9B60F81621424 /* LOTAnimationCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = LOTAnimationCache.m; sourceTree = ""; }; + BF11495E4589E92A2AC50DF80791FA55 /* LOTAnimationView_Internal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTAnimationView_Internal.h; sourceTree = ""; }; + BF608B78F94F2F6159A526758E25EFCF /* LOTLayer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = LOTLayer.m; sourceTree = ""; }; + C32960F4E2AB2E8060FF8D1D99EC982C /* LOTComposition.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = LOTComposition.m; sourceTree = ""; }; + C3A33578A6371962FBB57B72B7439B73 /* UIColor+Expanded.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "UIColor+Expanded.m"; sourceTree = ""; }; + C42115F3B2945D84380F9E656A1B9F48 /* LOTPolystarAnimator.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = LOTPolystarAnimator.m; sourceTree = ""; }; + C50301FDF7BA8E27D2F58240E54D1286 /* LOTPlatformCompat.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTPlatformCompat.h; sourceTree = ""; }; + C67C9707D2EA2A3734B3A289F5E483B0 /* LOTShapeStroke.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = LOTShapeStroke.m; sourceTree = ""; }; + C7BC534D86AC2359352FC6671F83BDC7 /* LOTCompositionContainer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = LOTCompositionContainer.m; sourceTree = ""; }; + C85CC443D8EE7944453BEBA6CE2FD7F9 /* LOTNumberInterpolator.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = LOTNumberInterpolator.m; sourceTree = ""; }; CA13E2F72B2A84E8D774F18DD936CA54 /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS10.0.sdk/System/Library/Frameworks/UIKit.framework; sourceTree = DEVELOPER_DIR; }; + CB76900FD85771E2DC16A26864657F3D /* LOTAnimationTransitionController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTAnimationTransitionController.h; sourceTree = ""; }; CF4BF66849AF08D9851F6F39E0898EAC /* Pods-Lottie Viewer.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; path = "Pods-Lottie Viewer.modulemap"; sourceTree = ""; }; - D0D9BFD66BC6F81E4A9602BC4EE57D8A /* LOTAsset.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = LOTAsset.m; sourceTree = ""; }; - D687D64D0C9A938635B9C9D9F30AE281 /* LOTBezierData.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTBezierData.h; sourceTree = ""; }; - D8D4D2612BAB4E96A1EFC2C1A379B795 /* LOTShapeCircle.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = LOTShapeCircle.m; sourceTree = ""; }; - D95D8467E79916FBC12B8B32D2278D9F /* LOTBezierPath.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTBezierPath.h; sourceTree = ""; }; - D96D088283758BBDC60716E7A54335B7 /* LOTSizeInterpolator.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTSizeInterpolator.h; sourceTree = ""; }; - DB7F41DB9747216ADF000810800EEB15 /* LOTPolygonAnimator.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTPolygonAnimator.h; sourceTree = ""; }; - DCA786C9E19C1EC03BC9679E27A6F20F /* LOTComposition.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTComposition.h; sourceTree = ""; }; - DE70957692229A5521E1209B34FD6341 /* LOTRadialGradientLayer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = LOTRadialGradientLayer.m; sourceTree = ""; }; + D0A5736FB11B4EBBBA591FAD3A65333D /* CGGeometry+LOTAdditions.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "CGGeometry+LOTAdditions.m"; sourceTree = ""; }; + D27D22931112993E55C05269E53E6735 /* LOTRadialGradientLayer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTRadialGradientLayer.h; sourceTree = ""; }; + D7424BD049D3E38D852E331CB92F69BF /* LOTTrimPathNode.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTTrimPathNode.h; sourceTree = ""; }; + D8A357F62DB6E2FEFA3581128A08EB2A /* LOTGradientFillRender.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = LOTGradientFillRender.m; sourceTree = ""; }; + DA5257757C925993A2F45291CE0EBF80 /* LOTModels.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTModels.h; sourceTree = ""; }; + DACE6FE000D87D2ED388D53C9A09105E /* LOTRenderGroup.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = LOTRenderGroup.m; sourceTree = ""; }; + DC5DC300A9713A2CF620ED314317C11F /* LOTShapeFill.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTShapeFill.h; sourceTree = ""; }; + DD4FD4AD47A15DA21BE7004345E59FF1 /* LOTFillRenderer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = LOTFillRenderer.m; sourceTree = ""; }; DFB9B48CA5FB64F65C9333F75A778DD2 /* CoreVideo.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreVideo.framework; path = Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.12.sdk/System/Library/Frameworks/CoreVideo.framework; sourceTree = DEVELOPER_DIR; }; - E0164FC244194F75006E20FE48527D07 /* LOTAnimatedControl.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = LOTAnimatedControl.m; sourceTree = ""; }; - E04BB719CBA0390A9D86A94BDEA57CC1 /* LOTPointInterpolator.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = LOTPointInterpolator.m; sourceTree = ""; }; - E54B3DC1B45E6FFED2DE45ED43DBA4C5 /* LOTCacheProvider.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTCacheProvider.h; sourceTree = ""; }; + E4C883E96A6E2DB3D0D97B13E4150C01 /* LOTShapeCircle.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = LOTShapeCircle.m; sourceTree = ""; }; E578078ACB6D731DF0DEA72A20BF04B7 /* Pods-Lottie-Example-frameworks.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-Lottie-Example-frameworks.sh"; sourceTree = ""; }; - E6C87A40CDE5E282FACD344EEF9BCBE8 /* LOTShapeTransform.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTShapeTransform.h; sourceTree = ""; }; + E6353AC1F176558980AE9E1C2840BFFE /* LOTRenderNode.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = LOTRenderNode.m; sourceTree = ""; }; E6CC126717DE752766A8C58E618A6BA1 /* Pods-Lottie Viewer-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-Lottie Viewer-dummy.m"; sourceTree = ""; }; - E755B311E223826B3558EEB629C0287D /* LOTComposition.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = LOTComposition.m; sourceTree = ""; }; - E75A43CAEC39661AAF5A0D8FE4EE6DCC /* LOTShapeStar.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = LOTShapeStar.m; sourceTree = ""; }; E7F9BF29D1BB924B7546DF44AF6619AF /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - E977A18230CBF470460C58037A437B84 /* LOTTransformInterpolator.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = LOTTransformInterpolator.m; sourceTree = ""; }; - E9C5D93102924F61B1666731B13299C8 /* LOTTransformInterpolator.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTTransformInterpolator.h; sourceTree = ""; }; EAA55B722ECBCD50F62BBFB43D59B4B2 /* lottie-ios-iOS-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "lottie-ios-iOS-prefix.pch"; path = "../lottie-ios-iOS/lottie-ios-iOS-prefix.pch"; sourceTree = ""; }; - EBF64DB27BB35CA09D041C9D2F9CEC4E /* LOTArrayInterpolator.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTArrayInterpolator.h; sourceTree = ""; }; - EC357B89D82B770D72FCBA6E21488805 /* CALayer+Compat.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "CALayer+Compat.m"; sourceTree = ""; }; - ED2CD43EDD5AB0839147E1B17C971EEA /* CGGeometry+LOTAdditions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "CGGeometry+LOTAdditions.h"; sourceTree = ""; }; - EEE3A349FAA8F7B5DE1167968D29A4DE /* LOTNumberInterpolator.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = LOTNumberInterpolator.m; sourceTree = ""; }; - EF76A4F44D3EC0D867DD4DE52895BF18 /* LOTModels.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTModels.h; sourceTree = ""; }; + EDD0730A9EFC6BF546605EC950466378 /* LOTShapeTransform.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTShapeTransform.h; sourceTree = ""; }; + EF928FD6B208204FBD2A31FBD3FCA15B /* LOTArrayInterpolator.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = LOTArrayInterpolator.m; sourceTree = ""; }; EFE7F290BE29B5B38039D5BF5C4FB52E /* Pods-Lottie Viewer.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-Lottie Viewer.release.xcconfig"; sourceTree = ""; }; - F20E4E1B4E2532FB0310955D634DA69E /* NSValue+Compat.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "NSValue+Compat.h"; sourceTree = ""; }; - F33AD0B7CE0E660FB299E773A9F8F96D /* LOTLayerGroup.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTLayerGroup.h; sourceTree = ""; }; - F4DDEC0BF4954778BB020C2A3C4A37A0 /* LOTShapePath.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = LOTShapePath.m; sourceTree = ""; }; - F57D6A49BAAF8072A4DC91D40E0D1EAF /* LOTPointInterpolator.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTPointInterpolator.h; sourceTree = ""; }; - FA83154549FBF8250618D1CC7ED5B418 /* LOTLayer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTLayer.h; sourceTree = ""; }; - FAE123FFEA3FFA98D5492A4C7FBB5F2B /* LOTShapeStroke.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTShapeStroke.h; sourceTree = ""; }; + F04F28C155C4AA0B6C3866A9B7F945F9 /* LOTPointInterpolator.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = LOTPointInterpolator.m; sourceTree = ""; }; + F17767C205B354B5CAB2481BAB5F9DA0 /* LOTBezierPath.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = LOTBezierPath.m; sourceTree = ""; }; + F27E360BB2A6D9499651CCB95A3E833D /* LOTShapeFill.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = LOTShapeFill.m; sourceTree = ""; }; + F2A2B345BCD59E1325C15AB515C91DC8 /* LOTSizeInterpolator.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTSizeInterpolator.h; sourceTree = ""; }; + F5B5431F0457FB3A977D48753E1588F9 /* LOTAsset.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = LOTAsset.m; sourceTree = ""; }; + F77F168056C99E1AE6C4C6BBCFC7D9CA /* LOTValueInterpolator.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = LOTValueInterpolator.m; sourceTree = ""; }; + F975602C737030EF0919EE751E8E24DB /* CALayer+Compat.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "CALayer+Compat.h"; sourceTree = ""; }; + F97ABD273FEDF707A881A3A4D86A8BAC /* LOTHelpers.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTHelpers.h; sourceTree = ""; }; + FB18CA5A449F638545857EFBFDB896FB /* LOTLayerContainer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = LOTLayerContainer.m; sourceTree = ""; }; FCD61B30751008C76B625BB6423F54AC /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + FEB990F12F16E85B463D89CCCDEB25D0 /* LOTAnimatedSwitch.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = LOTAnimatedSwitch.m; sourceTree = ""; }; + FF48818E5315026FD6DC14944C835345 /* LOTValueCallback.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = LOTValueCallback.m; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ - 35238516DA8B4E1DE968CC94C1A4BD2C /* Frameworks */ = { + 1AD5652CABEE94440C2E3BAFBF2729DE /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 15FC70FD083E40FAD0F5944D41DD88BE /* Foundation.framework in Frameworks */, + 6F374D492FEAFD2367F73372CA4B409D /* Foundation.framework in Frameworks */, + 8B9694670F681223044F1511D3568224 /* UIKit.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - 5486ACCEB44DA02681B22834529405BA /* Frameworks */ = { + 35238516DA8B4E1DE968CC94C1A4BD2C /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 7F80A4DDB120F7AC6AAD2079037F5A28 /* AppKit.framework in Frameworks */, - AC342BBD83EFC640054FCE7A41092A58 /* Cocoa.framework in Frameworks */, - A053EF8D74FC9348579B5AADFD9D38E6 /* CoreVideo.framework in Frameworks */, + 15FC70FD083E40FAD0F5944D41DD88BE /* Foundation.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - 5C1C680CAA5E0DDC1D70AE67A2622954 /* Frameworks */ = { + 9400EE0ECE003B3ACEB89B6D5B7AB442 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - DD6471B94F03758B2F98A20FE2E44872 /* Foundation.framework in Frameworks */, - 22D9C89FF7B853E3903EEC9A46790F68 /* UIKit.framework in Frameworks */, + B8BCA47B1A77DF95917998D9085EFAA9 /* Foundation.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - 9400EE0ECE003B3ACEB89B6D5B7AB442 /* Frameworks */ = { + CEAB9A0FD511F5B6F040E5938C820A12 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - B8BCA47B1A77DF95917998D9085EFAA9 /* Foundation.framework in Frameworks */, + 85F796CD33CB23088638090D7AA2DECA /* Cocoa.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - CEAB9A0FD511F5B6F040E5938C820A12 /* Frameworks */ = { + EF330E76466BF196820B97C9CD456B32 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 85F796CD33CB23088638090D7AA2DECA /* Cocoa.framework in Frameworks */, + 6BA8EB4ABBA09675FE750C5E62934CC4 /* AppKit.framework in Frameworks */, + 4775B3ADCEF6C547581132729EB1DB09 /* Cocoa.framework in Frameworks */, + 2AB487DE40461D624AF3C0995C9C83A5 /* CoreVideo.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 01E5CE4CF4AC50627EFB7722235D2982 /* PublicHeaders */ = { + 0BC603FEF2CAD733E554E6117D35D13D /* Private */ = { isa = PBXGroup; children = ( - B6E3985D0D99F02F56FBC928EC0E7223 /* LOTAnimatedControl.h */, - A503EF472B37FAEC8C7B7A02EB48EAD0 /* LOTAnimatedSwitch.h */, - 6398418947AEE1FF891887426F2CB24F /* LOTAnimationCache.h */, - 786D7137457B872697EDE5C057C222E9 /* LOTAnimationTransitionController.h */, - B087CA2D09A4887C49F464890E7A177E /* LOTAnimationView.h */, - 46D9F748EFA7C7149612B4AC164C2CAA /* LOTAnimationView_Compat.h */, - E54B3DC1B45E6FFED2DE45ED43DBA4C5 /* LOTCacheProvider.h */, - DCA786C9E19C1EC03BC9679E27A6F20F /* LOTComposition.h */, - 7CF1D3E47D4044924E21C0FCAB9095D0 /* Lottie.h */, + 5386A88237C7DCCDD62F5F1758E0A34A /* LOTAnimatedControl.m */, + FEB990F12F16E85B463D89CCCDEB25D0 /* LOTAnimatedSwitch.m */, + 7D6D543892348908F509AAE5109E56AB /* LOTAnimationCache.m */, + A9D79B6C91D3C1B0A2044C71F6454E61 /* LOTAnimationTransitionController.m */, + 0A9BD8C23179DADD5C4FF9E7D187B043 /* LOTAnimationView.m */, + BF11495E4589E92A2AC50DF80791FA55 /* LOTAnimationView_Internal.h */, + 54757B02899CE4435B14EA17C1ED85B1 /* LOTCacheProvider.m */, + C32960F4E2AB2E8060FF8D1D99EC982C /* LOTComposition.m */, + BA727AFCBF3E057F952AA493DA423361 /* LOTKeypath.m */, + FF48818E5315026FD6DC14944C835345 /* LOTValueCallback.m */, ); - name = PublicHeaders; - path = PublicHeaders; + name = Private; + path = Private; sourceTree = ""; }; 26342C9887425AAD969E2A28B5DBF666 /* iOS */ = { @@ -519,73 +532,6 @@ name = iOS; sourceTree = ""; }; - 2699BC8BDE176787CDD847C132523CDC /* Classes */ = { - isa = PBXGroup; - children = ( - C7AE824AA13952F314D0DF2BF757045E /* AnimatableLayers */, - DCF817C4517380E99535EA29247F5342 /* AnimatableProperties */, - 54FBEA3B6BD4D7145EE4EBAA01F33AA9 /* Extensions */, - 5AAF2F27357719326520D998BB77D95D /* MacCompatability */, - 3A7F5921BC932096422CA0A61C13A70A /* Models */, - 97C52EBD6E8A64B33FBD0FAC780E9C62 /* Private */, - 01E5CE4CF4AC50627EFB7722235D2982 /* PublicHeaders */, - 9AA3DDB6D622937D8A3CA873FFE8C496 /* RenderSystem */, - ); - name = Classes; - path = Classes; - sourceTree = ""; - }; - 3A7F5921BC932096422CA0A61C13A70A /* Models */ = { - isa = PBXGroup; - children = ( - A39BDC8A9726CAF24D70EE23BB5BD1FE /* LOTAsset.h */, - D0D9BFD66BC6F81E4A9602BC4EE57D8A /* LOTAsset.m */, - B54D672768B8B9D47FEC96B75323ABAB /* LOTAssetGroup.h */, - 3F74EB15D58D3270AEB2060CFE7570CC /* LOTAssetGroup.m */, - FA83154549FBF8250618D1CC7ED5B418 /* LOTLayer.h */, - 2984C6FFF4ACA3196271E2F1976ADA69 /* LOTLayer.m */, - F33AD0B7CE0E660FB299E773A9F8F96D /* LOTLayerGroup.h */, - 2147F7AB75635C2E30C7748741753CEA /* LOTLayerGroup.m */, - 8BF5C0DCDD5501651D216815D08406BA /* LOTMask.h */, - 60363DC5D5E8F3C2C28A8715DA390170 /* LOTMask.m */, - EF76A4F44D3EC0D867DD4DE52895BF18 /* LOTModels.h */, - 2CD964EAAA18892EF6258722B95F951B /* LOTShapeCircle.h */, - D8D4D2612BAB4E96A1EFC2C1A379B795 /* LOTShapeCircle.m */, - 8B7CB99752B9512D6263AF2DF763BAF2 /* LOTShapeFill.h */, - 8A490E1B7F6AE8F98A80AE1B2E5D034C /* LOTShapeFill.m */, - AF175CC26A097490ED6F811DB044BFD9 /* LOTShapeGradientFill.h */, - 272D6A3046E0CACC4BF991956B10036C /* LOTShapeGradientFill.m */, - 8CB1CC0D11409074C70E4C609F1448EE /* LOTShapeGroup.h */, - 42CB682861D71E87DD35419F2BCF9D31 /* LOTShapeGroup.m */, - 405A59319C59F8B5A56AA4A3248319CB /* LOTShapePath.h */, - F4DDEC0BF4954778BB020C2A3C4A37A0 /* LOTShapePath.m */, - 3CA45971085CDBB78AAE42054A76E077 /* LOTShapeRectangle.h */, - 4AEFD97349588D80E639AE803E87AB1E /* LOTShapeRectangle.m */, - 5F3B72A8E2380FF41995F178E51B5B94 /* LOTShapeRepeater.h */, - 61A745957B3F1CA9CD1FEE1F8C951BA1 /* LOTShapeRepeater.m */, - 7C79E6BF7DA299701FC84C9F393E47F3 /* LOTShapeStar.h */, - E75A43CAEC39661AAF5A0D8FE4EE6DCC /* LOTShapeStar.m */, - FAE123FFEA3FFA98D5492A4C7FBB5F2B /* LOTShapeStroke.h */, - 5E38775E835996063AD3975DB0D0685F /* LOTShapeStroke.m */, - E6C87A40CDE5E282FACD344EEF9BCBE8 /* LOTShapeTransform.h */, - 9EFF1F328A3093B9807BE52930AD0D53 /* LOTShapeTransform.m */, - 37CF631AD94762958323013D561D0562 /* LOTShapeTrimPath.h */, - C388AA1307273BB39C929D94248DE0AF /* LOTShapeTrimPath.m */, - ); - name = Models; - path = Models; - sourceTree = ""; - }; - 4490644184A4571A675166221451041B /* ManipulatorNodes */ = { - isa = PBXGroup; - children = ( - 4693DA6769DE389ACDF653903848C95B /* LOTTrimPathNode.h */, - AF55B5448A81359F1A814270B3666679 /* LOTTrimPathNode.m */, - ); - name = ManipulatorNodes; - path = ManipulatorNodes; - sourceTree = ""; - }; 45F23E6F821A6253AB54CCD8C58A5946 /* Support Files */ = { isa = PBXGroup; children = ( @@ -606,51 +552,52 @@ path = "Example/Pods/Target Support Files/lottie-ios-OSX"; sourceTree = ""; }; - 4D81CC1C28C5AA970A1B8189399BD56A /* RenderNodes */ = { + 551C225B0CA80482F1ECBB08CC19D7E5 /* AnimatableProperties */ = { isa = PBXGroup; children = ( - 0AAE803FD23C4072276F802275CC75A2 /* LOTFillRenderer.h */, - 46614A552F667CC55E45A19F9B0978D1 /* LOTFillRenderer.m */, - 135B555C252D40EFA4CF36C8B6B91EBE /* LOTGradientFillRender.h */, - C4099F44D1ECCF4DB09FC399C80EB167 /* LOTGradientFillRender.m */, - 428DD5AEB7E323676A510C146F1094C6 /* LOTRenderGroup.h */, - A83C74E1BE1843229C1EAC13B0DA0245 /* LOTRenderGroup.m */, - 4A308318BDA8CEC76246D104E31729F5 /* LOTRepeaterRenderer.h */, - 0468A1630D67266809023D1E0248D7B5 /* LOTRepeaterRenderer.m */, - 56A4BF06F98D77ADB3B462913C16217B /* LOTStrokeRenderer.h */, - 6DBF60E20E0F3964D13D808F657EC3D0 /* LOTStrokeRenderer.m */, + A7BDA7CF04F19101FCBAB905B11E121C /* LOTBezierData.h */, + 4480558105469D51379A0EA86124F9A9 /* LOTBezierData.m */, + 10B78B281BE30EE85830187B033E4782 /* LOTKeyframe.h */, + 34AF815C52B27A7782E3842FC8BC1CCB /* LOTKeyframe.m */, ); - name = RenderNodes; - path = RenderNodes; + name = AnimatableProperties; + path = AnimatableProperties; sourceTree = ""; }; - 54FBEA3B6BD4D7145EE4EBAA01F33AA9 /* Extensions */ = { + 5538B79F6A649EA96D5E70E7F24C6E8D /* InterpolatorNodes */ = { isa = PBXGroup; children = ( - ED2CD43EDD5AB0839147E1B17C971EEA /* CGGeometry+LOTAdditions.h */, - 51FC9391B6C5C85F1F7B1FDA2CC8FDFE /* CGGeometry+LOTAdditions.m */, - D95D8467E79916FBC12B8B32D2278D9F /* LOTBezierPath.h */, - 5DA174E536B7A8FF5B4F181BCE1D2C56 /* LOTBezierPath.m */, - B6041F9522F368C2926E52A7CBBBFD48 /* LOTHelpers.h */, - 086A58805232A189CDBDA97740A7F97B /* LOTRadialGradientLayer.h */, - DE70957692229A5521E1209B34FD6341 /* LOTRadialGradientLayer.m */, - 659E43C54C18D4FD539A4E332F7790F5 /* UIColor+Expanded.h */, - 40C41F2E48B907C6D99813DF7A9C2A31 /* UIColor+Expanded.m */, + 2CBA32868BFFDD5BAFE59B416B31D38F /* LOTArrayInterpolator.h */, + EF928FD6B208204FBD2A31FBD3FCA15B /* LOTArrayInterpolator.m */, + 5CD1545364AD1612AAE8C24E0B02B768 /* LOTColorInterpolator.h */, + 593CCF481C36ACB023B63EF6EC81C50E /* LOTColorInterpolator.m */, + 9C97B8831F5FDF75284CD9F433A2B8F7 /* LOTNumberInterpolator.h */, + C85CC443D8EE7944453BEBA6CE2FD7F9 /* LOTNumberInterpolator.m */, + 35F58BD726980DFBEB409F4C8E7EF7DD /* LOTPathInterpolator.h */, + 2E71C3833821DFA2123490CE5786AED4 /* LOTPathInterpolator.m */, + A38530742CB69DD4770852828DD9A88A /* LOTPointInterpolator.h */, + F04F28C155C4AA0B6C3866A9B7F945F9 /* LOTPointInterpolator.m */, + F2A2B345BCD59E1325C15AB515C91DC8 /* LOTSizeInterpolator.h */, + 76E079C7802C56C5C7C985D44B5E4084 /* LOTSizeInterpolator.m */, + 61D63E2A019BF14C7A1B2CB86A19DA9F /* LOTTransformInterpolator.h */, + B9FC8FCBF300DFCD6B130C2D70DFB5B8 /* LOTTransformInterpolator.m */, + A202CACFB83935506D990DA56B7E021B /* LOTValueInterpolator.h */, + F77F168056C99E1AE6C4C6BBCFC7D9CA /* LOTValueInterpolator.m */, ); - name = Extensions; - path = Extensions; + name = InterpolatorNodes; + path = InterpolatorNodes; sourceTree = ""; }; - 5AAF2F27357719326520D998BB77D95D /* MacCompatability */ = { + 56844799A837667E222DD99FFABF0994 /* MacCompatability */ = { isa = PBXGroup; children = ( - 227843D236B655642C7E3C469ED005F1 /* CALayer+Compat.h */, - EC357B89D82B770D72FCBA6E21488805 /* CALayer+Compat.m */, - A70EA4E2038B16F19EF5A99D144B3273 /* LOTPlatformCompat.h */, - F20E4E1B4E2532FB0310955D634DA69E /* NSValue+Compat.h */, - 5619C860054C32A3C1A3F063CCAA986A /* NSValue+Compat.m */, - A13285A000D2951144B0BD24953D0E7E /* UIColor.h */, - 28990FC90E08798A110AFD134EAD0190 /* UIColor.m */, + F975602C737030EF0919EE751E8E24DB /* CALayer+Compat.h */, + 9B56F1E5281EF1C7D517C356ABDB0E5E /* CALayer+Compat.m */, + C50301FDF7BA8E27D2F58240E54D1286 /* LOTPlatformCompat.h */, + 1098D39EEB50537E5D1874166FA26426 /* NSValue+Compat.h */, + B5A29569D371C0A9530FBAF5463FB1B2 /* NSValue+Compat.m */, + 345A665333D59935D8DCCAFCE457762D /* UIColor.h */, + 1B4C04705594EE8AEF41CC582DCCF4AA /* UIColor.m */, ); name = MacCompatability; path = MacCompatability; @@ -685,6 +632,35 @@ ); sourceTree = ""; }; + 8AB9E3B8805FB4725F37F02AE2F68C2D /* ManipulatorNodes */ = { + isa = PBXGroup; + children = ( + D7424BD049D3E38D852E331CB92F69BF /* LOTTrimPathNode.h */, + 5638F0FF469208491F432907994C7502 /* LOTTrimPathNode.m */, + ); + name = ManipulatorNodes; + path = ManipulatorNodes; + sourceTree = ""; + }; + 8ADD50B589C3DA2D0950699423011C51 /* PublicHeaders */ = { + isa = PBXGroup; + children = ( + AE1A396186B488C8424B3EED6B847BF4 /* LOTAnimatedControl.h */, + A122904155EAAC1CF9A88AC054FD2D69 /* LOTAnimatedSwitch.h */, + 4E74F5FB415EC7EA39AC029FA525577B /* LOTAnimationCache.h */, + CB76900FD85771E2DC16A26864657F3D /* LOTAnimationTransitionController.h */, + 8341FEA310739FC825ADA6DEDC31E740 /* LOTAnimationView.h */, + 5E3AC90F32703CE393FBB9199E8E6900 /* LOTAnimationView_Compat.h */, + 9E5993DF4D520DB1CE9D9DC7A081100D /* LOTCacheProvider.h */, + BA841F3D7281B18F353CFC76B67729DE /* LOTComposition.h */, + 5F2FC4086F209D0B9CA768C11A8E5518 /* LOTKeypath.h */, + 93CDC8E7E4755289FBCA32811B5A28E4 /* Lottie.h */, + 2A74ED85DE78AA3150EACE898881F461 /* LOTValueCallback.h */, + ); + name = PublicHeaders; + path = PublicHeaders; + sourceTree = ""; + }; 8E2258F31D65A13EFD2AC50E431AFDF1 /* Pods-lottie-ios_Tests */ = { isa = PBXGroup; children = ( @@ -711,33 +687,17 @@ name = "Development Pods"; sourceTree = ""; }; - 97C52EBD6E8A64B33FBD0FAC780E9C62 /* Private */ = { + A53D231A161AB540EE0EF4F7B1530EF9 /* RenderSystem */ = { isa = PBXGroup; children = ( - E0164FC244194F75006E20FE48527D07 /* LOTAnimatedControl.m */, - C43F696E5119C1A62FC708886D861CFD /* LOTAnimatedSwitch.m */, - C6794BE326B903E370B9B60F81621424 /* LOTAnimationCache.m */, - C492C77CFABF205B4C791EAFA5DA8931 /* LOTAnimationTransitionController.m */, - 8D3EF8864151AD375897EEEE0049265B /* LOTAnimationView.m */, - A9B2C2F7B5FF9CBF0156C2A393E74EC7 /* LOTAnimationView_Internal.h */, - 6E7AAD90809A5BE65838A5AF376F98AA /* LOTCacheProvider.m */, - E755B311E223826B3558EEB629C0287D /* LOTComposition.m */, - ); - name = Private; - path = Private; - sourceTree = ""; - }; - 9AA3DDB6D622937D8A3CA873FFE8C496 /* RenderSystem */ = { - isa = PBXGroup; - children = ( - 55E650C85AEA6D05D50287F5D07A6EB0 /* LOTAnimatorNode.h */, - 5E6DCE2446C4A632A3DEFF4E4D286993 /* LOTAnimatorNode.m */, - 9B6923575F8A5D34B244D82AEE41C3F6 /* LOTRenderNode.h */, - 7236E29E9520E96B96DA447A0F73D04A /* LOTRenderNode.m */, - EAC8A89E3CF653CE01960430938E5678 /* AnimatorNodes */, - C1081A8349DD62D4B019AC8778A6624D /* InterpolatorNodes */, - 4490644184A4571A675166221451041B /* ManipulatorNodes */, - 4D81CC1C28C5AA970A1B8189399BD56A /* RenderNodes */, + 9EFECFAB1F0290E6A9BA90F5513273EA /* LOTAnimatorNode.h */, + 8A199E5D932514BB84B2CE010F3713CB /* LOTAnimatorNode.m */, + 9FA966FC6903715F4F17D904CCCA54A4 /* LOTRenderNode.h */, + E6353AC1F176558980AE9E1C2840BFFE /* LOTRenderNode.m */, + EC8110043F5929FB95B8A594B0702EA6 /* AnimatorNodes */, + 5538B79F6A649EA96D5E70E7F24C6E8D /* InterpolatorNodes */, + 8AB9E3B8805FB4725F37F02AE2F68C2D /* ManipulatorNodes */, + D1B11FF1D675F40B17C21E885920B30C /* RenderNodes */, ); name = RenderSystem; path = RenderSystem; @@ -756,60 +716,58 @@ A619B21630D8FBCCD05871350496FD40 /* lottie-ios */ = { isa = PBXGroup; children = ( - 2699BC8BDE176787CDD847C132523CDC /* Classes */, + B9244E03359257386B49F695477E4A2E /* Classes */, ); name = "lottie-ios"; path = "lottie-ios"; sourceTree = ""; }; - C1081A8349DD62D4B019AC8778A6624D /* InterpolatorNodes */ = { + B9244E03359257386B49F695477E4A2E /* Classes */ = { isa = PBXGroup; children = ( - EBF64DB27BB35CA09D041C9D2F9CEC4E /* LOTArrayInterpolator.h */, - 876290A891B0E804E9010420CBFB2DF0 /* LOTArrayInterpolator.m */, - 23FA32C327A312DAAA9ED200805F76B7 /* LOTColorInterpolator.h */, - 9EA83D1C50D183A2FB07BBEB1B9D948F /* LOTColorInterpolator.m */, - 194F1B32D0624C138E12323981E4B3B3 /* LOTNumberInterpolator.h */, - EEE3A349FAA8F7B5DE1167968D29A4DE /* LOTNumberInterpolator.m */, - 82941F8BBD825D99E98F170139381C57 /* LOTPathInterpolator.h */, - 0221FBCD051E76A64256E6E1279A59A0 /* LOTPathInterpolator.m */, - F57D6A49BAAF8072A4DC91D40E0D1EAF /* LOTPointInterpolator.h */, - E04BB719CBA0390A9D86A94BDEA57CC1 /* LOTPointInterpolator.m */, - D96D088283758BBDC60716E7A54335B7 /* LOTSizeInterpolator.h */, - A48CC90FA6A3CD3F89DB0144907532E2 /* LOTSizeInterpolator.m */, - E9C5D93102924F61B1666731B13299C8 /* LOTTransformInterpolator.h */, - E977A18230CBF470460C58037A437B84 /* LOTTransformInterpolator.m */, - 96C32584B6FCC9133BDAC268ADA1C133 /* LOTValueInterpolator.h */, - 40AB914034285EFBF52E103FB005E657 /* LOTValueInterpolator.m */, + C69ACF07C1C6CCDDA58A8B9F4D3F3834 /* AnimatableLayers */, + 551C225B0CA80482F1ECBB08CC19D7E5 /* AnimatableProperties */, + DF7289A7033C512318C405BD34C8F612 /* Extensions */, + 56844799A837667E222DD99FFABF0994 /* MacCompatability */, + FFAB8E9FA872327A62ABF4AD1142A46A /* Models */, + 0BC603FEF2CAD733E554E6117D35D13D /* Private */, + 8ADD50B589C3DA2D0950699423011C51 /* PublicHeaders */, + A53D231A161AB540EE0EF4F7B1530EF9 /* RenderSystem */, ); - name = InterpolatorNodes; - path = InterpolatorNodes; + name = Classes; + path = Classes; sourceTree = ""; }; - C7AE824AA13952F314D0DF2BF757045E /* AnimatableLayers */ = { + C69ACF07C1C6CCDDA58A8B9F4D3F3834 /* AnimatableLayers */ = { isa = PBXGroup; children = ( - A0DFFD5220DC4CDACD93E46EB55A1F92 /* LOTCompositionContainer.h */, - 4BCF27BA792F612421FF59C04FA59850 /* LOTCompositionContainer.m */, - C35369D2190E7D0E03D5F0C9B66E3840 /* LOTLayerContainer.h */, - 5D8DAA2C3DCE843D862FC6B4C6892802 /* LOTLayerContainer.m */, - C437F32E715B1F2CAF96458B882481DF /* LOTMaskContainer.h */, - 6ABA14F23A54CFF8B2258DE667642BFD /* LOTMaskContainer.m */, + 7D873E9FCFE5C1F9619C1A10FEF4F195 /* LOTCompositionContainer.h */, + C7BC534D86AC2359352FC6671F83BDC7 /* LOTCompositionContainer.m */, + 3E1AF07A2708493FCD2CD125784B7141 /* LOTLayerContainer.h */, + FB18CA5A449F638545857EFBFDB896FB /* LOTLayerContainer.m */, + 5064887F8EAA1248C794BD8148E14A32 /* LOTMaskContainer.h */, + B261320B19BCDE5BECAEC81C6251E8AD /* LOTMaskContainer.m */, ); name = AnimatableLayers; path = AnimatableLayers; sourceTree = ""; }; - DCF817C4517380E99535EA29247F5342 /* AnimatableProperties */ = { + D1B11FF1D675F40B17C21E885920B30C /* RenderNodes */ = { isa = PBXGroup; children = ( - D687D64D0C9A938635B9C9D9F30AE281 /* LOTBezierData.h */, - A3076BBC1E5633342EB6DC328972318B /* LOTBezierData.m */, - 8A73292F17F72D91AD677901388AC371 /* LOTKeyframe.h */, - 5241AB8D3B3AF2F3825A93F0B32D9C5D /* LOTKeyframe.m */, + 68E1687B5AF4D546A1AFC23A152F70AD /* LOTFillRenderer.h */, + DD4FD4AD47A15DA21BE7004345E59FF1 /* LOTFillRenderer.m */, + 22EBB006E69A449C65530E592CD2A626 /* LOTGradientFillRender.h */, + D8A357F62DB6E2FEFA3581128A08EB2A /* LOTGradientFillRender.m */, + A820A48AB0D547858DF28B0E9655F394 /* LOTRenderGroup.h */, + DACE6FE000D87D2ED388D53C9A09105E /* LOTRenderGroup.m */, + A9D29A71E99723F7CE4CEF8B9A8D4C23 /* LOTRepeaterRenderer.h */, + 0009F85E49E1B884B4F661D142DB183E /* LOTRepeaterRenderer.m */, + 30E9D1262F3F3D80327A08CD6345E51E /* LOTStrokeRenderer.h */, + A51AFC17F0E6E2A6C99E481475601F3B /* LOTStrokeRenderer.m */, ); - name = AnimatableProperties; - path = AnimatableProperties; + name = RenderNodes; + path = RenderNodes; sourceTree = ""; }; DE13583AB8F794BBEAF85E3A80DA349C /* Frameworks */ = { @@ -839,19 +797,36 @@ path = "Target Support Files/Pods-Lottie Viewer"; sourceTree = ""; }; - EAC8A89E3CF653CE01960430938E5678 /* AnimatorNodes */ = { + DF7289A7033C512318C405BD34C8F612 /* Extensions */ = { + isa = PBXGroup; + children = ( + 18EA856E98C145EB7C34191962E18191 /* CGGeometry+LOTAdditions.h */, + D0A5736FB11B4EBBBA591FAD3A65333D /* CGGeometry+LOTAdditions.m */, + 57614F5D4203365231BFFE6644631A19 /* LOTBezierPath.h */, + F17767C205B354B5CAB2481BAB5F9DA0 /* LOTBezierPath.m */, + F97ABD273FEDF707A881A3A4D86A8BAC /* LOTHelpers.h */, + D27D22931112993E55C05269E53E6735 /* LOTRadialGradientLayer.h */, + 26D4E05F5322BF3B72C8611356635EF3 /* LOTRadialGradientLayer.m */, + A4DDD27C9DC70FEB86BA92158ED0DCAE /* UIColor+Expanded.h */, + C3A33578A6371962FBB57B72B7439B73 /* UIColor+Expanded.m */, + ); + name = Extensions; + path = Extensions; + sourceTree = ""; + }; + EC8110043F5929FB95B8A594B0702EA6 /* AnimatorNodes */ = { isa = PBXGroup; children = ( - 8042D1984741739FE2632E3381091EB2 /* LOTCircleAnimator.h */, - 9DCDDA899EEFBA305F1468F251D2F617 /* LOTCircleAnimator.m */, - 8B5218EC59B214FFDB753A1E532F1FD4 /* LOTPathAnimator.h */, - 5A5058F11E3F1D9871124199C1B3D9E4 /* LOTPathAnimator.m */, - DB7F41DB9747216ADF000810800EEB15 /* LOTPolygonAnimator.h */, - 38EADF596ED162A0EE3D35E987685FD7 /* LOTPolygonAnimator.m */, - 3328CBFDABE689C4A43C029461A4A1DB /* LOTPolystarAnimator.h */, - 3242711C4E767B6FF3AEC1BAA95BA71F /* LOTPolystarAnimator.m */, - 50A7B85C7FF3F62AA8229881037A84F9 /* LOTRoundedRectAnimator.h */, - B4A18DDFFFD13D69C09000FFD121ECDE /* LOTRoundedRectAnimator.m */, + 981A7F32888CC43622C4C6E1A41EA449 /* LOTCircleAnimator.h */, + 9121F8C30F38B6B3F922266AEFF60FC0 /* LOTCircleAnimator.m */, + 891DD5D2A60C077B85E9FCA84C18EE50 /* LOTPathAnimator.h */, + 7D1442D30C3E3EB79709C2DEAE546228 /* LOTPathAnimator.m */, + B15D464E8BA5683658A7A69691796C20 /* LOTPolygonAnimator.h */, + A3307462A6C8C5FED10A9F16E752B24A /* LOTPolygonAnimator.m */, + 717B2B64150E5A94217C560C674FB5B3 /* LOTPolystarAnimator.h */, + C42115F3B2945D84380F9E656A1B9F48 /* LOTPolystarAnimator.m */, + 8185B383E94F862CB5CE59971F4C64C8 /* LOTRoundedRectAnimator.h */, + 7C6D047937C224F003CA77C2073CDD10 /* LOTRoundedRectAnimator.m */, ); name = AnimatorNodes; path = AnimatorNodes; @@ -889,158 +864,203 @@ name = "Targets Support Files"; sourceTree = ""; }; + FFAB8E9FA872327A62ABF4AD1142A46A /* Models */ = { + isa = PBXGroup; + children = ( + 0E9F71BCB0F40FE922DF9F1570AA4867 /* LOTAsset.h */, + F5B5431F0457FB3A977D48753E1588F9 /* LOTAsset.m */, + 7CD3706DB5874050E418954E3029AD3D /* LOTAssetGroup.h */, + 450FD39F04E68EAD2100497895395162 /* LOTAssetGroup.m */, + 521EC30358351BCE62767560A7C68513 /* LOTLayer.h */, + BF608B78F94F2F6159A526758E25EFCF /* LOTLayer.m */, + A6EA7077BFF4E93DCC2D2DB02718FE11 /* LOTLayerGroup.h */, + 2CCBDC43BD9347A9F269C13873D9712D /* LOTLayerGroup.m */, + 543BDC1D5AA10F0E690ECC1D58B6A608 /* LOTMask.h */, + AAA938B623E2B97CB7E3033A55310ED0 /* LOTMask.m */, + DA5257757C925993A2F45291CE0EBF80 /* LOTModels.h */, + A1C00F0E74B77AE86CA7D7377D83B46A /* LOTShapeCircle.h */, + E4C883E96A6E2DB3D0D97B13E4150C01 /* LOTShapeCircle.m */, + DC5DC300A9713A2CF620ED314317C11F /* LOTShapeFill.h */, + F27E360BB2A6D9499651CCB95A3E833D /* LOTShapeFill.m */, + 6B45C5DAF912B239B840F0CA41CC32A6 /* LOTShapeGradientFill.h */, + 7E335339E18CA751DB8D08D11A91DD44 /* LOTShapeGradientFill.m */, + 2BA2DAF580D8E1E762C64C730E86C4F4 /* LOTShapeGroup.h */, + 2D450E5F4ECEB3AE2A86EEB12A5B8521 /* LOTShapeGroup.m */, + 9582A5D2F9520C1CC62EAF342EBB7BBA /* LOTShapePath.h */, + 6A22F2A85EEBD74C4973C0DDF14DC6C7 /* LOTShapePath.m */, + 536713FE7AC1A4F2BC2E93D81DFEB882 /* LOTShapeRectangle.h */, + 4A24096E10060F5B7E287A1E125EBB63 /* LOTShapeRectangle.m */, + 5B11F488A6E654EFE96E3C095DD95134 /* LOTShapeRepeater.h */, + 6F84F1736D6E33DCF1A32E42F64C5C87 /* LOTShapeRepeater.m */, + 8A6EC5B13B17F7EC7B827CCC81DD6D59 /* LOTShapeStar.h */, + 3F5FB9238FEEA60721BE0990A18176CB /* LOTShapeStar.m */, + 5F992FE6E0A432C6BE035D3396C8C9F9 /* LOTShapeStroke.h */, + C67C9707D2EA2A3734B3A289F5E483B0 /* LOTShapeStroke.m */, + EDD0730A9EFC6BF546605EC950466378 /* LOTShapeTransform.h */, + 245B48E160E5ACDDE4DBB76BCF845D2F /* LOTShapeTransform.m */, + 33BA62FECB64376459C90558FD042AE5 /* LOTShapeTrimPath.h */, + 4E1F0FDF5268894547EB1C7FC507ED30 /* LOTShapeTrimPath.m */, + ); + name = Models; + path = Models; + sourceTree = ""; + }; /* End PBXGroup section */ /* Begin PBXHeadersBuildPhase section */ - 0FFCE85F775CBCB778F3FC397A10E755 /* Headers */ = { + 0CE0C18CC13796B783A7ABEF45888950 /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - 96E45CDF220E0A132F7A1FC36B4FBF56 /* CALayer+Compat.h in Headers */, - 60627A06FAE6D353FC466F70BFE1712F /* CGGeometry+LOTAdditions.h in Headers */, - CF264386E9E451CF993345A14448ACC9 /* LOTAnimatedControl.h in Headers */, - 2C78D7F87D67367F046B493A0B52F8D0 /* LOTAnimatedSwitch.h in Headers */, - 95FE420F8346466F8DE580883A6EF578 /* LOTAnimationCache.h in Headers */, - C2BEC0BBD97858E8C5C28E5817177D03 /* LOTAnimationTransitionController.h in Headers */, - 89E21ED032F6F9976A3B8F12F5521353 /* LOTAnimationView.h in Headers */, - A6D3FBC7036C7AE7E819A1186E356EAF /* LOTAnimationView_Compat.h in Headers */, - 17FE8B4840FC738F17DDD059F0536734 /* LOTAnimationView_Internal.h in Headers */, - 6780218BB2E9504FC7837E51154BB485 /* LOTAnimatorNode.h in Headers */, - C5081E3D0804BDEFBF04277F969BA90E /* LOTArrayInterpolator.h in Headers */, - CC5897D1A3AA2911E9EF756BB4527BEE /* LOTAsset.h in Headers */, - 29E071D0746E2E313294D7E11331B3C7 /* LOTAssetGroup.h in Headers */, - AC4FF6975E16E6D4AC2E2F207A8533E9 /* LOTBezierData.h in Headers */, - 79E4A857473280F5F26343CE5A5BDF24 /* LOTBezierPath.h in Headers */, - 4ED420CFB267149D4AD7A1F3117746D9 /* LOTCacheProvider.h in Headers */, - 0B453D5F7C054F621EF62F392CFE3706 /* LOTCircleAnimator.h in Headers */, - 05DCB2668AE71B8461C6B0038D7F0B84 /* LOTColorInterpolator.h in Headers */, - 84208027617685F469AFADDC255A5EE3 /* LOTComposition.h in Headers */, - EEB08096C988F00CFDE9BD6C9171FB83 /* LOTCompositionContainer.h in Headers */, - 288A3F3C86FF65F66418279C19A856A7 /* LOTFillRenderer.h in Headers */, - B047D5A4E0C92C165A15F24464356261 /* LOTGradientFillRender.h in Headers */, - 96A1AB7D5ABA11DB98AB0A270330B009 /* LOTHelpers.h in Headers */, - 1F1DEA86F6F5DD31791BC1BB08599902 /* LOTKeyframe.h in Headers */, - 63BCF9DA38A1BE48070968771932986A /* LOTLayer.h in Headers */, - 1BF546B43291C580F1E52373F839CDC2 /* LOTLayerContainer.h in Headers */, - DDEA3FF8E8CA403B1DE21A8A42A7D6E9 /* LOTLayerGroup.h in Headers */, - EB7BA9F9897A557B348C7B06B632D059 /* LOTMask.h in Headers */, - 92C695B69B18B4DDF128C49D699FB56A /* LOTMaskContainer.h in Headers */, - 783828FF1E1546EE1104CE1C6BFC2BCB /* LOTModels.h in Headers */, - 64C0EC04F4CB37F4FD01C1A5258BA47E /* LOTNumberInterpolator.h in Headers */, - A94B87370940B3B63B096538C2E458AF /* LOTPathAnimator.h in Headers */, - 142217BC037E8E46E4D25DE2CE646163 /* LOTPathInterpolator.h in Headers */, - 7FCA350AC5512378D3ABB51F6F82D159 /* LOTPlatformCompat.h in Headers */, - 7FA23FDECF0C2AF05F508F58039189DF /* LOTPointInterpolator.h in Headers */, - DEC864A40CE0DB7A6775D90DA4765071 /* LOTPolygonAnimator.h in Headers */, - E772D17129596FDF838A33A26908028F /* LOTPolystarAnimator.h in Headers */, - 1746042C2014C2DFF10A9B5DFA581F06 /* LOTRadialGradientLayer.h in Headers */, - 08C7E4B86DE6DB906CCB9A481A65C313 /* LOTRenderGroup.h in Headers */, - 3679C0D06A26B6DAC656388E01B399DA /* LOTRenderNode.h in Headers */, - AF19FFEFC9E0F066DCDD6842CED77EE3 /* LOTRepeaterRenderer.h in Headers */, - EBD0227652E595ED3B98FB63CD19067D /* LOTRoundedRectAnimator.h in Headers */, - 8B7610A943F48F4E2205C958ABCDA436 /* LOTShapeCircle.h in Headers */, - 79DBD83A12B2303D5BA2AA33E32D5AF9 /* LOTShapeFill.h in Headers */, - 3838FECA6E248EAE12D6294EFEEEC236 /* LOTShapeGradientFill.h in Headers */, - F474F0C2F24152C28BB17F9F2FDDB223 /* LOTShapeGroup.h in Headers */, - 941D25738ADDB44CB544E244BC39740D /* LOTShapePath.h in Headers */, - 176B06845D3B01A0CBD5704441F35727 /* LOTShapeRectangle.h in Headers */, - 9C72393C22D538DEE58282B8271F3AF5 /* LOTShapeRepeater.h in Headers */, - 8AE917C6489CBB3002EC97FBE1A387B6 /* LOTShapeStar.h in Headers */, - 94C9F10C05731F76C54779ED4FAC0CFC /* LOTShapeStroke.h in Headers */, - FDDB82AFFF44E487FFB233CFAD5921C9 /* LOTShapeTransform.h in Headers */, - EAA3E05E943798C0A996FF4C9FA611E9 /* LOTShapeTrimPath.h in Headers */, - 0F2B78A56E6DB35F129B56AAF595DDB3 /* LOTSizeInterpolator.h in Headers */, - 63D8DDB2B3A09388FCF92334B055DF23 /* LOTStrokeRenderer.h in Headers */, - C9CFF370EC8DD782B2FB0ADE5C9B9EE6 /* lottie-ios-iOS-umbrella.h in Headers */, - A072967E29B764BE7087572312A6C808 /* Lottie.h in Headers */, - 7A2826DC237ED3AD81FD9AF9BCCF8D4D /* LOTTransformInterpolator.h in Headers */, - 0EC98F47772B09070C279DD0F32C0D4B /* LOTTrimPathNode.h in Headers */, - 5F0AF8379F419BBBA67545B8E349B5C2 /* LOTValueInterpolator.h in Headers */, - 760B302E95E75C575418939D2598E79B /* NSValue+Compat.h in Headers */, - 42D51345DDBE7850866F30EA222512DE /* UIColor+Expanded.h in Headers */, - ADE286185EAECAA6785078A38F0BAC3E /* UIColor.h in Headers */, + F231226C194DFED2518ED022E2B96255 /* CALayer+Compat.h in Headers */, + 37F068158255C742855A8E87EDC2F2FA /* CGGeometry+LOTAdditions.h in Headers */, + 79F93140683F6B3951D6D8253513052B /* LOTAnimationCache.h in Headers */, + BBA1F0CF8B6D179132DF990A8C577492 /* LOTAnimationView.h in Headers */, + 0B3B91633107A151A36E291D4D9323E4 /* LOTAnimationView_Compat.h in Headers */, + 35D1B584BBAB0EE9D83289B2E136F39C /* LOTAnimationView_Internal.h in Headers */, + 4FB18ECF0191E70DD4BA05CD9BBB2570 /* LOTAnimatorNode.h in Headers */, + D8A844267091FD6F34B7B9B47E5FF668 /* LOTArrayInterpolator.h in Headers */, + 51B1E851F3452DD93AED8ECA283DBF89 /* LOTAsset.h in Headers */, + F6811A33B2BD1B51683F4EC935EE3CC5 /* LOTAssetGroup.h in Headers */, + 9DAF28C5EBB64484FB5FF0ABC18778BE /* LOTBezierData.h in Headers */, + BE3F781DD5EF414ABB7EC05C32845D2A /* LOTBezierPath.h in Headers */, + EE7AD9E944C8C82535E6559C95022DE8 /* LOTCircleAnimator.h in Headers */, + C63CD0DFEE5113D475030A35517B513F /* LOTColorInterpolator.h in Headers */, + 837247D8E2E25ECFD51F0416A4FDC91A /* LOTComposition.h in Headers */, + FCD289D91D81BE68689CDD4A891082D5 /* LOTCompositionContainer.h in Headers */, + 3939F8FBA9D78BA5D659169180EFA1E8 /* LOTFillRenderer.h in Headers */, + DE581763B694705ADD84331FB30468C6 /* LOTGradientFillRender.h in Headers */, + 5CDCF9F2ADF9058934D8A4E78E9744DA /* LOTHelpers.h in Headers */, + 81CC40FEE46E025FD84B9BF6168E5BD1 /* LOTKeyframe.h in Headers */, + E5E029D32C225C4CB65EC0BDB8E26C4E /* LOTKeypath.h in Headers */, + 3A8A3C8FF234B6AC96D8B3FF519D25DE /* LOTLayer.h in Headers */, + 5C1C159FD9C8AF8EF4889B4514FC8944 /* LOTLayerContainer.h in Headers */, + 6A518EBF040706876BEF7E08108CCC8A /* LOTLayerGroup.h in Headers */, + 1CC0515547691F58AD0EA63968364500 /* LOTMask.h in Headers */, + 20FF2F371F6E0BFB2D01F988401A9060 /* LOTMaskContainer.h in Headers */, + 2A7AF2E94DFBCB9A39A5061B887721BF /* LOTModels.h in Headers */, + A6501F9301B7A8280D9BD8A0D4E64942 /* LOTNumberInterpolator.h in Headers */, + 6277F9D8DFA4B9EDD54914DAD612A3FE /* LOTPathAnimator.h in Headers */, + FF3A7841C8BE6551A895349283035A83 /* LOTPathInterpolator.h in Headers */, + CF633E1A0CED8B1E2E4F0BB4FFE3E5CC /* LOTPlatformCompat.h in Headers */, + 9AA2191EF47BC5D7A36067E58944B5E0 /* LOTPointInterpolator.h in Headers */, + 152E12A252E27089D997AE7DF07AC2FE /* LOTPolygonAnimator.h in Headers */, + F7ACC51F07EA8A86E6224D58C6549068 /* LOTPolystarAnimator.h in Headers */, + 7C1DF6BF2A7AB34686ED8128F3FFC849 /* LOTRadialGradientLayer.h in Headers */, + BCC2490C18DB821E84BF0DDC5C87B0C3 /* LOTRenderGroup.h in Headers */, + 3B70BDA4AA19D68322140F6DCFBE8CD0 /* LOTRenderNode.h in Headers */, + 32F204181F28A5C447DB96EF74A7B710 /* LOTRepeaterRenderer.h in Headers */, + 2D7D527C6F041D1B0437B1081014B9D1 /* LOTRoundedRectAnimator.h in Headers */, + 8525B3CCC74E3D9BF08663A77C5AA5C0 /* LOTShapeCircle.h in Headers */, + C74274FD295632A494C9AE59FAEF3BFC /* LOTShapeFill.h in Headers */, + AD86B59A5AE699E9050D5682455DD1A9 /* LOTShapeGradientFill.h in Headers */, + 607ADA2BFFC478CA09D4942035E5413F /* LOTShapeGroup.h in Headers */, + 11ED8106DD969F9F36AF8C08F0E3717A /* LOTShapePath.h in Headers */, + 3936C7C307D1E197FA2513204F22581E /* LOTShapeRectangle.h in Headers */, + BB708965FEF94963CE914C96060EFA1E /* LOTShapeRepeater.h in Headers */, + D1456B82A211B889DC4C48B09EF336F6 /* LOTShapeStar.h in Headers */, + EE81AEC77F34DA40A24980C7C025C7C5 /* LOTShapeStroke.h in Headers */, + 9B6782B402BC8BD3CE8BE6A3EF1EA32C /* LOTShapeTransform.h in Headers */, + 25390C1D6331A6EF3A2FF1284400DB98 /* LOTShapeTrimPath.h in Headers */, + D07BFEFC5B578C8BC70F9192F0CF443D /* LOTSizeInterpolator.h in Headers */, + 8741ED8D30661234B96C0E7678BFCF0E /* LOTStrokeRenderer.h in Headers */, + 41963A7F8151229D0E6737185F6FC008 /* lottie-ios-OSX-umbrella.h in Headers */, + 3333975900AE78BBDF3D2E5D40A0CF2E /* Lottie.h in Headers */, + B8445ECC0712E24DB9F45065360BD293 /* LOTTransformInterpolator.h in Headers */, + A898C9BCCC9ABA7CD033E9C14A38A634 /* LOTTrimPathNode.h in Headers */, + C0E81B9675C5A0CE2DE6ECC7FC604E1D /* LOTValueCallback.h in Headers */, + 2D7D5FF76FFD20D9A90C59186074F965 /* LOTValueInterpolator.h in Headers */, + D399E122ED284FD80ABB0955D21A1FD3 /* NSValue+Compat.h in Headers */, + A8036D5CBDBA0991EFD73CF8421A90E3 /* UIColor+Expanded.h in Headers */, + 88E26D84B40DDB9E7E5AD5990651C848 /* UIColor.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; - 3789888596B9F477052ABFBA23EE9E26 /* Headers */ = { + 2FD9DD24B866E9CC2B226BB2EB8A1C2E /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - 695E0CCAE6F585FBCDE5F397DA85EC93 /* Pods-lottie-ios_Tests-umbrella.h in Headers */, + 7D83D8A088BE0F31E3DCAF7526A23893 /* CALayer+Compat.h in Headers */, + 13AFB8C8A869249A261F2117C9B00981 /* CGGeometry+LOTAdditions.h in Headers */, + 74944F106797A23AF0AC41B2E151AEEC /* LOTAnimatedControl.h in Headers */, + F7D3FA154E819C195AA9CCA4F3FEFF9E /* LOTAnimatedSwitch.h in Headers */, + AE5F2557EDAAE5DCFB0615DFA12C052A /* LOTAnimationCache.h in Headers */, + EFD56A1C718F70F6AA7B1514CC404CF1 /* LOTAnimationTransitionController.h in Headers */, + 6860ECB54FB94F8AAB1064AA48E7F0D2 /* LOTAnimationView.h in Headers */, + E74ADCB287028C758738FDFC27378C19 /* LOTAnimationView_Compat.h in Headers */, + 38C5D9E68EFFEC114588FF9469EFD1D2 /* LOTAnimationView_Internal.h in Headers */, + 884CC732725C3CCBCB67786E81943787 /* LOTAnimatorNode.h in Headers */, + 487243222FFF593CF190A5C27BCC30F0 /* LOTArrayInterpolator.h in Headers */, + 384BED9EB996AB1AC267FDE82FC472AF /* LOTAsset.h in Headers */, + 8C9DB9C0DA78FCDFCF0C5F1BEA228723 /* LOTAssetGroup.h in Headers */, + 6457446AAD69F1E7E27FCD388CD15810 /* LOTBezierData.h in Headers */, + D203466435C3B03FD545731C840F61EF /* LOTBezierPath.h in Headers */, + 982C1B105ACA34AF920844297EA43F19 /* LOTCacheProvider.h in Headers */, + AF3587257B98B3A268016BD730F671AD /* LOTCircleAnimator.h in Headers */, + A020AAFC356971BA31B30D48A52EA0EA /* LOTColorInterpolator.h in Headers */, + 9C85451C685D3BE137F43D593A196085 /* LOTComposition.h in Headers */, + 5BC796D89E263113A896D6B4DD876CD4 /* LOTCompositionContainer.h in Headers */, + AFCC085EB6B83F73A3E403A02C393694 /* LOTFillRenderer.h in Headers */, + 67AB86A84F67EF95802D057ABBCB5CF5 /* LOTGradientFillRender.h in Headers */, + 6B0358F14500CBEC7C5F761B876F4AB5 /* LOTHelpers.h in Headers */, + D4EBF866D3CD27E3CCA936E819C05993 /* LOTKeyframe.h in Headers */, + 0F54F0C2C657AC52F9342E46E2975E3D /* LOTKeypath.h in Headers */, + FDBE169E5C76E1BBDEB793B7D6D080E6 /* LOTLayer.h in Headers */, + 363825BA318813C37FFADCCAFCC174AB /* LOTLayerContainer.h in Headers */, + 87520039B5D9F37A33E46D25EBBB2D20 /* LOTLayerGroup.h in Headers */, + 7A565587264907FA9DB634EC3865805F /* LOTMask.h in Headers */, + A0BCD29823B2E49E2EAD4297EB1A8FFA /* LOTMaskContainer.h in Headers */, + 900BB7D83CD706EAACD57EFEC6A68B10 /* LOTModels.h in Headers */, + 182E21C4790123AC8E49E3FE744C360B /* LOTNumberInterpolator.h in Headers */, + 308006C09948E893E0E2A82C8B91C138 /* LOTPathAnimator.h in Headers */, + AA9C4CC820E1F2092C3608586340322F /* LOTPathInterpolator.h in Headers */, + 693FACDB284FCE7E2D361336AE927087 /* LOTPlatformCompat.h in Headers */, + 48D0B79E284EEE56196483BF46948135 /* LOTPointInterpolator.h in Headers */, + 385AE04267BF8E38B6ABFA253118A4E4 /* LOTPolygonAnimator.h in Headers */, + D9015A2C08A9F316FD6FCE37D654B51E /* LOTPolystarAnimator.h in Headers */, + 3BE174EE0D33169751CE11EF1BB204F8 /* LOTRadialGradientLayer.h in Headers */, + 271BDB0436B2782E7A30F973B714845B /* LOTRenderGroup.h in Headers */, + 27127F0AE2A22071A756730B3A7DF109 /* LOTRenderNode.h in Headers */, + 04664392D507F924479281DFCDEA88D3 /* LOTRepeaterRenderer.h in Headers */, + 926033FCE27E93AD3B31D0C8CB48B4E9 /* LOTRoundedRectAnimator.h in Headers */, + BFFEF019B646C877FA9C677CBB6DE463 /* LOTShapeCircle.h in Headers */, + A6C63ED90783A9C6586CA167B233D5A1 /* LOTShapeFill.h in Headers */, + 49AEE3366D2E5A3796B5D7CF39CAEA05 /* LOTShapeGradientFill.h in Headers */, + 23E29AE9C3810A30418B57D8A70E465F /* LOTShapeGroup.h in Headers */, + 8AB5AE18933F9F386B31DE5D80510F68 /* LOTShapePath.h in Headers */, + 801A86250D801A4D33F33850CFC6366C /* LOTShapeRectangle.h in Headers */, + A16F224D941D78055C0B826C049151DE /* LOTShapeRepeater.h in Headers */, + 2A32D17B1E3B0822EF8190261E19898F /* LOTShapeStar.h in Headers */, + 28897D2EEBD3B69C16C000A306ACB6B0 /* LOTShapeStroke.h in Headers */, + ACC3FBD078A9E475E4B7F3A1812F56A5 /* LOTShapeTransform.h in Headers */, + 4476D0F053FEB25570B74CD43E59FBF6 /* LOTShapeTrimPath.h in Headers */, + 3E4CA99768A6C68888D7031AD4A4CF65 /* LOTSizeInterpolator.h in Headers */, + A19C05B7E137515CDD4CB813447F3A25 /* LOTStrokeRenderer.h in Headers */, + 5B58D7E48BED80A3A8CC4E57C42B5E3A /* lottie-ios-iOS-umbrella.h in Headers */, + 65EAAF30E370D6CB96B19F2967C355FB /* Lottie.h in Headers */, + 1C683BEDD5B22A48B0CE467CEBFE3EED /* LOTTransformInterpolator.h in Headers */, + F97CCA7473FC33E50833AA0C7B3AF767 /* LOTTrimPathNode.h in Headers */, + 315EBDA22F11469CF5818EDC6D27C2B5 /* LOTValueCallback.h in Headers */, + 792F8F04A09ED647BE4097BAA13A20F5 /* LOTValueInterpolator.h in Headers */, + 92FD4555E7B74A24166EC44410BAA9C3 /* NSValue+Compat.h in Headers */, + 8E455BA7BEBABBD800C01F4285DFBC98 /* UIColor+Expanded.h in Headers */, + FBCE9E625BEB11B8376254FA66A5C7A1 /* UIColor.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; - 3D68CC88C837BDC4C4307C02479C43BA /* Headers */ = { + 3789888596B9F477052ABFBA23EE9E26 /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - 6E546A07530D4E0B229B36F2BC7AFC89 /* Pods-Lottie-Example-umbrella.h in Headers */, + 695E0CCAE6F585FBCDE5F397DA85EC93 /* Pods-lottie-ios_Tests-umbrella.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; - ABBE883E25EDAFE366B95DBC20F4984F /* Headers */ = { + 3D68CC88C837BDC4C4307C02479C43BA /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - 4AE9E825285273B5940996E875602EBC /* CALayer+Compat.h in Headers */, - 53594627CE015253466AAFBA397EF35A /* CGGeometry+LOTAdditions.h in Headers */, - 513273116B98486E2215B0FDFDDA7232 /* LOTAnimationCache.h in Headers */, - 3EC25FB0AE9BB89BA3C53A9AF516877D /* LOTAnimationView.h in Headers */, - CCA7CF8243A89451BC9633E613FC7151 /* LOTAnimationView_Compat.h in Headers */, - 08E6A4E0F674A367F312F6D66EE953E0 /* LOTAnimationView_Internal.h in Headers */, - F2BC18A67E6462A5B95B86D213A99B3F /* LOTAnimatorNode.h in Headers */, - 0DB4F05B1A2C6AF5EFE1B2E6260922F9 /* LOTArrayInterpolator.h in Headers */, - 876A467886FE386602A0CCA5366394F4 /* LOTAsset.h in Headers */, - 46C517F2808125A9BFD0BED3E6212932 /* LOTAssetGroup.h in Headers */, - 96220941F3AD3B8C36AE10CDD5985C3C /* LOTBezierData.h in Headers */, - D5C6F7C043AAEFC9AA94DB717766AD98 /* LOTBezierPath.h in Headers */, - 9779EF7B57AEA9589B1DA018AF96590C /* LOTCircleAnimator.h in Headers */, - E40A3FB1287C96D693F48780A016ED3F /* LOTColorInterpolator.h in Headers */, - 663DB103A15D98565CA4B58DB71011E3 /* LOTComposition.h in Headers */, - DF3BA27820767F6D0F6A82BFD9474B73 /* LOTCompositionContainer.h in Headers */, - 768CAD11689E8551916D48353B48D464 /* LOTFillRenderer.h in Headers */, - ED180731A6DA3D54432F35F66B7E302C /* LOTGradientFillRender.h in Headers */, - 8FF223849446967A0E0D296E1D9AE8F3 /* LOTHelpers.h in Headers */, - C7542194267B0A684D9DA4A6B212C53B /* LOTKeyframe.h in Headers */, - 602ECC5DDE59E798B2FFC1207AC00015 /* LOTLayer.h in Headers */, - B2A86FFFD9D52E81D028DC9867D0F7A0 /* LOTLayerContainer.h in Headers */, - 09EC2FB3DC9FF040795E659488718844 /* LOTLayerGroup.h in Headers */, - 189AA10449833F0096ADBB8649133D6F /* LOTMask.h in Headers */, - 54490E3D47D31DB8376AD527E54229EB /* LOTMaskContainer.h in Headers */, - DD50A114BE50A1C4B1A389E60CE85E24 /* LOTModels.h in Headers */, - 853B6289D633F828C5AF115C92D2001B /* LOTNumberInterpolator.h in Headers */, - 6CB4430906D6612E111E9C23DFE82E48 /* LOTPathAnimator.h in Headers */, - 39D329BCFA65D5EB5E378735DF321FFF /* LOTPathInterpolator.h in Headers */, - ADE433504AAD68322956F1A2DC14705C /* LOTPlatformCompat.h in Headers */, - 4104D2E5DC9985A96076E91FA23EE160 /* LOTPointInterpolator.h in Headers */, - 3AF620CCDF8D49FD4107E98DDAF67D4B /* LOTPolygonAnimator.h in Headers */, - FB62A10B7776C450974859DCAE75FDFB /* LOTPolystarAnimator.h in Headers */, - 216924F5335BA83DA0728E373BEA2E40 /* LOTRadialGradientLayer.h in Headers */, - 83D3596F839B0DDFF44B858EE13E2D68 /* LOTRenderGroup.h in Headers */, - 66D99639ABB799193854726D740E8274 /* LOTRenderNode.h in Headers */, - 94D93FD87E0A71761BC64B8D3DBA1C82 /* LOTRepeaterRenderer.h in Headers */, - BBA49D2F013B52969ECFB84659DF04AE /* LOTRoundedRectAnimator.h in Headers */, - C5D5D546A2F8B96B97EE7D87A978FEB7 /* LOTShapeCircle.h in Headers */, - 42F09F9430AA878A11E2B0A1B0477782 /* LOTShapeFill.h in Headers */, - AEFE56A62E0F7E116A2C432C97BDE0C4 /* LOTShapeGradientFill.h in Headers */, - E96CE89C7C1A6A3ED3E75A01432A7FBB /* LOTShapeGroup.h in Headers */, - E3FB33796190ABC187C4DD4F2F1FF9A3 /* LOTShapePath.h in Headers */, - 36233CD0C2416D63617E247F53D3F065 /* LOTShapeRectangle.h in Headers */, - 4C7675328043BA3F923BD74A2368296C /* LOTShapeRepeater.h in Headers */, - 8D84482A5F91273876710F786FBFF89C /* LOTShapeStar.h in Headers */, - 4F08B370A2FB80CABB7F65EAC100C2D4 /* LOTShapeStroke.h in Headers */, - A4A2A6A3C1A75F74EA7CF6B35AC3AF23 /* LOTShapeTransform.h in Headers */, - DE13550992089CBE5A2C4B755992555D /* LOTShapeTrimPath.h in Headers */, - 19A65FE2DF94AEF64B64A10C55751729 /* LOTSizeInterpolator.h in Headers */, - 75523FD0992AF7AF07F31457B24AA8B6 /* LOTStrokeRenderer.h in Headers */, - AFE084E2925B8897B2565319EB9D6337 /* lottie-ios-OSX-umbrella.h in Headers */, - 20519EF1676AE789152EC8E87B22877C /* Lottie.h in Headers */, - 7D04734F561A78B0B63C5933FBA971AB /* LOTTransformInterpolator.h in Headers */, - 7169D42FBB7F021F214F53DE107FD839 /* LOTTrimPathNode.h in Headers */, - FF9255EB4CD11DD726E677442B7AAA35 /* LOTValueInterpolator.h in Headers */, - 3DE0AB32CE32304D9C60D9D0B3DB92C7 /* NSValue+Compat.h in Headers */, - AC6AB070726F2F6FD477E2F4E4F1EAD7 /* UIColor+Expanded.h in Headers */, - 759C5A60DBBCC3584456215954FC70F7 /* UIColor.h in Headers */, + 6E546A07530D4E0B229B36F2BC7AFC89 /* Pods-Lottie-Example-umbrella.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -1055,6 +1075,23 @@ /* End PBXHeadersBuildPhase section */ /* Begin PBXNativeTarget section */ + 17CF872940024461716375A5C025FB2C /* lottie-ios-iOS */ = { + isa = PBXNativeTarget; + buildConfigurationList = BC685229D073DBC542F844DDB49B38F0 /* Build configuration list for PBXNativeTarget "lottie-ios-iOS" */; + buildPhases = ( + DF9B0789F49DCAD20962510791DF03C7 /* Sources */, + 1AD5652CABEE94440C2E3BAFBF2729DE /* Frameworks */, + 2FD9DD24B866E9CC2B226BB2EB8A1C2E /* Headers */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = "lottie-ios-iOS"; + productName = "lottie-ios-iOS"; + productReference = BBBFB35C75DBB9AACD3D259D46474425 /* Lottie.framework */; + productType = "com.apple.product-type.framework"; + }; 2095D67C1D81E0F861D9AC87B89BF033 /* Pods-Lottie-Example */ = { isa = PBXNativeTarget; buildConfigurationList = C987B5E55958C3747F5AE7FFBC8C7287 /* Build configuration list for PBXNativeTarget "Pods-Lottie-Example" */; @@ -1108,13 +1145,13 @@ productReference = 75F4DD86D133631479410B893D4B04F4 /* Pods_lottie_ios_Tests.framework */; productType = "com.apple.product-type.framework"; }; - C3ED1BE19A2E3ADF592D40371146E32D /* lottie-ios-OSX */ = { + 9BE15F564123A732B06C9999504090F9 /* lottie-ios-OSX */ = { isa = PBXNativeTarget; - buildConfigurationList = 5CA7CACD985FB190CAC341576DB7AA4C /* Build configuration list for PBXNativeTarget "lottie-ios-OSX" */; + buildConfigurationList = CC228E852246F29FD49EC837D5391B61 /* Build configuration list for PBXNativeTarget "lottie-ios-OSX" */; buildPhases = ( - 70E41C546F5378B0CF6DFA2FF0A81625 /* Sources */, - 5486ACCEB44DA02681B22834529405BA /* Frameworks */, - ABBE883E25EDAFE366B95DBC20F4984F /* Headers */, + E8D6183282A1E99887E18577AC5D2FD9 /* Sources */, + EF330E76466BF196820B97C9CD456B32 /* Frameworks */, + 0CE0C18CC13796B783A7ABEF45888950 /* Headers */, ); buildRules = ( ); @@ -1125,23 +1162,6 @@ productReference = 937CB982BF7625A942908DCE0D0B45FB /* Lottie.framework */; productType = "com.apple.product-type.framework"; }; - F30904A4E2B528D7322F8C34AD2C7625 /* lottie-ios-iOS */ = { - isa = PBXNativeTarget; - buildConfigurationList = 6A0FEFC6345F5EAE97D9D6EAFCBEA986 /* Build configuration list for PBXNativeTarget "lottie-ios-iOS" */; - buildPhases = ( - F36015838FDD8F8F710159E4266F14A5 /* Sources */, - 5C1C680CAA5E0DDC1D70AE67A2622954 /* Frameworks */, - 0FFCE85F775CBCB778F3FC397A10E755 /* Headers */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = "lottie-ios-iOS"; - productName = "lottie-ios-iOS"; - productReference = BBBFB35C75DBB9AACD3D259D46474425 /* Lottie.framework */; - productType = "com.apple.product-type.framework"; - }; /* End PBXNativeTarget section */ /* Begin PBXProject section */ @@ -1163,8 +1183,8 @@ projectDirPath = ""; projectRoot = ""; targets = ( - F30904A4E2B528D7322F8C34AD2C7625 /* lottie-ios-iOS */, - C3ED1BE19A2E3ADF592D40371146E32D /* lottie-ios-OSX */, + 17CF872940024461716375A5C025FB2C /* lottie-ios-iOS */, + 9BE15F564123A732B06C9999504090F9 /* lottie-ios-OSX */, 61A79F8CD75FE84CA5FFFA6AE0244991 /* Pods-Lottie Viewer */, 2095D67C1D81E0F861D9AC87B89BF033 /* Pods-Lottie-Example */, 83ADD99A263B92A7CBD14D1B3DBE0C7B /* Pods-lottie-ios_Tests */, @@ -1197,127 +1217,131 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - 70E41C546F5378B0CF6DFA2FF0A81625 /* Sources */ = { + DF9B0789F49DCAD20962510791DF03C7 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 62870B3A6FAF858C78F9EB434176AE30 /* CALayer+Compat.m in Sources */, - 9CE86081FC0EB0840BB6529EB4297EA1 /* CGGeometry+LOTAdditions.m in Sources */, - 2EDE30108B669C16B96A2949F58BC09A /* LOTAnimationCache.m in Sources */, - 1614629FE71A6B3389F1DC69319E5218 /* LOTAnimationView.m in Sources */, - 82031F30EAE949CAEB86C26E16B1746F /* LOTAnimatorNode.m in Sources */, - AE71899163E79F1D0FC97FB7ACDD65CC /* LOTArrayInterpolator.m in Sources */, - C604C42A486965AA98FD260135A97941 /* LOTAsset.m in Sources */, - 45251126639B00012E9D005BC5B3F3A1 /* LOTAssetGroup.m in Sources */, - FB1A193171350ED85E89AC0480808A04 /* LOTBezierData.m in Sources */, - DB3635C8878C4DF06895A24C93F387F1 /* LOTBezierPath.m in Sources */, - 6E6C819278602168F1EF518CEFFA662D /* LOTCircleAnimator.m in Sources */, - 89C5DB9F027A010909487B1883013647 /* LOTColorInterpolator.m in Sources */, - 7612EC2B7F53F0B12EAAF3723B6D0AD0 /* LOTComposition.m in Sources */, - 9F84B7240D74991EF3EFEE6D57FFA8C9 /* LOTCompositionContainer.m in Sources */, - 4961F1A12FC2CD4B00A02CBF7447F5AD /* LOTFillRenderer.m in Sources */, - 6EC4BE69D5F1A9AE3FBD9944BB4D2A35 /* LOTGradientFillRender.m in Sources */, - 9B83263F9E0F082EBFC39A0749C30F19 /* LOTKeyframe.m in Sources */, - 43D48F3BB8489E7A75E5350717B13740 /* LOTLayer.m in Sources */, - 0BA283A9224B96C6CF9095CDB429C471 /* LOTLayerContainer.m in Sources */, - 5896996BCBDFBA74B408DB5AD3F571E4 /* LOTLayerGroup.m in Sources */, - A7D6518E8D1314A31C2068956426F05B /* LOTMask.m in Sources */, - 9EFFD89E82B2F5882CA5C63CEC2D3673 /* LOTMaskContainer.m in Sources */, - 08F6D82193AB77499BD8E58E0E3105D7 /* LOTNumberInterpolator.m in Sources */, - F772CBD9F5D2376A0329571DB7C949B7 /* LOTPathAnimator.m in Sources */, - FCFBD9EDDF1711A7BD0A04D3E2AA6539 /* LOTPathInterpolator.m in Sources */, - 2CEF6276DDC731E6E120EEADEBFF5BC3 /* LOTPointInterpolator.m in Sources */, - 61F671315535EE6D02570019383BCD94 /* LOTPolygonAnimator.m in Sources */, - 94C191471DD62DC9B9708CC3D91D2A52 /* LOTPolystarAnimator.m in Sources */, - 4DF0409283D2210FE43E9F20DD3EAFE6 /* LOTRadialGradientLayer.m in Sources */, - AE7C31AF5DC22B80C0933E254509C452 /* LOTRenderGroup.m in Sources */, - 0AA963C7A974BDCA1F55D16BCF14B4F6 /* LOTRenderNode.m in Sources */, - BCBCC1C69D47506C917977C12BD7A8B3 /* LOTRepeaterRenderer.m in Sources */, - A44BE408F66FC90811F2D78CFEA3E79B /* LOTRoundedRectAnimator.m in Sources */, - BB505B6625A3191ED62A370464964D87 /* LOTShapeCircle.m in Sources */, - 6A91ADA713788FD14709EFADCC873E8D /* LOTShapeFill.m in Sources */, - 607BB99553882ABD5F914BD374C57502 /* LOTShapeGradientFill.m in Sources */, - D822DEC7423289CE6C5EDD2F76220A87 /* LOTShapeGroup.m in Sources */, - E0B6E044E3C2BE1CD1F3B7B38C76487B /* LOTShapePath.m in Sources */, - 5C97F2B33A75479BF2431CA8EC0BF543 /* LOTShapeRectangle.m in Sources */, - C30673BB9552799EB7D68E6931DD8DB5 /* LOTShapeRepeater.m in Sources */, - 340A9D013F5EC78D683F6B0ED56D5532 /* LOTShapeStar.m in Sources */, - FA186EC1F104AD0C5026A68518372DBC /* LOTShapeStroke.m in Sources */, - F87B2EABBEA37E0935718B6400DF6754 /* LOTShapeTransform.m in Sources */, - B1CB788FCE83A0631BC0C8F4961ADC69 /* LOTShapeTrimPath.m in Sources */, - 856CAC612783A5302E8E5685929BA416 /* LOTSizeInterpolator.m in Sources */, - BF97243BE5E56133C8E010764F91E8B5 /* LOTStrokeRenderer.m in Sources */, - C8C316D731CD5AC2F63CF8D7DB67C5FE /* lottie-ios-OSX-dummy.m in Sources */, - FBF6F943722FA0BF60102D606D1DDBC8 /* LOTTransformInterpolator.m in Sources */, - 8D3D2D4402D2A7E6A86C5426D16B2BBD /* LOTTrimPathNode.m in Sources */, - 039B9195607CF9436EB16FC422C7C8F6 /* LOTValueInterpolator.m in Sources */, - 3ED234EAAA8C9BDC01834AC43932E235 /* NSValue+Compat.m in Sources */, - 686A90ACB0868082EAA1385487435FAF /* UIColor+Expanded.m in Sources */, - 7A509A21B07AD04878007991161AE3A5 /* UIColor.m in Sources */, + 0F257F1D67A58F5A04AEAC05D07EE110 /* CALayer+Compat.m in Sources */, + ADAF3B282B8B4A1F2413F50BAF199F3D /* CGGeometry+LOTAdditions.m in Sources */, + 1C718B8EC0AA36B832C2970F3226862C /* LOTAnimatedControl.m in Sources */, + 69D152F69D8AA8758CED146A373184F3 /* LOTAnimatedSwitch.m in Sources */, + 2BADB045DEBDD4FB8005617887205A8D /* LOTAnimationCache.m in Sources */, + 48CAAEB307FBB9316CCF6FFA538A38C3 /* LOTAnimationTransitionController.m in Sources */, + 6F7D2CB132F0AC9EDB00F514D7F14805 /* LOTAnimationView.m in Sources */, + 4BB4BDB2396879B5847830859B2B2142 /* LOTAnimatorNode.m in Sources */, + A3B672079706E5CB7D7F4825EE6C076A /* LOTArrayInterpolator.m in Sources */, + 62F819EDE106C9AF5A48CD5E57C4B0BF /* LOTAsset.m in Sources */, + 5E20F8AC5160F12C2BBC8E498DB98914 /* LOTAssetGroup.m in Sources */, + 9429F1CB9003DFE5991561E68C486D97 /* LOTBezierData.m in Sources */, + 9C19CFBC85D557925C42FA89E2467E84 /* LOTBezierPath.m in Sources */, + 26EB742B980A9E50852186BBF750EBCC /* LOTCacheProvider.m in Sources */, + 2400EA89C1BB2531E11E1535DF955E26 /* LOTCircleAnimator.m in Sources */, + FBC49AAE60E240C2B9A5C5C419EBB7D8 /* LOTColorInterpolator.m in Sources */, + 71DA841B8E74CF5A37127BD3C86AF1BD /* LOTComposition.m in Sources */, + B9447EFFFC8D0BEF45388C63EF687305 /* LOTCompositionContainer.m in Sources */, + D69E130C25EE0B1C39EDDAE77FED1DA8 /* LOTFillRenderer.m in Sources */, + D4DB48C26373D780A7F6CC97EAF789B7 /* LOTGradientFillRender.m in Sources */, + 4A8C1E76FCF8905EDFE04A3291115DF3 /* LOTKeyframe.m in Sources */, + 66ED935FCD17B8D65B48DD0972536BB6 /* LOTKeypath.m in Sources */, + E7C306DD9CBAC3B6B18AB1C0EE7A8E0C /* LOTLayer.m in Sources */, + DF18DFEA0DFBF56E8785493F8F9D01FF /* LOTLayerContainer.m in Sources */, + F524BFE7ED0B24F4D2C030506CDAE2C0 /* LOTLayerGroup.m in Sources */, + 75EA3AB76CD50AD9A8D91D199C63ADD1 /* LOTMask.m in Sources */, + 3415A2ADC279644668330DE55AF314B9 /* LOTMaskContainer.m in Sources */, + 5FCE0D20EB54A7C76300F2AA1B391FF4 /* LOTNumberInterpolator.m in Sources */, + 720D9854315269DD159C4458E508C3D5 /* LOTPathAnimator.m in Sources */, + D9F1B9BE6F232737502BC979E98E12A4 /* LOTPathInterpolator.m in Sources */, + 8D7874ADC7B9333BD6724B9AC23EAD8B /* LOTPointInterpolator.m in Sources */, + AB867314C2BD041288B7164541E46681 /* LOTPolygonAnimator.m in Sources */, + 0407B5FE687C101034594DFF7A04E997 /* LOTPolystarAnimator.m in Sources */, + 9F4C35E06D050DC13F70F902842DDB62 /* LOTRadialGradientLayer.m in Sources */, + F216E175900A503A4768617320517785 /* LOTRenderGroup.m in Sources */, + 54EC42D59F729EBD84A27FA29F5499F9 /* LOTRenderNode.m in Sources */, + 446E31D00DFD183A6DB89A51372A2C37 /* LOTRepeaterRenderer.m in Sources */, + EE490F848693BA9AE4048EF46B9A1DEC /* LOTRoundedRectAnimator.m in Sources */, + A7E8695D891C9758EAC6742289CC7BAE /* LOTShapeCircle.m in Sources */, + 89C0F97887E53223A55AE86598996737 /* LOTShapeFill.m in Sources */, + 220D6C4779733CF3978EE481683A49A1 /* LOTShapeGradientFill.m in Sources */, + 5DF74FE8E7FD3ACE29ED0CBC7CF20888 /* LOTShapeGroup.m in Sources */, + 4442A7657200FD90C1EEC41358B5E26A /* LOTShapePath.m in Sources */, + F33190F1D6EF8A845C0BD0148900FE64 /* LOTShapeRectangle.m in Sources */, + 5BF895DA9BEFD25EEC84A1FDD793FDB5 /* LOTShapeRepeater.m in Sources */, + 57A9A57F7610983616B56CAE60840D81 /* LOTShapeStar.m in Sources */, + CAC7095A47554A792E0BCD3E0298F6EB /* LOTShapeStroke.m in Sources */, + A16055DA48300C542E82E5B7CF1138AF /* LOTShapeTransform.m in Sources */, + 5A6DBBED4F0AE608DD85D1C415A9A7FA /* LOTShapeTrimPath.m in Sources */, + 1CEB1483E5DA09A7CA4E0B2312F8B995 /* LOTSizeInterpolator.m in Sources */, + ED9563AE9C61252A8F9C9C4635ADE4EE /* LOTStrokeRenderer.m in Sources */, + EC0416504C864774C92044245B491E5D /* lottie-ios-iOS-dummy.m in Sources */, + 9A95820B7EBD228EF61B2E785D59096C /* LOTTransformInterpolator.m in Sources */, + AEB03ECA05399E63C643973D5C0B46B9 /* LOTTrimPathNode.m in Sources */, + C14722398A37454433B6BAB68AE2A51E /* LOTValueCallback.m in Sources */, + FF0E5D9A7BBFB26657B14FDE137379FD /* LOTValueInterpolator.m in Sources */, + CA523AE186ECE2AEAEFB4FB592B2EF7C /* NSValue+Compat.m in Sources */, + C40581EB45FE2C71C252B87CC6B170F0 /* UIColor+Expanded.m in Sources */, + EBB44FF4B109D4131EB2EC79F6B989CE /* UIColor.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; - F36015838FDD8F8F710159E4266F14A5 /* Sources */ = { + E8D6183282A1E99887E18577AC5D2FD9 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 4CF69F568D6D5E3BF63CF2ED982194B6 /* CALayer+Compat.m in Sources */, - 886BBBB6641F02227C03BA968C109266 /* CGGeometry+LOTAdditions.m in Sources */, - CE0FC93B43A524D1F7D19B460DBDC0C7 /* LOTAnimatedControl.m in Sources */, - BBE368FED1915B20CEC1E69227B45683 /* LOTAnimatedSwitch.m in Sources */, - 1BE1967989F1CBF4B1FEAC5930A98942 /* LOTAnimationCache.m in Sources */, - C490E9C2CF5C1443715780FFC89769B9 /* LOTAnimationTransitionController.m in Sources */, - 1DEADDEE877E816C3F7F13A9199BD2B4 /* LOTAnimationView.m in Sources */, - 70BBEF28602EC3CC686384685B8A2459 /* LOTAnimatorNode.m in Sources */, - 79F35A8D10BE733C0355FD3656C0F85C /* LOTArrayInterpolator.m in Sources */, - 7CD7BC6B5A5228313894C99C74C49B0A /* LOTAsset.m in Sources */, - CDE9CB16ACB6B4A3FE2BD2B1DA79EF12 /* LOTAssetGroup.m in Sources */, - 844C91B4C01C3D2D3DED42D65D097777 /* LOTBezierData.m in Sources */, - 7841900EC097E61F410BDA91AE910D59 /* LOTBezierPath.m in Sources */, - 4D813C6B2C6D0CB9332A2EB4D10B46A4 /* LOTCacheProvider.m in Sources */, - 92391609A7D27513E0CB57BBC7921C2E /* LOTCircleAnimator.m in Sources */, - D8D6C71856D22FD2837C92162078DFF2 /* LOTColorInterpolator.m in Sources */, - 370DDD919DC09EE5594D1CDDE74EC1B4 /* LOTComposition.m in Sources */, - DC75D7C902FA3FB6831C5F586BF0A9EB /* LOTCompositionContainer.m in Sources */, - 7209E9AD97B88AFBC6953021833A4C0A /* LOTFillRenderer.m in Sources */, - 443B5953F6F057649E1A6EDA4161BF79 /* LOTGradientFillRender.m in Sources */, - 5BAC75E9E79DE097EDC1D92A7D46B1DA /* LOTKeyframe.m in Sources */, - 7E5AE22174A1CFE5429B74AAAD6A27BE /* LOTLayer.m in Sources */, - BD0FFCE664E3940072042D1036BB9FE3 /* LOTLayerContainer.m in Sources */, - EACD4A8E26C963A25FCB1239384A5F4C /* LOTLayerGroup.m in Sources */, - 5DDA09BAE2AB6CC139B4BBB1F055D1C7 /* LOTMask.m in Sources */, - 60D710EE0DE4F38CF088979CF35747F0 /* LOTMaskContainer.m in Sources */, - 31692C57AEC902D759ACC5DDEF9D7DED /* LOTNumberInterpolator.m in Sources */, - A4D2BBF485F6FB659CD62F63B4A0A66F /* LOTPathAnimator.m in Sources */, - 9B1827319A7793D8933B6981C1CB0870 /* LOTPathInterpolator.m in Sources */, - 66CCE1FE84B1834A596C56BD93D7B76D /* LOTPointInterpolator.m in Sources */, - 05D6165CEC602834F3CC154694226DAF /* LOTPolygonAnimator.m in Sources */, - 49657576E8DE83877C20F78BB8BB7DA7 /* LOTPolystarAnimator.m in Sources */, - 1DE1AFC96982EEB453EEB7600522593C /* LOTRadialGradientLayer.m in Sources */, - 0F3426DBA3F18A3960BC1FD3EC944703 /* LOTRenderGroup.m in Sources */, - 28464475CBD4E279EC7C939A05244FA8 /* LOTRenderNode.m in Sources */, - 675FEB51CD39377FA3AE0EA835B84C32 /* LOTRepeaterRenderer.m in Sources */, - 6505EC7B7323A8E08A20DBE33ED2BF14 /* LOTRoundedRectAnimator.m in Sources */, - 7CCB11B87705FFE84A4CC24B94E40C6B /* LOTShapeCircle.m in Sources */, - F6B91A01736088808F00D1B43CC2E7FA /* LOTShapeFill.m in Sources */, - 489F2282D377E1D8CFD97D0725B8D7E3 /* LOTShapeGradientFill.m in Sources */, - 3C8AF7D35EAE318A864E02EC4CF720F3 /* LOTShapeGroup.m in Sources */, - 8E6C305A474C510FB922CF7DE59678D7 /* LOTShapePath.m in Sources */, - 4FC4954471EE3D5AD44F4712935D7A27 /* LOTShapeRectangle.m in Sources */, - E57EC26912C56DB801BCA105B1E38F64 /* LOTShapeRepeater.m in Sources */, - 72C55F5FC2798BA9C4BC25CC77AA8A47 /* LOTShapeStar.m in Sources */, - 3AD32255965332DAC58DF1CFD81DE078 /* LOTShapeStroke.m in Sources */, - DCA9E79B329A9C7089354744495ACF4F /* LOTShapeTransform.m in Sources */, - 9223968694A94B0C31015566F9163A8E /* LOTShapeTrimPath.m in Sources */, - 56621F549766F443CA6D42052F64F056 /* LOTSizeInterpolator.m in Sources */, - AD3DC697C0A4A56D1A3D99BB9499A84E /* LOTStrokeRenderer.m in Sources */, - 53339B491D546570BAD86C545DF0A549 /* lottie-ios-iOS-dummy.m in Sources */, - 49CE298811DA943A0A712B164206D2CE /* LOTTransformInterpolator.m in Sources */, - B32EAC56F6E02F526EB6C99DE01C438D /* LOTTrimPathNode.m in Sources */, - BC10EA3E13BADB5C3146FDBF73FD1A3A /* LOTValueInterpolator.m in Sources */, - 6643A93A7EF064E08642ED4CA3828AEC /* NSValue+Compat.m in Sources */, - 1A9D251062D71F7D2EEF8DC916D56D32 /* UIColor+Expanded.m in Sources */, - 9C067191DDF83EB5606006CC79475701 /* UIColor.m in Sources */, + FFF60F0544F6BF0A58409C308BAB3A52 /* CALayer+Compat.m in Sources */, + 9F8E70C59494804C7B1EFF0E19D2FC38 /* CGGeometry+LOTAdditions.m in Sources */, + FBDA762F1D32997EB027052A7D129296 /* LOTAnimationCache.m in Sources */, + 8181F07EF79C7566681F6D7F0E9636F1 /* LOTAnimationView.m in Sources */, + 1A8161188217B01A50FFE8E272B31C34 /* LOTAnimatorNode.m in Sources */, + 6B6CEC576B2627DD623E91EA3DBD4B94 /* LOTArrayInterpolator.m in Sources */, + 6D694D5CCF4D05AEE830F115443F8DF8 /* LOTAsset.m in Sources */, + E1D382A25C1793A85F3BDBF484ABD94A /* LOTAssetGroup.m in Sources */, + 4C158D88E9833215066174DE83B0071F /* LOTBezierData.m in Sources */, + AE202F9606396BB75D90CFB1EC8C5BC4 /* LOTBezierPath.m in Sources */, + 2C9C1FC5E2ACC77F51EAE950B3DD6FDA /* LOTCircleAnimator.m in Sources */, + 63CCEB6C46D5EC206E3BBA87CCA70455 /* LOTColorInterpolator.m in Sources */, + ACEF86EDD2B44DE942DA3B5F7E656956 /* LOTComposition.m in Sources */, + 0245942B198683A20AD6F626B687431C /* LOTCompositionContainer.m in Sources */, + 7B643D3D77F8351A545EE38C8592CF2A /* LOTFillRenderer.m in Sources */, + B4039F6AEBEE0D39EC6C92DC3960963E /* LOTGradientFillRender.m in Sources */, + 90C4AE981233049188B9194497367476 /* LOTKeyframe.m in Sources */, + 579DD00D3361808B8D2014AD53798678 /* LOTKeypath.m in Sources */, + 814C1F9E86C897A1B4EF05F97A885C96 /* LOTLayer.m in Sources */, + DE2328862B54EE1A30C36C78504493FC /* LOTLayerContainer.m in Sources */, + 24FA899C815EF3C7C34E9B6989797FF7 /* LOTLayerGroup.m in Sources */, + 2D4B6625E638E6982B02B6DF445486C8 /* LOTMask.m in Sources */, + 6924453FBB64F539204F67B491A3A623 /* LOTMaskContainer.m in Sources */, + 6E9E4EA68319927D2F7EB514083A7A0B /* LOTNumberInterpolator.m in Sources */, + 77B2096C4DBC5371CDD26EE24D94C8E5 /* LOTPathAnimator.m in Sources */, + 04217E5B30D82DCFA063E54CFD05218D /* LOTPathInterpolator.m in Sources */, + 6DBFC2390E96FD5E7E41022B71576FB2 /* LOTPointInterpolator.m in Sources */, + 196AB9366251FACE47E9822F4D686936 /* LOTPolygonAnimator.m in Sources */, + E67670C8C4471E82BB5FAD665AF488B1 /* LOTPolystarAnimator.m in Sources */, + D25626CF5418DC6299C7F05B2B957CC5 /* LOTRadialGradientLayer.m in Sources */, + DCE10CD8A7223BD1223449673513CE18 /* LOTRenderGroup.m in Sources */, + 9E31DC5F6402D3F9A77EE46539335C35 /* LOTRenderNode.m in Sources */, + 887509BFC57AE5CEAED48BFD69C2CB87 /* LOTRepeaterRenderer.m in Sources */, + 4E5D28830B5B916567298F02CB3B649F /* LOTRoundedRectAnimator.m in Sources */, + 527E28C1AF75FB3C06E64EC6F1953AF7 /* LOTShapeCircle.m in Sources */, + 6A1122517F7339A3AF466D3BE85F3E90 /* LOTShapeFill.m in Sources */, + 2DFB8A31A4455EAA675051E9EB42476E /* LOTShapeGradientFill.m in Sources */, + 9245547A0443A7165D81641A881A5390 /* LOTShapeGroup.m in Sources */, + 2B3BC59641A93634B8D39D67F92FCD11 /* LOTShapePath.m in Sources */, + 46BE37498E81E2CD02B0173933E46285 /* LOTShapeRectangle.m in Sources */, + E93E9402CD446D3F077FF6DA7D7E1DCC /* LOTShapeRepeater.m in Sources */, + 2E09199050E843A958F92BE3B6D7E442 /* LOTShapeStar.m in Sources */, + AC717FBE474925D1CC73D82439A1853C /* LOTShapeStroke.m in Sources */, + 21D66F020950DC35A0CE7984B81C4C22 /* LOTShapeTransform.m in Sources */, + 1BA63D485F6F972EF62A943C46582774 /* LOTShapeTrimPath.m in Sources */, + C84342E1725B26853F57446BA8F18C3F /* LOTSizeInterpolator.m in Sources */, + 267900BE93A759FF194999978F88E330 /* LOTStrokeRenderer.m in Sources */, + 6A370089882E12048A3475621E2D274B /* lottie-ios-OSX-dummy.m in Sources */, + ACF9BB3F011EDADA044BD6570C299E77 /* LOTTransformInterpolator.m in Sources */, + 6F2A127587786360244DF52C73D0E9F1 /* LOTTrimPathNode.m in Sources */, + 697E59AFC56A05D8078AFB496CD53D14 /* LOTValueCallback.m in Sources */, + 8931FE090842BCE2B9D1A844DBD06A51 /* LOTValueInterpolator.m in Sources */, + 7E59BD5F856B2693BE324A9671C3810A /* NSValue+Compat.m in Sources */, + 96EF3DEE748D06C6C6C82DBFD1B7C07D /* UIColor+Expanded.m in Sources */, + C95CCA4ADE5937504A5979ED1E871063 /* UIColor.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -1327,18 +1351,113 @@ AD2FBD63A30D0AC75A11104406DB3C3C /* PBXTargetDependency */ = { isa = PBXTargetDependency; name = "lottie-ios-iOS"; - target = F30904A4E2B528D7322F8C34AD2C7625 /* lottie-ios-iOS */; + target = 17CF872940024461716375A5C025FB2C /* lottie-ios-iOS */; targetProxy = 68E1DE604219B922CE07CE2003EA0EA3 /* PBXContainerItemProxy */; }; CCEBC8CD3D233203D906C1B3700A7285 /* PBXTargetDependency */ = { isa = PBXTargetDependency; name = "lottie-ios-OSX"; - target = C3ED1BE19A2E3ADF592D40371146E32D /* lottie-ios-OSX */; + target = 9BE15F564123A732B06C9999504090F9 /* lottie-ios-OSX */; targetProxy = D4791C006ECE4521039908D2894E5846 /* PBXContainerItemProxy */; }; /* End PBXTargetDependency section */ /* Begin XCBuildConfiguration section */ + 36A82BE69D114442CCF59643F8BC46AE /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 6AE2E9ED9175D72655AC45CF4432C1C7 /* lottie-ios-OSX.xcconfig */; + buildSettings = { + CODE_SIGN_IDENTITY = "-"; + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + COMBINE_HIDPI_IMAGES = YES; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + ENABLE_STRICT_OBJC_MSGSEND = YES; + FRAMEWORK_VERSION = A; + GCC_NO_COMMON_BLOCKS = YES; + GCC_PREFIX_HEADER = "Target Support Files/lottie-ios-OSX/lottie-ios-OSX-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/lottie-ios-OSX/Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/Frameworks"; + MACOSX_DEPLOYMENT_TARGET = 10.10; + MODULEMAP_FILE = "Target Support Files/lottie-ios-OSX/lottie-ios-OSX.modulemap"; + MTL_ENABLE_DEBUG_INFO = NO; + PRODUCT_NAME = Lottie; + SDKROOT = macosx; + SKIP_INSTALL = YES; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Release; + }; + 4BE40CCEBD2444771772C572E5CE960A /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 3FC57817E38FEE88C847125F31F36F1F /* lottie-ios-iOS.xcconfig */; + buildSettings = { + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = dwarf; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_NO_COMMON_BLOCKS = YES; + GCC_PREFIX_HEADER = "Target Support Files/lottie-ios-iOS/lottie-ios-iOS-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/lottie-ios-iOS/Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + MODULEMAP_FILE = "Target Support Files/lottie-ios-iOS/lottie-ios-iOS.modulemap"; + MTL_ENABLE_DEBUG_INFO = YES; + PRODUCT_NAME = Lottie; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Debug; + }; + 655C01AE05A2C3BBF1ADEBFCB420051E /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 3FC57817E38FEE88C847125F31F36F1F /* lottie-ios-iOS.xcconfig */; + buildSettings = { + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_NO_COMMON_BLOCKS = YES; + GCC_PREFIX_HEADER = "Target Support Files/lottie-ios-iOS/lottie-ios-iOS-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/lottie-ios-iOS/Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + MODULEMAP_FILE = "Target Support Files/lottie-ios-iOS/lottie-ios-iOS.modulemap"; + MTL_ENABLE_DEBUG_INFO = NO; + PRODUCT_NAME = Lottie; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Release; + }; 6A5C9A3A01840F305474247F39A4627B /* Release */ = { isa = XCBuildConfiguration; buildSettings = { @@ -1425,39 +1544,6 @@ }; name = Debug; }; - 7925E87A6B69F90A3039B415E73DD6D3 /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 6AE2E9ED9175D72655AC45CF4432C1C7 /* lottie-ios-OSX.xcconfig */; - buildSettings = { - CODE_SIGN_IDENTITY = "-"; - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - COMBINE_HIDPI_IMAGES = YES; - CURRENT_PROJECT_VERSION = 1; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - ENABLE_STRICT_OBJC_MSGSEND = YES; - FRAMEWORK_VERSION = A; - GCC_NO_COMMON_BLOCKS = YES; - GCC_PREFIX_HEADER = "Target Support Files/lottie-ios-OSX/lottie-ios-OSX-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/lottie-ios-OSX/Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/Frameworks"; - MACOSX_DEPLOYMENT_TARGET = 10.10; - MODULEMAP_FILE = "Target Support Files/lottie-ios-OSX/lottie-ios-OSX.modulemap"; - MTL_ENABLE_DEBUG_INFO = NO; - PRODUCT_NAME = Lottie; - SDKROOT = macosx; - SKIP_INSTALL = YES; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Release; - }; 87F9B5D124DED7CC133BF4D1B4779E5E /* Debug */ = { isa = XCBuildConfiguration; baseConfigurationReference = 22BDFBAA4524EAF16132AD22EC39BA9D /* Pods-lottie-ios_Tests.debug.xcconfig */; @@ -1528,48 +1614,15 @@ }; name = Release; }; - A5167B6455A9899D4D56B063117C7604 /* Release */ = { + A1F91725D7CEBCDEAFDFD86B4C4B1314 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 200981A59C027D7B3DD2231DB8680AAA /* Pods-Lottie-Example.release.xcconfig */; - buildSettings = { - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - CURRENT_PROJECT_VERSION = 1; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_NO_COMMON_BLOCKS = YES; - INFOPLIST_FILE = "Target Support Files/Pods-Lottie-Example/Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 8.1; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MACH_O_TYPE = staticlib; - MODULEMAP_FILE = "Target Support Files/Pods-Lottie-Example/Pods-Lottie-Example.modulemap"; - MTL_ENABLE_DEBUG_INFO = NO; - OTHER_LDFLAGS = ""; - OTHER_LIBTOOLFLAGS = ""; - PODS_ROOT = "$(SRCROOT)"; - PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; - PRODUCT_NAME = Pods_Lottie_Example; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - TARGETED_DEVICE_FAMILY = "1,2"; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Release; - }; - B6978E0BF02F16100914D89CB45EBBB5 /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 3FC57817E38FEE88C847125F31F36F1F /* lottie-ios-iOS.xcconfig */; + baseConfigurationReference = 6AE2E9ED9175D72655AC45CF4432C1C7 /* lottie-ios-OSX.xcconfig */; buildSettings = { + CODE_SIGN_IDENTITY = "-"; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + COMBINE_HIDPI_IMAGES = YES; CURRENT_PROJECT_VERSION = 1; DEBUG_INFORMATION_FORMAT = dwarf; DEFINES_MODULE = YES; @@ -1577,26 +1630,26 @@ DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; ENABLE_STRICT_OBJC_MSGSEND = YES; + FRAMEWORK_VERSION = A; GCC_NO_COMMON_BLOCKS = YES; - GCC_PREFIX_HEADER = "Target Support Files/lottie-ios-iOS/lottie-ios-iOS-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/lottie-ios-iOS/Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/lottie-ios-OSX/lottie-ios-OSX-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/lottie-ios-OSX/Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/lottie-ios-iOS/lottie-ios-iOS.modulemap"; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/Frameworks"; + MACOSX_DEPLOYMENT_TARGET = 10.10; + MODULEMAP_FILE = "Target Support Files/lottie-ios-OSX/lottie-ios-OSX.modulemap"; MTL_ENABLE_DEBUG_INFO = YES; PRODUCT_NAME = Lottie; - SDKROOT = iphoneos; + SDKROOT = macosx; SKIP_INSTALL = YES; - TARGETED_DEVICE_FAMILY = "1,2"; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; name = Debug; }; - D6D14CEF0061C3C7B34227C10AB00C84 /* Release */ = { + A5167B6455A9899D4D56B063117C7604 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 3FC57817E38FEE88C847125F31F36F1F /* lottie-ios-iOS.xcconfig */; + baseConfigurationReference = 200981A59C027D7B3DD2231DB8680AAA /* Pods-Lottie-Example.release.xcconfig */; buildSettings = { "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; @@ -1609,14 +1662,18 @@ DYLIB_INSTALL_NAME_BASE = "@rpath"; ENABLE_STRICT_OBJC_MSGSEND = YES; GCC_NO_COMMON_BLOCKS = YES; - GCC_PREFIX_HEADER = "Target Support Files/lottie-ios-iOS/lottie-ios-iOS-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/lottie-ios-iOS/Info.plist"; + INFOPLIST_FILE = "Target Support Files/Pods-Lottie-Example/Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; + IPHONEOS_DEPLOYMENT_TARGET = 8.1; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/lottie-ios-iOS/lottie-ios-iOS.modulemap"; + MACH_O_TYPE = staticlib; + MODULEMAP_FILE = "Target Support Files/Pods-Lottie-Example/Pods-Lottie-Example.modulemap"; MTL_ENABLE_DEBUG_INFO = NO; - PRODUCT_NAME = Lottie; + OTHER_LDFLAGS = ""; + OTHER_LIBTOOLFLAGS = ""; + PODS_ROOT = "$(SRCROOT)"; + PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; + PRODUCT_NAME = Pods_Lottie_Example; SDKROOT = iphoneos; SKIP_INSTALL = YES; TARGETED_DEVICE_FAMILY = "1,2"; @@ -1734,39 +1791,6 @@ }; name = Debug; }; - F614563F0E8A3FCA192AA2EBF623C379 /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 6AE2E9ED9175D72655AC45CF4432C1C7 /* lottie-ios-OSX.xcconfig */; - buildSettings = { - CODE_SIGN_IDENTITY = "-"; - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - COMBINE_HIDPI_IMAGES = YES; - CURRENT_PROJECT_VERSION = 1; - DEBUG_INFORMATION_FORMAT = dwarf; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - ENABLE_STRICT_OBJC_MSGSEND = YES; - FRAMEWORK_VERSION = A; - GCC_NO_COMMON_BLOCKS = YES; - GCC_PREFIX_HEADER = "Target Support Files/lottie-ios-OSX/lottie-ios-OSX-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/lottie-ios-OSX/Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/Frameworks"; - MACOSX_DEPLOYMENT_TARGET = 10.10; - MODULEMAP_FILE = "Target Support Files/lottie-ios-OSX/lottie-ios-OSX.modulemap"; - MTL_ENABLE_DEBUG_INFO = YES; - PRODUCT_NAME = Lottie; - SDKROOT = macosx; - SKIP_INSTALL = YES; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Debug; - }; /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ @@ -1779,38 +1803,38 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 5CA7CACD985FB190CAC341576DB7AA4C /* Build configuration list for PBXNativeTarget "lottie-ios-OSX" */ = { + 70E33968FC6B7C18F92ECB73BB882640 /* Build configuration list for PBXNativeTarget "Pods-lottie-ios_Tests" */ = { isa = XCConfigurationList; buildConfigurations = ( - F614563F0E8A3FCA192AA2EBF623C379 /* Debug */, - 7925E87A6B69F90A3039B415E73DD6D3 /* Release */, + 87F9B5D124DED7CC133BF4D1B4779E5E /* Debug */, + 9E850B6660F549C8C5E1656D652FE503 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 6A0FEFC6345F5EAE97D9D6EAFCBEA986 /* Build configuration list for PBXNativeTarget "lottie-ios-iOS" */ = { + BC685229D073DBC542F844DDB49B38F0 /* Build configuration list for PBXNativeTarget "lottie-ios-iOS" */ = { isa = XCConfigurationList; buildConfigurations = ( - B6978E0BF02F16100914D89CB45EBBB5 /* Debug */, - D6D14CEF0061C3C7B34227C10AB00C84 /* Release */, + 4BE40CCEBD2444771772C572E5CE960A /* Debug */, + 655C01AE05A2C3BBF1ADEBFCB420051E /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 70E33968FC6B7C18F92ECB73BB882640 /* Build configuration list for PBXNativeTarget "Pods-lottie-ios_Tests" */ = { + C987B5E55958C3747F5AE7FFBC8C7287 /* Build configuration list for PBXNativeTarget "Pods-Lottie-Example" */ = { isa = XCConfigurationList; buildConfigurations = ( - 87F9B5D124DED7CC133BF4D1B4779E5E /* Debug */, - 9E850B6660F549C8C5E1656D652FE503 /* Release */, + E2295FE6B804D812DB438CDA56779D85 /* Debug */, + A5167B6455A9899D4D56B063117C7604 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - C987B5E55958C3747F5AE7FFBC8C7287 /* Build configuration list for PBXNativeTarget "Pods-Lottie-Example" */ = { + CC228E852246F29FD49EC837D5391B61 /* Build configuration list for PBXNativeTarget "lottie-ios-OSX" */ = { isa = XCConfigurationList; buildConfigurations = ( - E2295FE6B804D812DB438CDA56779D85 /* Debug */, - A5167B6455A9899D4D56B063117C7604 /* Release */, + A1F91725D7CEBCDEAFDFD86B4C4B1314 /* Debug */, + 36A82BE69D114442CCF59643F8BC46AE /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; diff --git a/Example/Pods/Target Support Files/lottie-ios-OSX/lottie-ios-OSX-umbrella.h b/Example/Pods/Target Support Files/lottie-ios-OSX/lottie-ios-OSX-umbrella.h index 3d91c6329b..ffec1301f1 100644 --- a/Example/Pods/Target Support Files/lottie-ios-OSX/lottie-ios-OSX-umbrella.h +++ b/Example/Pods/Target Support Files/lottie-ios-OSX/lottie-ios-OSX-umbrella.h @@ -6,7 +6,9 @@ #import "LOTAnimationView.h" #import "LOTAnimationView_Compat.h" #import "LOTComposition.h" +#import "LOTKeypath.h" #import "Lottie.h" +#import "LOTValueCallback.h" FOUNDATION_EXPORT double LottieVersionNumber; FOUNDATION_EXPORT const unsigned char LottieVersionString[]; diff --git a/Example/Pods/Target Support Files/lottie-ios-iOS/lottie-ios-iOS-umbrella.h b/Example/Pods/Target Support Files/lottie-ios-iOS/lottie-ios-iOS-umbrella.h index 948d2a1b8e..0e9f5ab966 100644 --- a/Example/Pods/Target Support Files/lottie-ios-iOS/lottie-ios-iOS-umbrella.h +++ b/Example/Pods/Target Support Files/lottie-ios-iOS/lottie-ios-iOS-umbrella.h @@ -10,7 +10,9 @@ #import "LOTAnimationView_Compat.h" #import "LOTCacheProvider.h" #import "LOTComposition.h" +#import "LOTKeypath.h" #import "Lottie.h" +#import "LOTValueCallback.h" FOUNDATION_EXPORT double LottieVersionNumber; FOUNDATION_EXPORT const unsigned char LottieVersionString[]; diff --git a/Example/Tests/GeometryTransformTest.json b/Example/Tests/GeometryTransformTest.json new file mode 100644 index 0000000000..5c695a02ef --- /dev/null +++ b/Example/Tests/GeometryTransformTest.json @@ -0,0 +1 @@ +{"v":"4.12.0","fr":23.9759979248047,"ip":0,"op":48.9999957589018,"w":300,"h":300,"nm":"Comp 2","ddd":0,"assets":[],"layers":[{"ddd":0,"ind":1,"ty":4,"nm":"Scaled","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[150,150,0],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[68.52,68.52],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"nm":"Ellipse Path 1","mn":"ADBE Vector Shape - Ellipse","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":2,"ix":5},"lc":1,"lj":1,"ml":4,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[0.431255026425,0,0.902665022308,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[200,200],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Ellipse 1","np":3,"cix":2,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":48.9999957589018,"st":0,"bm":0},{"ddd":0,"ind":2,"ty":4,"nm":"TopLeft","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[150,150,0],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[68.52,68.52],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"nm":"Ellipse Path 1","mn":"ADBE Vector Shape - Ellipse","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":2,"ix":5},"lc":1,"lj":1,"ml":4,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[0.431255026425,0,0.902665022308,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[-150,-150],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Ellipse 1","np":3,"cix":2,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":48.9999957589018,"st":0,"bm":0},{"ddd":0,"ind":3,"ty":4,"nm":"BottomRight","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[150,150,0],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[68.52,68.52],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"nm":"Ellipse Path 1","mn":"ADBE Vector Shape - Ellipse","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":2,"ix":5},"lc":1,"lj":1,"ml":4,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[0.431255026425,0,0.902665022308,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[150,150],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Ellipse 1","np":3,"cix":2,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":48.9999957589018,"st":0,"bm":0},{"ddd":0,"ind":4,"ty":4,"nm":"Center","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[150,150,0],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[68.52,68.52],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"nm":"Ellipse Path 1","mn":"ADBE Vector Shape - Ellipse","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":2,"ix":5},"lc":1,"lj":1,"ml":4,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[0.431255026425,0,0.902665022308,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Ellipse 1","np":3,"cix":2,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":48.9999957589018,"st":0,"bm":0}]} diff --git a/Example/Tests/LAGeometryTest.m b/Example/Tests/LAGeometryTest.m new file mode 100644 index 0000000000..05a2fa8ee9 --- /dev/null +++ b/Example/Tests/LAGeometryTest.m @@ -0,0 +1,62 @@ +// +// LAGeometryTest.m +// lottie-ios_Tests +// +// Created by brandon_withrow on 12/18/17. +// Copyright © 2017 Brandon Withrow. All rights reserved. +// + +#import +#import + +@interface LAGeometryTest : XCTestCase + +@property (nonatomic, strong) LOTAnimationView *animationView; + +@end + +@implementation LAGeometryTest + +- (void)setUp { + [super setUp]; + self.animationView = [LOTAnimationView animationNamed:@"GeometryTransformTest"]; +} + +- (void)tearDown { + // Put teardown code here. This method is called after the invocation of each test method in the class. + [super tearDown]; +} + +- (void)testAnimationLoaded { + XCTAssertNotNil(self.animationView.sceneModel, @"Animation Composition is nil"); +} + +- (void)testGeometryCenter { + LOTKeypath *keypath = [LOTKeypath keypathWithKeys:@"Center", @"Ellipse 1", nil]; + CGPoint midPoint = CGPointMake(CGRectGetMidX(self.animationView.bounds), CGRectGetMidY(self.animationView.bounds)); + CGPoint midPointInChildSpace = [self.animationView convertPoint:midPoint toKeypathLayer:keypath]; + CGPoint midPointInParentSpace = [self.animationView convertPoint:CGPointZero fromKeypathLayer:keypath]; + XCTAssertTrue((CGPointEqualToPoint(midPointInChildSpace, CGPointZero)), @"Convert to point incorrect"); + XCTAssertTrue((CGPointEqualToPoint(midPointInParentSpace, midPoint)), @"Convert from point incorrect"); +} + +- (void)testGeometryBottomRight { + LOTKeypath *keypath = [LOTKeypath keypathWithKeys:@"BottomRight", @"Ellipse 1", nil]; + CGPoint midPoint = CGPointMake(CGRectGetMidX(self.animationView.bounds), CGRectGetMidY(self.animationView.bounds)); + CGPoint bottomRightPoint = CGPointMake(CGRectGetMaxX(self.animationView.bounds), CGRectGetMaxY(self.animationView.bounds)); + CGPoint midPointInChildSpace = [self.animationView convertPoint:midPoint toKeypathLayer:keypath]; + CGPoint midPointInParentSpace = [self.animationView convertPoint:CGPointZero fromKeypathLayer:keypath]; + XCTAssertTrue((CGPointEqualToPoint(midPointInChildSpace, CGPointMake(-midPoint.x, -midPoint.y))), @"Convert to point incorrect"); + XCTAssertTrue((CGPointEqualToPoint(midPointInParentSpace, bottomRightPoint)), @"Convert from point incorrect"); +} + +- (void)testGeometryScaled { + LOTKeypath *keypath = [LOTKeypath keypathWithKeys:@"Scaled", @"Ellipse 1", nil]; + CGPoint bottomRightPoint = CGPointMake(CGRectGetMaxX(self.animationView.bounds), CGRectGetMaxY(self.animationView.bounds)); + CGPoint topLeftInChildSpace = [self.animationView convertPoint:CGPointZero toKeypathLayer:keypath]; + CGPoint bottomRightInParentSpace = [self.animationView convertPoint:CGPointMake(75, 75) fromKeypathLayer:keypath]; + XCTAssertTrue((CGPointEqualToPoint(bottomRightInParentSpace, bottomRightPoint)), @"Convert to point incorrect"); + XCTAssertTrue((CGPointEqualToPoint(topLeftInChildSpace, CGPointMake(-75, -75))), @"Convert from point incorrect"); +} + +@end diff --git a/Example/Tests/LAKeypathTest.m b/Example/Tests/LAKeypathTest.m new file mode 100644 index 0000000000..07f377dcd7 --- /dev/null +++ b/Example/Tests/LAKeypathTest.m @@ -0,0 +1,127 @@ +// +// LAKeypathTest.m +// lottie-ios_Tests +// +// Created by brandon_withrow on 12/14/17. +// Copyright © 2017 Brandon Withrow. All rights reserved. +// + +#import +#import + +@interface LAKeypathTest : XCTestCase + +@property (nonatomic, strong) LOTAnimationView *animationView; + + +@end + +@implementation LAKeypathTest + +- (void)setUp { + [super setUp]; + self.animationView = [LOTAnimationView animationNamed:@"keypathTest"]; +} + +- (void)tearDown { + // Put teardown code here. This method is called after the invocation of each test method in the class. + [super tearDown]; +} + +- (void)testAnimationLoaded { + XCTAssertNotNil(self.animationView.sceneModel, @"Animation Composition is nil"); +} + +- (void)testExplicitSearch { + NSString *searchTerm = @"Shape Layer 1.Shape 1.Path 1"; + NSArray *results = [self.animationView keysForKeyPath:[LOTKeypath keypathWithString:searchTerm]]; + XCTAssertTrue((results.count == 1), @"Wrong number of results"); + NSString *firstObject = results.firstObject; + XCTAssertTrue([searchTerm isEqualToString:firstObject], @"Wrong keypath found"); +} + +- (void)testFuzzyKeySearch_Shape1 { + NSArray *results = [self.animationView keysForKeyPath:[LOTKeypath keypathWithKeys:@"**", @"Shape 1", nil]]; + NSArray *expectedResults = @[@"Shape Layer 1.Shape 1", + @"WiggleLayer.Shape 1", + @"GroupShapeLayer.Group 1.Shape 1", + @"TwoShapeLayer.Shape 1", + @"Precomp.DoubleGroupShape.TopGroup.Group 2.Group 1.Shape 1", + @"Precomp.GroupShape.Group 1.Shape 1", + @"Precomp.SingleShape.Shape 1", + @"Precomp.DoubleGroupShape.TopGroup.Group 1.Group 1.Shape 1"]; + + NSSet *set1 = [NSSet setWithArray:results]; + NSSet *set2 = [NSSet setWithArray:expectedResults]; + XCTAssertTrue([set1 isEqualToSet:set2], @"Wrong keypath found"); +} + +- (void)testFuzzyKeySearch_Shape1_Path1 { + NSArray *results = [self.animationView keysForKeyPath:[LOTKeypath keypathWithKeys:@"**", @"Shape 1", @"Path 1", nil]]; + NSArray *expectedResults = @[@"GroupShapeLayer.Group 1.Shape 1.Path 1", + @"Shape Layer 1.Shape 1.Path 1", + @"TwoShapeLayer.Shape 1.Path 1", + @"Precomp.DoubleGroupShape.TopGroup.Group 2.Group 1.Shape 1.Path 1", + @"Precomp.GroupShape.Group 1.Shape 1.Path 1", + @"Precomp.SingleShape.Shape 1.Path 1", + @"Precomp.DoubleGroupShape.TopGroup.Group 1.Group 1.Shape 1.Path 1"]; + + NSSet *set1 = [NSSet setWithArray:results]; + NSSet *set2 = [NSSet setWithArray:expectedResults]; + XCTAssertTrue([set1 isEqualToSet:set2], @"Wrong keypath found"); +} + +- (void)testWildcardKeySearch_Shape1 { + NSArray *results = [self.animationView keysForKeyPath:[LOTKeypath keypathWithKeys:@"*", @"Shape 1", nil]]; + NSArray *expectedResults = @[@"Shape Layer 1.Shape 1", + @"WiggleLayer.Shape 1", + @"TwoShapeLayer.Shape 1"]; + + NSSet *set1 = [NSSet setWithArray:results]; + NSSet *set2 = [NSSet setWithArray:expectedResults]; + XCTAssertTrue([set1 isEqualToSet:set2], @"Wrong keypath found"); +} + +- (void)testCompoundFuzzyKeySearch_Shape1 { + NSArray *results = [self.animationView keysForKeyPath:[LOTKeypath keypathWithKeys:@"**", @"Shape 1", @"*", @"Stroke Width", nil]]; + NSArray *expectedResults = @[@"Shape Layer 1.Shape 1.Stroke 1.Stroke Width", + @"WiggleLayer.Shape 1.Stroke 1.Stroke Width", + @"GroupShapeLayer.Group 1.Shape 1.Stroke 1.Stroke Width", + @"TwoShapeLayer.Shape 1.Stroke 1.Stroke Width"]; + + NSSet *set1 = [NSSet setWithArray:results]; + NSSet *set2 = [NSSet setWithArray:expectedResults]; + XCTAssertTrue([set1 isEqualToSet:set2], @"Wrong keypath found"); +} + +- (void)testDoubleFuzzyKeySearch_Shape1 { + NSArray *results = [self.animationView keysForKeyPath:[LOTKeypath keypathWithKeys:@"**", @"Group 1", @"**", @"Path 1", nil]]; + NSArray *expectedResults = @[@"Precomp.DoubleGroupShape.TopGroup.Group 2.Group 1.Shape 1.Path 1", + @"Precomp.GroupShape.Group 1.Shape 2.Path 1", + @"Precomp.GroupShape.Group 1.Shape 1.Path 1", + @"GroupShapeLayer.Group 1.Shape 2.Path 1", + @"GroupShapeLayer.Group 1.Shape 1.Path 1", + @"Precomp.DoubleGroupShape.TopGroup.Group 1.Group 1.Shape 2.Path 1", + @"Precomp.DoubleGroupShape.TopGroup.Group 1.Group 1.Shape 1.Path 1", + @"Precomp.DoubleGroupShape.TopGroup.Group 2.Group 1.Shape 2.Path 1"]; + + NSSet *set1 = [NSSet setWithArray:results]; + NSSet *set2 = [NSSet setWithArray:expectedResults]; + XCTAssertTrue([set1 isEqualToSet:set2], @"Wrong keypath found"); +} + +- (void)testKeySearch_Precomp { + NSArray *results = [self.animationView keysForKeyPath:[LOTKeypath keypathWithKeys:@"Precomp", nil]]; + NSArray *expectedResults = @[@"Precomp"]; + + NSSet *set1 = [NSSet setWithArray:results]; + NSSet *set2 = [NSSet setWithArray:expectedResults]; + XCTAssertTrue([set1 isEqualToSet:set2], @"Wrong keypath found"); +} + +- (void)testFuzzyKeySearch_Precomp { + NSArray *results = [self.animationView keysForKeyPath:[LOTKeypath keypathWithKeys:@"Precomp", @"**", nil]]; + XCTAssertTrue((results.count == 33), @"Wrong number of results"); +} + +@end diff --git a/Example/Tests/keypathTest.json b/Example/Tests/keypathTest.json new file mode 100644 index 0000000000..2edffd3a7b --- /dev/null +++ b/Example/Tests/keypathTest.json @@ -0,0 +1 @@ +{"v":"4.12.0","fr":23.9759979248047,"ip":0,"op":48.9999957589018,"w":300,"h":300,"nm":"KeypathTest","ddd":0,"assets":[{"id":"comp_0","layers":[{"ddd":0,"ind":1,"ty":4,"nm":"SingleShape","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[150,150,0],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-2,71],[0,-5]],"o":[[2,-71],[0,5]],"v":[[27.5,-56.5],[-82,-34.5]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.431255026425,0,0.902665022308,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 1","np":2,"cix":2,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":48.9999957589018,"st":0,"bm":0},{"ddd":0,"ind":2,"ty":4,"nm":"DoubleGroupShape","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[150.5,150,0],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-2,71],[0,-5]],"o":[[2,-71],[0,5]],"v":[[27.5,-56.5],[-82,-34.5]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":2,"ix":5},"lc":1,"lj":1,"ml":4,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[0.431255026425,0,0.902665022308,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 2","np":3,"cix":2,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-2,71],[0,-5]],"o":[[2,-71],[0,5]],"v":[[27.5,-56.5],[-82,-34.5]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.431255026425,0,0.902665022308,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 1","np":2,"cix":2,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"tr","p":{"a":0,"k":[-27.237,-50.257],"ix":2},"a":{"a":0,"k":[-27.237,-50.257],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"cix":2,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"tr","p":{"a":0,"k":[-27.237,-50.257],"ix":2},"a":{"a":0,"k":[-27.237,-50.257],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 2","np":1,"cix":2,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-2,71],[0,-5]],"o":[[2,-71],[0,5]],"v":[[27.5,-56.5],[-82,-34.5]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":2,"ix":5},"lc":1,"lj":1,"ml":4,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[0.431255026425,0,0.902665022308,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 2","np":3,"cix":2,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-2,71],[0,-5]],"o":[[2,-71],[0,5]],"v":[[27.5,-56.5],[-82,-34.5]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.431255026425,0,0.902665022308,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 1","np":2,"cix":2,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"tr","p":{"a":0,"k":[-27.237,-50.257],"ix":2},"a":{"a":0,"k":[-27.237,-50.257],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"cix":2,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"tr","p":{"a":0,"k":[-27.237,-50.257],"ix":2},"a":{"a":0,"k":[-27.237,-50.257],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":1,"cix":2,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"tr","p":{"a":0,"k":[-27.237,-50.257],"ix":2},"a":{"a":0,"k":[-27.237,-50.257],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"TopGroup","np":2,"cix":2,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":48.9999957589018,"st":0,"bm":0},{"ddd":0,"ind":3,"ty":4,"nm":"GroupShape","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[150,150,0],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-2,71],[0,-5]],"o":[[2,-71],[0,5]],"v":[[27.5,-56.5],[-82,-34.5]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":2,"ix":5},"lc":1,"lj":1,"ml":4,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[0.431255026425,0,0.902665022308,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 2","np":3,"cix":2,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-2,71],[0,-5]],"o":[[2,-71],[0,5]],"v":[[27.5,-56.5],[-82,-34.5]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.431255026425,0,0.902665022308,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 1","np":2,"cix":2,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"tr","p":{"a":0,"k":[-27.237,-50.257],"ix":2},"a":{"a":0,"k":[-27.237,-50.257],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"cix":2,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":48.9999957589018,"st":0,"bm":0}]}],"layers":[{"ddd":0,"ind":1,"ty":0,"nm":"Precomp","refId":"comp_0","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[150,150,0],"ix":2},"a":{"a":0,"k":[150,150,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"w":300,"h":300,"ip":0,"op":48.9999957589018,"st":0,"bm":0},{"ddd":0,"ind":2,"ty":4,"nm":"Shape Layer 1","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[150,150,0],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0]],"o":[[0,0]],"v":[[-310,89]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":2,"ix":5},"lc":1,"lj":1,"ml":4,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[0.431255026425,0,0.902665022308,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 1","np":3,"cix":2,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":48.9999957589018,"st":0,"bm":0},{"ddd":0,"ind":3,"ty":4,"nm":"GroupShapeLayer","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[150,150,0],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-8,53],[-67,-8]],"o":[[8,-53],[67,8]],"v":[[-42,99],[1,-115]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":2,"ix":5},"lc":1,"lj":1,"ml":4,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[0.431255026425,0,0.902665022308,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 2","np":3,"cix":2,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-41,-12],[-32,-11]],"o":[[41,12],[32,11]],"v":[[-112,-118],[96,-46]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":2,"ix":5},"lc":1,"lj":1,"ml":4,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[0.431255026425,0,0.902665022308,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 1","np":3,"cix":2,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"tr","p":{"a":0,"k":[-8,-9.5],"ix":2},"a":{"a":0,"k":[-8,-9.5],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"cix":2,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":48.9999957589018,"st":0,"bm":0},{"ddd":0,"ind":4,"ty":4,"nm":"TwoShapeLayer","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[150,150,0],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-8,53],[-67,-8]],"o":[[8,-53],[67,8]],"v":[[-42,99],[1,-115]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":2,"ix":5},"lc":1,"lj":1,"ml":4,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[0.431255026425,0,0.902665022308,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 2","np":3,"cix":2,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-41,-12],[-32,-11]],"o":[[41,12],[32,11]],"v":[[-112,-118],[96,-46]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":2,"ix":5},"lc":1,"lj":1,"ml":4,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[0.431255026425,0,0.902665022308,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 1","np":3,"cix":2,"ix":2,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":48.9999957589018,"st":0,"bm":0},{"ddd":0,"ind":5,"ty":4,"nm":"LoopLayer","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[150,150,0],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[46,-8],[-49,10]],"o":[[-46,8],[49,-10]],"v":[[35,-72],[51,-10]],"c":true},"ix":2},"nm":"LoopPath","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":2,"ix":5},"lc":1,"lj":1,"ml":4,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[0.431255026425,0,0.902665022308,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"LoopShape","np":3,"cix":2,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":48.9999957589018,"st":0,"bm":0},{"ddd":0,"ind":6,"ty":4,"nm":"WiggleLayer","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[150,150,0],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-37,8],[-64,36]],"o":[[37,-8],[64,-36]],"v":[[-67,-62],[-29,59]],"c":false},"ix":2},"nm":"Wigglepath","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":2,"ix":5},"lc":1,"lj":1,"ml":4,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[0.431255026425,0,0.902665022308,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 1","np":3,"cix":2,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":48.9999957589018,"st":0,"bm":0}]} diff --git a/Example/Tests/setValueTest.json b/Example/Tests/setValueTest.json new file mode 100644 index 0000000000..6ce64a975f --- /dev/null +++ b/Example/Tests/setValueTest.json @@ -0,0 +1 @@ +{"v":"4.12.0","fr":23.9759979248047,"ip":0,"op":48.9999957589018,"w":300,"h":300,"nm":"Comp 1","ddd":0,"assets":[],"layers":[{"ddd":0,"ind":1,"ty":4,"nm":"Shape Layer 1","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[150,150,0],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,-51],[0,79]],"o":[[0,51],[0,-79]],"v":[[-52.182,-74.182],[32.818,-38.182]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":2,"ix":5},"lc":1,"lj":1,"ml":4,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[0.431255026425,0,0.902665022308,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.333,"y":0},"n":"0p833_0p833_0p333_0","t":0,"s":[58.182,-52.818],"e":[58.182,102.182],"to":[0,25.8333339691162],"ti":[0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0.167},"n":"0p667_1_0p167_0p167","t":29,"s":[58.182,102.182],"e":[58.182,-52.818],"to":[0,0],"ti":[0,25.8333339691162]},{"t":47.9999958454548}],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Ellipse 1","np":3,"cix":2,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ty":"rc","d":1,"s":{"a":0,"k":[69.723,69.723],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"r":{"a":0,"k":0,"ix":4},"nm":"Rectangle Path 1","mn":"ADBE Vector Shape - Rect","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":2,"ix":5},"lc":1,"lj":1,"ml":4,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[0.431255026425,0,0.902665022308,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.333,"y":0},"n":"0p833_0p833_0p333_0","t":0,"s":[-82.139,-74.139],"e":[-82.139,115.861],"to":[0,0],"ti":[0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0.167},"n":"0p667_1_0p167_0p167","t":28,"s":[-82.139,115.861],"e":[-82.139,-74.139],"to":[0,0],"ti":[0,0]},{"t":47.9999958454548}],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.333],"y":[0]},"n":["0p833_0p833_0p333_0"],"t":0,"s":[45],"e":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"n":["0p667_1_0p167_0p167"],"t":28,"s":[0],"e":[-45]},{"t":47.9999958454548}],"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Rectangle 1","np":3,"cix":2,"ix":2,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":48.9999957589018,"st":0,"bm":0}]} diff --git a/Example/lottie-ios.xcodeproj/project.pbxproj b/Example/lottie-ios.xcodeproj/project.pbxproj index 4bb61ca1d5..2ccb745611 100644 --- a/Example/lottie-ios.xcodeproj/project.pbxproj +++ b/Example/lottie-ios.xcodeproj/project.pbxproj @@ -64,9 +64,16 @@ 622F77091F2BE63100269858 /* X.json in Resources */ = {isa = PBXBuildFile; fileRef = 622F76EB1F2BE63100269858 /* X.json */; }; 622F770A1F2BE63100269858 /* Y.json in Resources */ = {isa = PBXBuildFile; fileRef = 622F76EC1F2BE63100269858 /* Y.json */; }; 622F770B1F2BE63100269858 /* Z.json in Resources */ = {isa = PBXBuildFile; fileRef = 622F76ED1F2BE63100269858 /* Z.json */; }; + 6289F3851FE4A3F500C10B3E /* setValueTest.json in Resources */ = {isa = PBXBuildFile; fileRef = 6289F3841FE4A3F500C10B3E /* setValueTest.json */; }; + 6289F3871FE877FC00C10B3E /* GeometryTransformTest.json in Resources */ = {isa = PBXBuildFile; fileRef = 6289F3861FE877FC00C10B3E /* GeometryTransformTest.json */; }; + 6289F3881FE877FC00C10B3E /* GeometryTransformTest.json in Resources */ = {isa = PBXBuildFile; fileRef = 6289F3861FE877FC00C10B3E /* GeometryTransformTest.json */; }; + 6289F38A1FE8784200C10B3E /* LAGeometryTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 6289F3891FE8784200C10B3E /* LAGeometryTest.m */; }; 629EC57F1F54BFF1005B2C59 /* LAControlsViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 629EC57E1F54BFF1005B2C59 /* LAControlsViewController.m */; }; 629EC5811F54C00B005B2C59 /* Switch.json in Resources */ = {isa = PBXBuildFile; fileRef = 629EC5801F54C00B005B2C59 /* Switch.json */; }; 629EC5891F54C925005B2C59 /* Switch_States.json in Resources */ = {isa = PBXBuildFile; fileRef = 629EC5881F54C925005B2C59 /* Switch_States.json */; }; + 62A62AE81FE2FF2B001A2C2F /* keypathTest.json in Resources */ = {isa = PBXBuildFile; fileRef = 62A62AE71FE2FF2A001A2C2F /* keypathTest.json */; }; + 62A62AE91FE2FF2B001A2C2F /* keypathTest.json in Resources */ = {isa = PBXBuildFile; fileRef = 62A62AE71FE2FF2A001A2C2F /* keypathTest.json */; }; + 62A62AEB1FE2FFB0001A2C2F /* LAKeypathTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 62A62AEA1FE2FFB0001A2C2F /* LAKeypathTest.m */; }; 62B2546A1E3A8D310035A842 /* LottieRootViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 62B254631E3A8D310035A842 /* LottieRootViewController.m */; }; 62B2546B1E3A8D310035A842 /* AnimationExplorerViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 62B254651E3A8D310035A842 /* AnimationExplorerViewController.m */; }; 62B2546C1E3A8D310035A842 /* AnimationTransitionViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 62B254671E3A8D310035A842 /* AnimationTransitionViewController.m */; }; @@ -169,10 +176,15 @@ 622F76EC1F2BE63100269858 /* Y.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = Y.json; sourceTree = ""; }; 622F76ED1F2BE63100269858 /* Z.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = Z.json; sourceTree = ""; }; 62569CB2461B12ABC97FCB96 /* lottie-ios.podspec */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; name = "lottie-ios.podspec"; path = "../lottie-ios.podspec"; sourceTree = ""; }; + 6289F3841FE4A3F500C10B3E /* setValueTest.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = setValueTest.json; sourceTree = ""; }; + 6289F3861FE877FC00C10B3E /* GeometryTransformTest.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = GeometryTransformTest.json; sourceTree = ""; }; + 6289F3891FE8784200C10B3E /* LAGeometryTest.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = LAGeometryTest.m; sourceTree = ""; }; 629EC57D1F54BFF1005B2C59 /* LAControlsViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LAControlsViewController.h; sourceTree = ""; }; 629EC57E1F54BFF1005B2C59 /* LAControlsViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = LAControlsViewController.m; sourceTree = ""; }; 629EC5801F54C00B005B2C59 /* Switch.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = Switch.json; sourceTree = ""; }; 629EC5881F54C925005B2C59 /* Switch_States.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = Switch_States.json; sourceTree = ""; }; + 62A62AE71FE2FF2A001A2C2F /* keypathTest.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = keypathTest.json; sourceTree = ""; }; + 62A62AEA1FE2FFB0001A2C2F /* LAKeypathTest.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = LAKeypathTest.m; sourceTree = ""; }; 62B254621E3A8D310035A842 /* LottieRootViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LottieRootViewController.h; sourceTree = ""; }; 62B254631E3A8D310035A842 /* LottieRootViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = LottieRootViewController.m; sourceTree = ""; }; 62B254641E3A8D310035A842 /* AnimationExplorerViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AnimationExplorerViewController.h; sourceTree = ""; }; @@ -337,6 +349,8 @@ 6003F5B5195388D20070C39A /* Tests */ = { isa = PBXGroup; children = ( + 6289F3891FE8784200C10B3E /* LAGeometryTest.m */, + 62A62AEA1FE2FFB0001A2C2F /* LAKeypathTest.m */, 6003F5BB195388D20070C39A /* Tests.m */, ); path = Tests; @@ -349,9 +363,12 @@ 622F76CF1F2BE63100269858 /* TypeFace */, 622F76B51F2BE58100269858 /* 9squares-AlBoardman.json */, 629EC5801F54C00B005B2C59 /* Switch.json */, + 62A62AE71FE2FF2A001A2C2F /* keypathTest.json */, 622F76B61F2BE58100269858 /* HamburgerArrow.json */, + 6289F3861FE877FC00C10B3E /* GeometryTransformTest.json */, 622F76B71F2BE58100269858 /* IconTransitions.json */, 622F76B81F2BE58100269858 /* LottieLogo1_masked.json */, + 6289F3841FE4A3F500C10B3E /* setValueTest.json */, 622F76BA1F2BE58100269858 /* LottieLogo2.json */, 622F76B91F2BE58100269858 /* LottieLogo1.json */, 622F76BB1F2BE58100269858 /* MotionCorpse-Jrcanest.json */, @@ -592,6 +609,7 @@ 48A852311E3A9E71000AD155 /* lottie_logo.png in Resources */, 622F76F11F2BE63100269858 /* BlinkingCursor.json in Resources */, 622F76C71F2BE58100269858 /* LottieLogo2.json in Resources */, + 62A62AE81FE2FF2B001A2C2F /* keypathTest.json in Resources */, 622F76C91F2BE58100269858 /* PinJump.json in Resources */, 622F76F51F2BE63100269858 /* D.json in Resources */, 622F76CD1F2BE58100269858 /* vcTransition2.json in Resources */, @@ -603,6 +621,7 @@ 622F77031F2BE63100269858 /* R.json in Resources */, 71719F9F1E33DC2100824A3D /* LaunchScreen.storyboard in Resources */, 622F76CA1F2BE58100269858 /* TwitterHeart.json in Resources */, + 6289F3871FE877FC00C10B3E /* GeometryTransformTest.json in Resources */, 622F76F91F2BE63100269858 /* H.json in Resources */, 622F76C61F2BE58100269858 /* LottieLogo1.json in Resources */, 622F77051F2BE63100269858 /* T.json in Resources */, @@ -629,6 +648,7 @@ 622F76C51F2BE58100269858 /* LottieLogo1_masked.json in Resources */, 622F76FC1F2BE63100269858 /* K.json in Resources */, 622F76CC1F2BE58100269858 /* vcTransition1.json in Resources */, + 6289F3851FE4A3F500C10B3E /* setValueTest.json in Resources */, 622F76FA1F2BE63100269858 /* I.json in Resources */, 622F76F21F2BE63100269858 /* C.json in Resources */, 622F76F81F2BE63100269858 /* G.json in Resources */, @@ -642,6 +662,8 @@ isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( + 62A62AE91FE2FF2B001A2C2F /* keypathTest.json in Resources */, + 6289F3881FE877FC00C10B3E /* GeometryTransformTest.json in Resources */, 6003F5BA195388D20070C39A /* InfoPlist.strings in Resources */, ); runOnlyForDeploymentPostprocessing = 0; @@ -820,6 +842,8 @@ buildActionMask = 2147483647; files = ( 6003F5BC195388D20070C39A /* Tests.m in Sources */, + 6289F38A1FE8784200C10B3E /* LAGeometryTest.m in Sources */, + 62A62AEB1FE2FFB0001A2C2F /* LAKeypathTest.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -1007,7 +1031,7 @@ INFOPLIST_FILE = "Tests/Tests-Info.plist"; PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.demo.${PRODUCT_NAME:rfc1034identifier}"; PRODUCT_NAME = "$(TARGET_NAME)"; - TEST_HOST = "$(BUILT_PRODUCTS_DIR)/lottie-ios_Example.app/lottie-ios_Example"; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Lottie-Example.app/Lottie-Example"; WRAPPER_EXTENSION = xctest; }; name = Debug; @@ -1027,7 +1051,7 @@ INFOPLIST_FILE = "Tests/Tests-Info.plist"; PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.demo.${PRODUCT_NAME:rfc1034identifier}"; PRODUCT_NAME = "$(TARGET_NAME)"; - TEST_HOST = "$(BUILT_PRODUCTS_DIR)/lottie-ios_Example.app/lottie-ios_Example"; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Lottie-Example.app/Lottie-Example"; WRAPPER_EXTENSION = xctest; }; name = Release; diff --git a/Example/lottie-ios/Images.xcassets/AppIcon.appiconset/Contents.json b/Example/lottie-ios/Images.xcassets/AppIcon.appiconset/Contents.json index 296e4da507..a3c9f628c5 100644 --- a/Example/lottie-ios/Images.xcassets/AppIcon.appiconset/Contents.json +++ b/Example/lottie-ios/Images.xcassets/AppIcon.appiconset/Contents.json @@ -101,6 +101,11 @@ "idiom" : "ipad", "filename" : "Icon-App-83.5x83.5@2x.png", "scale" : "2x" + }, + { + "idiom" : "ios-marketing", + "size" : "1024x1024", + "scale" : "1x" } ], "info" : { diff --git a/Lottie.xcodeproj/project.pbxproj b/Lottie.xcodeproj/project.pbxproj index 581d6249f1..36ff4d2820 100644 --- a/Lottie.xcodeproj/project.pbxproj +++ b/Lottie.xcodeproj/project.pbxproj @@ -190,6 +190,12 @@ 6274D0231F1E830E00E05049 /* LOTTransformInterpolator.m in Sources */ = {isa = PBXBuildFile; fileRef = 6274D0201F1E830E00E05049 /* LOTTransformInterpolator.m */; }; 6274D0241F1E830E00E05049 /* LOTTransformInterpolator.m in Sources */ = {isa = PBXBuildFile; fileRef = 6274D0201F1E830E00E05049 /* LOTTransformInterpolator.m */; }; 6274D0251F1E830E00E05049 /* LOTTransformInterpolator.m in Sources */ = {isa = PBXBuildFile; fileRef = 6274D0201F1E830E00E05049 /* LOTTransformInterpolator.m */; }; + 6279981B1FE1D04600B2DDD9 /* LOTKeypath.h in Headers */ = {isa = PBXBuildFile; fileRef = 627998191FE1D04600B2DDD9 /* LOTKeypath.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 6279981C1FE1D04600B2DDD9 /* LOTKeypath.m in Sources */ = {isa = PBXBuildFile; fileRef = 6279981A1FE1D04600B2DDD9 /* LOTKeypath.m */; }; + 6279981D1FE1D99F00B2DDD9 /* LOTKeypath.h in Headers */ = {isa = PBXBuildFile; fileRef = 627998191FE1D04600B2DDD9 /* LOTKeypath.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 6279981E1FE1D9AC00B2DDD9 /* LOTKeypath.m in Sources */ = {isa = PBXBuildFile; fileRef = 6279981A1FE1D04600B2DDD9 /* LOTKeypath.m */; }; + 6279981F1FE1D9AD00B2DDD9 /* LOTKeypath.m in Sources */ = {isa = PBXBuildFile; fileRef = 6279981A1FE1D04600B2DDD9 /* LOTKeypath.m */; }; + 627998201FE1D9C800B2DDD9 /* LOTKeypath.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 627998191FE1D04600B2DDD9 /* LOTKeypath.h */; }; 6289053E1F33EA0F005154FA /* LOTCacheProvider.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = EE498E3D1F336A4900D1DFCD /* LOTCacheProvider.h */; }; 628905411F352472005154FA /* LOTRadialGradientLayer.h in Headers */ = {isa = PBXBuildFile; fileRef = 6289053F1F352472005154FA /* LOTRadialGradientLayer.h */; }; 628905421F352472005154FA /* LOTRadialGradientLayer.h in Headers */ = {isa = PBXBuildFile; fileRef = 6289053F1F352472005154FA /* LOTRadialGradientLayer.h */; }; @@ -204,6 +210,11 @@ 629EC5371F50DFFF005B2C59 /* LOTAnimatedControl.m in Sources */ = {isa = PBXBuildFile; fileRef = 629EC5361F50DFFF005B2C59 /* LOTAnimatedControl.m */; }; 629EC5381F50E00F005B2C59 /* LOTAnimatedControl.m in Sources */ = {isa = PBXBuildFile; fileRef = 629EC5361F50DFFF005B2C59 /* LOTAnimatedControl.m */; }; 629EC5391F50E02A005B2C59 /* LOTAnimatedControl.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 629EC5321F50DFE4005B2C59 /* LOTAnimatedControl.h */; }; + 62A62B4A1FE48220001A2C2F /* LOTValueCallback.h in Headers */ = {isa = PBXBuildFile; fileRef = 62A62B481FE48220001A2C2F /* LOTValueCallback.h */; }; + 62A62B4B1FE48220001A2C2F /* LOTValueCallback.h in Headers */ = {isa = PBXBuildFile; fileRef = 62A62B481FE48220001A2C2F /* LOTValueCallback.h */; }; + 62A62B4C1FE48220001A2C2F /* LOTValueCallback.m in Sources */ = {isa = PBXBuildFile; fileRef = 62A62B491FE48220001A2C2F /* LOTValueCallback.m */; }; + 62A62B4D1FE48220001A2C2F /* LOTValueCallback.m in Sources */ = {isa = PBXBuildFile; fileRef = 62A62B491FE48220001A2C2F /* LOTValueCallback.m */; }; + 62A62B4E1FE4A1DC001A2C2F /* LOTValueCallback.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 62A62B481FE48220001A2C2F /* LOTValueCallback.h */; }; 62BFC2DE1F14298D0068A342 /* LOTAnimatorNode.h in Headers */ = {isa = PBXBuildFile; fileRef = 62BFC2D01F14298D0068A342 /* LOTAnimatorNode.h */; }; 62BFC2DF1F14298D0068A342 /* LOTAnimatorNode.h in Headers */ = {isa = PBXBuildFile; fileRef = 62BFC2D01F14298D0068A342 /* LOTAnimatorNode.h */; }; 62BFC2E01F14298D0068A342 /* LOTAnimatorNode.m in Sources */ = {isa = PBXBuildFile; fileRef = 62BFC2D11F14298D0068A342 /* LOTAnimatorNode.m */; }; @@ -300,6 +311,8 @@ dstPath = include/Lottie; dstSubfolderSpec = 16; files = ( + 62A62B4E1FE4A1DC001A2C2F /* LOTValueCallback.h in CopyFiles */, + 627998201FE1D9C800B2DDD9 /* LOTKeypath.h in CopyFiles */, 629EC5391F50E02A005B2C59 /* LOTAnimatedControl.h in CopyFiles */, 629EC5311F50CC53005B2C59 /* LOTAnimatedSwitch.h in CopyFiles */, 6289053E1F33EA0F005154FA /* LOTCacheProvider.h in CopyFiles */, @@ -398,12 +411,16 @@ 6274D0191F1E82D000E05049 /* LOTLayerContainer.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = LOTLayerContainer.m; sourceTree = ""; }; 6274D01F1F1E830E00E05049 /* LOTTransformInterpolator.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = LOTTransformInterpolator.h; path = "lottie-ios/Classes/RenderSystem/InterpolatorNodes/LOTTransformInterpolator.h"; sourceTree = SOURCE_ROOT; }; 6274D0201F1E830E00E05049 /* LOTTransformInterpolator.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = LOTTransformInterpolator.m; path = "lottie-ios/Classes/RenderSystem/InterpolatorNodes/LOTTransformInterpolator.m"; sourceTree = SOURCE_ROOT; }; + 627998191FE1D04600B2DDD9 /* LOTKeypath.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = LOTKeypath.h; sourceTree = ""; }; + 6279981A1FE1D04600B2DDD9 /* LOTKeypath.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = LOTKeypath.m; sourceTree = ""; }; 6289053F1F352472005154FA /* LOTRadialGradientLayer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LOTRadialGradientLayer.h; sourceTree = ""; }; 628905401F352472005154FA /* LOTRadialGradientLayer.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = LOTRadialGradientLayer.m; sourceTree = ""; }; 629EC52A1F50CBF7005B2C59 /* LOTAnimatedSwitch.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LOTAnimatedSwitch.h; sourceTree = ""; }; 629EC52E1F50CC2E005B2C59 /* LOTAnimatedSwitch.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = LOTAnimatedSwitch.m; sourceTree = ""; }; 629EC5321F50DFE4005B2C59 /* LOTAnimatedControl.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LOTAnimatedControl.h; sourceTree = ""; }; 629EC5361F50DFFF005B2C59 /* LOTAnimatedControl.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = LOTAnimatedControl.m; sourceTree = ""; }; + 62A62B481FE48220001A2C2F /* LOTValueCallback.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = LOTValueCallback.h; sourceTree = ""; }; + 62A62B491FE48220001A2C2F /* LOTValueCallback.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = LOTValueCallback.m; sourceTree = ""; }; 62BFC2D01F14298D0068A342 /* LOTAnimatorNode.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = LOTAnimatorNode.h; path = "lottie-ios/Classes/RenderSystem/LOTAnimatorNode.h"; sourceTree = SOURCE_ROOT; }; 62BFC2D11F14298D0068A342 /* LOTAnimatorNode.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = LOTAnimatorNode.m; path = "lottie-ios/Classes/RenderSystem/LOTAnimatorNode.m"; sourceTree = SOURCE_ROOT; }; 62BFC2D21F14298D0068A342 /* LOTFillRenderer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = LOTFillRenderer.h; path = "lottie-ios/Classes/RenderSystem/RenderNodes/LOTFillRenderer.h"; sourceTree = SOURCE_ROOT; }; @@ -552,12 +569,14 @@ 481A4A571E4A7885003CF62B /* Private */ = { isa = PBXGroup; children = ( + 6279981A1FE1D04600B2DDD9 /* LOTKeypath.m */, 629EC5361F50DFFF005B2C59 /* LOTAnimatedControl.m */, 629EC52E1F50CC2E005B2C59 /* LOTAnimatedSwitch.m */, EE498E3B1F336A3B00D1DFCD /* LOTCacheProvider.m */, 62E27B491F3115AF0098420E /* LOTAnimationCache.m */, 622F77101F2BF6AA00269858 /* LOTComposition.m */, 481A4A581E4A7885003CF62B /* LOTAnimationTransitionController.m */, + 62A62B491FE48220001A2C2F /* LOTValueCallback.m */, 481A4A591E4A7885003CF62B /* LOTAnimationView.m */, 481A4A5A1E4A7885003CF62B /* LOTAnimationView_Internal.h */, ); @@ -702,6 +721,8 @@ 2DBA16351B4FA408937A16CE /* LOTAnimationView_Compat.h */, 622F770D1F2BF6A000269858 /* LOTComposition.h */, FA1F5A9F1E42B52800FF36BF /* LOTAnimationView.h */, + 62A62B481FE48220001A2C2F /* LOTValueCallback.h */, + 627998191FE1D04600B2DDD9 /* LOTKeypath.h */, 62CA59C41E3C179F002D7188 /* LOTAnimationTransitionController.h */, 629EC52A1F50CBF7005B2C59 /* LOTAnimatedSwitch.h */, 629EC5321F50DFE4005B2C59 /* LOTAnimatedControl.h */, @@ -725,6 +746,7 @@ 622F770E1F2BF6A000269858 /* LOTComposition.h in Headers */, 481A4AAF1E4A7885003CF62B /* LOTModels.h in Headers */, FA1F5AA01E42B52800FF36BF /* LOTAnimationView.h in Headers */, + 6279981B1FE1D04600B2DDD9 /* LOTKeypath.h in Headers */, 481A4A9F1E4A7885003CF62B /* UIColor+Expanded.h in Headers */, 481A4AB51E4A7885003CF62B /* LOTShapeFill.h in Headers */, 621A4F701F2275980065E14F /* LOTTrimPathNode.h in Headers */, @@ -765,6 +787,7 @@ 62BFC2DE1F14298D0068A342 /* LOTAnimatorNode.h in Headers */, 481A4AB11E4A7885003CF62B /* LOTShapeCircle.h in Headers */, 622F75E91F29508D00269858 /* LOTShapeGradientFill.h in Headers */, + 62A62B4A1FE48220001A2C2F /* LOTValueCallback.h in Headers */, 628905411F352472005154FA /* LOTRadialGradientLayer.h in Headers */, 62BFC2E31F14298D0068A342 /* LOTFillRenderer.h in Headers */, 62BFC3031F1449380068A342 /* LOTBezierData.h in Headers */, @@ -806,6 +829,7 @@ 481A4AC21E4A7885003CF62B /* LOTShapeRectangle.h in Headers */, 62BFC2F31F14298D0068A342 /* LOTRenderGroup.h in Headers */, 628905421F352472005154FA /* LOTRadialGradientLayer.h in Headers */, + 62A62B4B1FE48220001A2C2F /* LOTValueCallback.h in Headers */, 62C9EA441F1FDBF000DE7D07 /* LOTCircleAnimator.h in Headers */, 62BFC3041F1449380068A342 /* LOTBezierData.h in Headers */, 6201FAE71F200B4A00A047C9 /* LOTMaskContainer.h in Headers */, @@ -818,6 +842,7 @@ 622F76361F2A91CA00269858 /* LOTPolystarAnimator.h in Headers */, 481A4AD61E4A7885003CF62B /* LOTAnimationView_Internal.h in Headers */, FA1F5AA11E42B52800FF36BF /* LOTAnimationView.h in Headers */, + 6279981D1FE1D99F00B2DDD9 /* LOTKeypath.h in Headers */, 62BFC2EE1F14298D0068A342 /* LOTPathAnimator.h in Headers */, 62E27B471F31158B0098420E /* LOTAnimationCache.h in Headers */, 62BFC2DF1F14298D0068A342 /* LOTAnimatorNode.h in Headers */, @@ -988,6 +1013,7 @@ 6274CF8D1F16F29200E05049 /* LOTPointInterpolator.m in Sources */, 481A4AC71E4A7885003CF62B /* LOTShapeStroke.m in Sources */, 6274CF9B1F17E92F00E05049 /* LOTSizeInterpolator.m in Sources */, + 6279981C1FE1D04600B2DDD9 /* LOTKeypath.m in Sources */, 62BFC2E51F14298D0068A342 /* LOTFillRenderer.m in Sources */, 481A4AA91E4A7885003CF62B /* LOTLayer.m in Sources */, 62C9EA4C1F1FE6C800DE7D07 /* LOTRoundedRectAnimator.m in Sources */, @@ -998,6 +1024,7 @@ 62BFC2F41F14298D0068A342 /* LOTRenderGroup.m in Sources */, 6274CEBB1F157DCD00E05049 /* LOTNumberInterpolator.m in Sources */, 481A4ABB1E4A7885003CF62B /* LOTShapeGroup.m in Sources */, + 62A62B4C1FE48220001A2C2F /* LOTValueCallback.m in Sources */, 481A4AAD1E4A7885003CF62B /* LOTMask.m in Sources */, 62BFC2EF1F14298D0068A342 /* LOTPathAnimator.m in Sources */, 622F762E1F2A8CBA00269858 /* LOTShapeStar.m in Sources */, @@ -1048,6 +1075,7 @@ 62C9EA4E1F1FE6C800DE7D07 /* LOTRoundedRectAnimator.m in Sources */, 622F75ED1F29508D00269858 /* LOTShapeGradientFill.m in Sources */, 621A4F741F2275980065E14F /* LOTTrimPathNode.m in Sources */, + 6279981F1FE1D9AD00B2DDD9 /* LOTKeypath.m in Sources */, 84FE13081E4C1553009B157C /* UIColor+Expanded.m in Sources */, 621A4F6C1F216DC60065E14F /* LOTBezierPath.m in Sources */, 62BFC2F61F14298D0068A342 /* LOTRenderGroup.m in Sources */, @@ -1095,6 +1123,7 @@ 6274D0101F1D6CE200E05049 /* LOTStrokeRenderer.m in Sources */, 62BFC3061F1449380068A342 /* LOTBezierData.m in Sources */, 62C9EA271F1EB49000DE7D07 /* LOTCompositionContainer.m in Sources */, + 6279981E1FE1D9AC00B2DDD9 /* LOTKeypath.m in Sources */, 48183C9F1E54E20B0039F121 /* CGGeometry+LOTAdditions.m in Sources */, 481A4AAE1E4A7885003CF62B /* LOTMask.m in Sources */, 62C9EA461F1FDBF000DE7D07 /* LOTCircleAnimator.m in Sources */, @@ -1127,6 +1156,7 @@ 622F77121F2BF6AA00269858 /* LOTComposition.m in Sources */, 62BFC2F01F14298D0068A342 /* LOTPathAnimator.m in Sources */, 622F76581F2AC70400269858 /* LOTGradientFillRender.m in Sources */, + 62A62B4D1FE48220001A2C2F /* LOTValueCallback.m in Sources */, 622F76381F2A91CA00269858 /* LOTPolystarAnimator.m in Sources */, 6274D01D1F1E82D000E05049 /* LOTLayerContainer.m in Sources */, 481A4AAA1E4A7885003CF62B /* LOTLayer.m in Sources */, diff --git a/_AeFiles/Adobe After Effects Auto-Save/KeypathTest auto-save 1.aep b/_AeFiles/Adobe After Effects Auto-Save/KeypathTest auto-save 1.aep new file mode 100644 index 0000000000..ad42d66992 Binary files /dev/null and b/_AeFiles/Adobe After Effects Auto-Save/KeypathTest auto-save 1.aep differ diff --git a/_AeFiles/Adobe After Effects Auto-Save/KeypathTest auto-save 2.aep b/_AeFiles/Adobe After Effects Auto-Save/KeypathTest auto-save 2.aep new file mode 100644 index 0000000000..51c1bcc8a6 Binary files /dev/null and b/_AeFiles/Adobe After Effects Auto-Save/KeypathTest auto-save 2.aep differ diff --git a/_AeFiles/KeypathTest.aep b/_AeFiles/KeypathTest.aep new file mode 100644 index 0000000000..b55bc954fc Binary files /dev/null and b/_AeFiles/KeypathTest.aep differ diff --git a/lottie-ios/Classes/AnimatableLayers/LOTCompositionContainer.h b/lottie-ios/Classes/AnimatableLayers/LOTCompositionContainer.h index 3a94f370cc..52314e668e 100644 --- a/lottie-ios/Classes/AnimatableLayers/LOTCompositionContainer.h +++ b/lottie-ios/Classes/AnimatableLayers/LOTCompositionContainer.h @@ -16,13 +16,37 @@ withLayerGroup:(LOTLayerGroup * _Nullable)childLayerGroup withAssestGroup:(LOTAssetGroup * _Nullable)assetGroup; +- (nullable NSArray *)keysForKeyPath:(nonnull LOTKeypath *)keypath; + +- (CGPoint)convertPoint:(CGPoint)point + toKeypathLayer:(nonnull LOTKeypath *)keypath + withParentLayer:(CALayer *_Nonnull)parent; + +- (CGRect)convertRect:(CGRect)rect + toKeypathLayer:(nonnull LOTKeypath *)keypath + withParentLayer:(CALayer *_Nonnull)parent; + +- (CGPoint)convertPoint:(CGPoint)point + fromKeypathLayer:(nonnull LOTKeypath *)keypath + withParentLayer:(CALayer *_Nonnull)parent; + +- (CGRect)convertRect:(CGRect)rect + fromKeypathLayer:(nonnull LOTKeypath *)keypath + withParentLayer:(CALayer *_Nonnull)parent; + +- (void)addSublayer:(nonnull CALayer *)subLayer + toKeypathLayer:(nonnull LOTKeypath *)keypath; + +- (void)maskSublayer:(nonnull CALayer *)subLayer + toKeypathLayer:(nonnull LOTKeypath *)keypath; + - (void)addSublayer:(nonnull CALayer *)subLayer toLayerNamed:(nonnull NSString *)layerName - applyTransform:(BOOL)applyTransform; + applyTransform:(BOOL)applyTransform __deprecated; - (CGRect)convertRect:(CGRect)rect fromLayer:(CALayer *_Nonnull)fromlayer - toLayerNamed:(NSString *_Nonnull)layerName; + toLayerNamed:(NSString *_Nonnull)layerName __deprecated; @property (nonatomic, readonly, nonnull) NSArray *childLayers; @property (nonatomic, readonly, nonnull) NSDictionary *childMap; diff --git a/lottie-ios/Classes/AnimatableLayers/LOTCompositionContainer.m b/lottie-ios/Classes/AnimatableLayers/LOTCompositionContainer.m index 3aa06aa94e..237f163272 100644 --- a/lottie-ios/Classes/AnimatableLayers/LOTCompositionContainer.m +++ b/lottie-ios/Classes/AnimatableLayers/LOTCompositionContainer.m @@ -10,10 +10,15 @@ #import "LOTAsset.h" #import "CGGeometry+LOTAdditions.h" #import "LOTHelpers.h" +#import "LOTValueInterpolator.h" +#import "LOTAnimatorNode.h" +#import "LOTRenderNode.h" +#import "LOTRenderGroup.h" @implementation LOTCompositionContainer { NSNumber *_frameOffset; CALayer *DEBUG_Center; + NSMutableDictionary *_keypathCache; } - (instancetype)initWithModel:(LOTLayer *)layer @@ -42,7 +47,7 @@ - (instancetype)initWithModel:(LOTLayer *)layer } - (void)initializeWithChildGroup:(LOTLayerGroup *)childGroup - withAssetGroup:(LOTAssetGroup *)assetGroup { + withAssetGroup:(LOTAssetGroup *)assetGroup { NSMutableDictionary *childMap = [NSMutableDictionary dictionary]; NSMutableArray *children = [NSMutableArray array]; NSArray *reversedItems = [[childGroup.layers reverseObjectEnumerator] allObjects]; @@ -92,6 +97,134 @@ - (void)displayWithFrame:(NSNumber *)frame forceUpdate:(BOOL)forceUpdate { if (ENABLE_DEBUG_LOGGING) NSLog(@"-------------------- ------------------------------- --------------------"); } +- (void)setViewportBounds:(CGRect)viewportBounds { + [super setViewportBounds:viewportBounds]; + for (LOTLayerContainer *layer in _childLayers) { + layer.viewportBounds = viewportBounds; + } +} + +- (void)searchNodesForKeypath:(LOTKeypath * _Nonnull)keypath { + if (self.layerName != nil) { + [super searchNodesForKeypath:keypath]; + } + if (self.layerName == nil || + [keypath pushKey:self.layerName]) { + for (LOTLayerContainer *child in _childLayers) { + [child searchNodesForKeypath:keypath]; + } + if (self.layerName != nil) { + [keypath popKey]; + } + } +} + +- (void)setValueCallback:(nonnull LOTValueCallback *)callbackBlock + forKeypath:(nonnull LOTKeypath *)keypath { + if (self.layerName != nil) { + [super setValueCallback:callbackBlock forKeypath:keypath]; + } + if (self.layerName == nil || + [keypath pushKey:self.layerName]) { + for (LOTLayerContainer *child in _childLayers) { + [child setValueCallback:callbackBlock forKeypath:keypath]; + } + if (self.layerName != nil) { + [keypath popKey]; + } + } +} + +- (nullable NSArray *)keysForKeyPath:(nonnull LOTKeypath *)keypath { + if (_keypathCache == nil) { + _keypathCache = [NSMutableDictionary dictionary]; + } + [self searchNodesForKeypath:keypath]; + [_keypathCache addEntriesFromDictionary:keypath.searchResults]; + return keypath.searchResults.allKeys; +} + +- (CALayer *)_layerForKeypath:(nonnull LOTKeypath *)keypath { + LOTAnimatorNode *node = _keypathCache[keypath.absoluteKeypath]; + if (node == nil) { + [self keysForKeyPath:keypath]; + node = _keypathCache[keypath.absoluteKeypath]; + } + if (node == nil) { + NSLog(@"LOTComposition could not find layer for keypath:%@", keypath.absoluteKeypath); + return nil; + } + if (![node isKindOfClass:[LOTRenderNode class]]) { + NSLog(@"LOTComposition: Keypath return non-layer node:%@ ", keypath.absoluteKeypath); + return nil; + } + if ([node isKindOfClass:[LOTRenderGroup class]]) { + return [(LOTRenderGroup *)node containerLayer]; + } + LOTRenderNode *renderNode = (LOTRenderNode *)node; + return renderNode.outputLayer; +} + +- (CGPoint)convertPoint:(CGPoint)point + toKeypathLayer:(nonnull LOTKeypath *)keypath + withParentLayer:(CALayer *_Nonnull)parent{ + CALayer *layer = [self _layerForKeypath:keypath]; + if (!layer) { + return CGPointZero; + } + return [parent convertPoint:point toLayer:layer]; +} + +- (CGRect)convertRect:(CGRect)rect + toKeypathLayer:(nonnull LOTKeypath *)keypath + withParentLayer:(CALayer *_Nonnull)parent{ + CALayer *layer = [self _layerForKeypath:keypath]; + if (!layer) { + return CGRectZero; + } + return [parent convertRect:rect toLayer:layer]; +} + +- (CGPoint)convertPoint:(CGPoint)point + fromKeypathLayer:(nonnull LOTKeypath *)keypath + withParentLayer:(CALayer *_Nonnull)parent{ + CALayer *layer = [self _layerForKeypath:keypath]; + if (!layer) { + return CGPointZero; + } + return [parent convertPoint:point fromLayer:layer]; +} + +- (CGRect)convertRect:(CGRect)rect + fromKeypathLayer:(nonnull LOTKeypath *)keypath + withParentLayer:(CALayer *_Nonnull)parent{ + CALayer *layer = [self _layerForKeypath:keypath]; + if (!layer) { + return CGRectZero; + } + return [parent convertRect:rect fromLayer:layer]; +} + +- (void)addSublayer:(nonnull CALayer *)subLayer + toKeypathLayer:(nonnull LOTKeypath *)keypath { + CALayer *layer = [self _layerForKeypath:keypath]; + if (layer) { + [layer addSublayer:subLayer]; + } +} + +- (void)maskSublayer:(nonnull CALayer *)subLayer + toKeypathLayer:(nonnull LOTKeypath *)keypath { + CALayer *layer = [self _layerForKeypath:keypath]; + if (layer) { + [layer.superlayer addSublayer:subLayer]; + [layer removeFromSuperlayer]; + subLayer.mask = layer; + } +} + +# pragma mark - DEPRECATED + - (BOOL)setValue:(nonnull id)value forKeypath:(nonnull NSString *)keypath atFrame:(nullable NSNumber *)frame { @@ -149,13 +282,6 @@ - (CGRect)convertRect:(CGRect)rect return xRect; } -- (void)setViewportBounds:(CGRect)viewportBounds { - [super setViewportBounds:viewportBounds]; - for (LOTLayerContainer *layer in _childLayers) { - layer.viewportBounds = viewportBounds; - } -} - - (void)logHierarchyKeypathsWithParent:(NSString * _Nullable)parent { NSString *keypath = parent; if (parent && self.layerName) { diff --git a/lottie-ios/Classes/AnimatableLayers/LOTLayerContainer.h b/lottie-ios/Classes/AnimatableLayers/LOTLayerContainer.h index 8f606934e3..c9ed35b295 100644 --- a/lottie-ios/Classes/AnimatableLayers/LOTLayerContainer.h +++ b/lottie-ios/Classes/AnimatableLayers/LOTLayerContainer.h @@ -9,6 +9,8 @@ #import "LOTPlatformCompat.h" #import "LOTLayer.h" #import "LOTLayerGroup.h" +#import "LOTKeypath.h" +#import "LOTValueCallback.h" @interface LOTLayerContainer : CALayer @@ -19,15 +21,21 @@ @property (nonatomic, nullable) NSNumber *currentFrame; @property (nonatomic, assign) CGRect viewportBounds; @property (nonatomic, readonly, nonnull) CALayer *wrapperLayer; +@property (nonatomic, readonly, nonnull) NSDictionary *valueInterpolators; - (void)displayWithFrame:(NSNumber * _Nonnull)frame; - (void)displayWithFrame:(NSNumber * _Nonnull)frame forceUpdate:(BOOL)forceUpdate; -- (void)addAndMaskSublayer:(nonnull CALayer *)subLayer; +- (void)addAndMaskSublayer:(nonnull CALayer *)subLayer __deprecated; - (BOOL)setValue:(nonnull id)value forKeypath:(nonnull NSString *)keypath - atFrame:(nullable NSNumber *)frame; + atFrame:(nullable NSNumber *)frame __deprecated; -- (void)logHierarchyKeypathsWithParent:(NSString * _Nullable)parent; +- (void)logHierarchyKeypathsWithParent:(NSString * _Nullable)parent __deprecated; + +- (void)searchNodesForKeypath:(LOTKeypath * _Nonnull)keypath; + +- (void)setValueCallback:(nonnull LOTValueCallback *)callbackBlock + forKeypath:(nonnull LOTKeypath *)keypath; @end diff --git a/lottie-ios/Classes/AnimatableLayers/LOTLayerContainer.m b/lottie-ios/Classes/AnimatableLayers/LOTLayerContainer.m index a7a74882c5..14ae68adfc 100644 --- a/lottie-ios/Classes/AnimatableLayers/LOTLayerContainer.m +++ b/lottie-ios/Classes/AnimatableLayers/LOTLayerContainer.m @@ -27,7 +27,6 @@ @implementation LOTLayerContainer { CALayer *DEBUG_Center; LOTRenderGroup *_contentsGroup; LOTMaskContainer *_maskLayer; - NSDictionary *_valueInterpolators; } @dynamic currentFrame; @@ -102,6 +101,19 @@ - (void)commonInitializeWith:(LOTLayer *)layer } NSMutableDictionary *interpolators = [NSMutableDictionary dictionary]; + interpolators[@"Opacity"] = _opacityInterpolator; + interpolators[@"Anchor Point"] = _transformInterpolator.anchorInterpolator; + interpolators[@"Scale"] = _transformInterpolator.scaleInterpolator; + interpolators[@"Rotation"] = _transformInterpolator.rotationInterpolator; + if (_transformInterpolator.positionXInterpolator && + _transformInterpolator.positionYInterpolator) { + interpolators[@"X Position"] = _transformInterpolator.positionXInterpolator; + interpolators[@"Y Position"] = _transformInterpolator.positionYInterpolator; + } else if (_transformInterpolator.positionInterpolator) { + interpolators[@"Position"] = _transformInterpolator.positionInterpolator; + } + + // Deprecated interpolators[@"Transform.Opacity"] = _opacityInterpolator; interpolators[@"Transform.Anchor Point"] = _transformInterpolator.anchorInterpolator; interpolators[@"Transform.Scale"] = _transformInterpolator.scaleInterpolator; @@ -241,6 +253,39 @@ - (void)displayWithFrame:(NSNumber *)frame forceUpdate:(BOOL)forceUpdate { _maskLayer.currentFrame = frame; } +- (void)setViewportBounds:(CGRect)viewportBounds { + _viewportBounds = viewportBounds; + if (_maskLayer) { + CGPoint center = LOT_RectGetCenterPoint(viewportBounds); + viewportBounds.origin = CGPointMake(-center.x, -center.y); + _maskLayer.bounds = viewportBounds; + } +} + +- (void)searchNodesForKeypath:(LOTKeypath * _Nonnull)keypath { + [_contentsGroup searchNodesForKeypath:keypath]; +} + +- (void)setValueCallback:(nonnull LOTValueCallback *)callbackBlock + forKeypath:(nonnull LOTKeypath *)keypath { + if ([keypath pushKey:self.layerName]) { + // Matches self. + if ([keypath pushKey:@"Transform"]) { + // Is a transform node, check interpolators + LOTValueInterpolator *interpolator = _valueInterpolators[keypath.currentKey]; + if (interpolator) { + // We have a match! + [interpolator setValueCallback:callbackBlock]; + } + [keypath popKey]; + } + [keypath popKey]; + } + [_contentsGroup setValueCallback:callbackBlock forKeypath:keypath]; +} + +# pragma mark - DEPRECATED + - (void)addAndMaskSublayer:(nonnull CALayer *)subLayer { [_wrapperLayer addSublayer:subLayer]; } @@ -289,15 +334,6 @@ - (BOOL)setValue:(nonnull id)value return NO; } -- (void)setViewportBounds:(CGRect)viewportBounds { - _viewportBounds = viewportBounds; - if (_maskLayer) { - CGPoint center = LOT_RectGetCenterPoint(viewportBounds); - viewportBounds.origin = CGPointMake(-center.x, -center.y); - _maskLayer.bounds = viewportBounds; - } -} - - (void)logHierarchyKeypathsWithParent:(NSString * _Nullable)parent { [_contentsGroup logHierarchyKeypathsWithParent:parent]; } diff --git a/lottie-ios/Classes/Extensions/LOTBezierPath.h b/lottie-ios/Classes/Extensions/LOTBezierPath.h index f85c789704..5c90b5b989 100644 --- a/lottie-ios/Classes/Extensions/LOTBezierPath.h +++ b/lottie-ios/Classes/Extensions/LOTBezierPath.h @@ -12,6 +12,8 @@ NS_ASSUME_NONNULL_BEGIN @interface LOTBezierPath : NSObject ++ (instancetype)pathWithCGPath:(CGPathRef)path; + + (instancetype)newPath; - (void)LOT_moveToPoint:(CGPoint)point; diff --git a/lottie-ios/Classes/Extensions/LOTBezierPath.m b/lottie-ios/Classes/Extensions/LOTBezierPath.m index b534d5b641..499e712353 100644 --- a/lottie-ios/Classes/Extensions/LOTBezierPath.m +++ b/lottie-ios/Classes/Extensions/LOTBezierPath.m @@ -10,6 +10,7 @@ #import "CGGeometry+LOTAdditions.h" typedef struct LOT_Subpath LOT_Subpath; +typedef void(^LOTBezierPathEnumerationHandler)(const CGPathElement *element); struct LOT_Subpath { CGPathElementType type; @@ -36,6 +37,12 @@ @implementation LOTBezierPath { // MARK - Lifecycle ++ (instancetype)pathWithCGPath:(CGPathRef)path { + LOTBezierPath *returnPath = [LOTBezierPath newPath]; + [returnPath setWithCGPath:path]; + return returnPath; +} + + (instancetype)newPath { return [[LOTBezierPath alloc] init]; } @@ -281,8 +288,7 @@ - (void)trimPathFromT:(CGFloat)fromT toT:(CGFloat)toT offset:(CGFloat)offset { CGFloat totalLength = _length; [self _clearPathData]; - - + LOT_Subpath *subpath = headSubpath_; headSubpath_ = NULL; tailSubpath_ = NULL; @@ -416,4 +422,50 @@ - (void)trimPathFromT:(CGFloat)fromT toT:(CGFloat)toT offset:(CGFloat)offset { } } +#pragma mark - From CGPath + +- (void)setWithCGPath:(CGPathRef)path { + [self lot_enumeratePath:path elementsUsingBlock:^(const CGPathElement *element) { + switch (element->type) { + case kCGPathElementMoveToPoint: { + CGPoint point = element ->points[0]; + [self LOT_moveToPoint:point]; + break; + } + case kCGPathElementAddLineToPoint: { + CGPoint point = element ->points[0]; + [self LOT_addLineToPoint:point]; + break; + } + case kCGPathElementAddQuadCurveToPoint: { + break; + } + case kCGPathElementAddCurveToPoint: { + CGPoint point1 = element->points[0]; + CGPoint point2 = element->points[1]; + CGPoint point3 = element->points[2]; + [self LOT_addCurveToPoint:point3 controlPoint1:point1 controlPoint2:point2]; + break; + } + case kCGPathElementCloseSubpath: { + [self LOT_closePath]; + break; + } + } + }]; +} + +- (void)lot_enumeratePath:(CGPathRef)cgPath elementsUsingBlock:(LOTBezierPathEnumerationHandler)handler { + void CGPathEnumerationCallback(void *info, const CGPathElement *element); + CGPathApply(cgPath, (__bridge void * _Nullable)(handler), CGPathEnumerationCallback); +} + @end + +void CGPathEnumerationCallback(void *info, const CGPathElement *element) +{ + LOTBezierPathEnumerationHandler handler = (__bridge LOTBezierPathEnumerationHandler)(info); + if (handler) { + handler(element); + } +} diff --git a/lottie-ios/Classes/Private/LOTAnimationView.m b/lottie-ios/Classes/Private/LOTAnimationView.m index 1a6161cc09..303229987b 100644 --- a/lottie-ios/Classes/Private/LOTAnimationView.m +++ b/lottie-ios/Classes/Private/LOTAnimationView.m @@ -24,7 +24,6 @@ @implementation LOTAnimationView { CGFloat _playRangeEndProgress; NSBundle *_bundle; CGFloat _animationProgress; - // Properties for tracking automatic restoration of animation. BOOL _shouldRestoreStateWhenAttachedToWindow; LOTAnimationCompletionBlock _completionBlockToRestoreWhenAttachedToWindow; @@ -159,9 +158,6 @@ - (void)_setupWithSceneModel:(LOTComposition *)model { _sceneModel = model; _compContainer = [[LOTCompositionContainer alloc] initWithModel:nil inLayerGroup:nil withLayerGroup:_sceneModel.layerGroup withAssestGroup:_sceneModel.assetGroup]; [self.layer addSublayer:_compContainer]; - if (ENABLE_DEBUG_LOGGING) { - [self logHierarchyKeypaths]; - } [self _restoreState]; [self setNeedsLayout]; } @@ -414,65 +410,96 @@ - (void)setCacheEnable:(BOOL)cacheEnable { } } -# pragma mark - External Methods - Other +# pragma mark - External Methods - Interactive Controls + +- (void)setValueCallback:(nonnull LOTValueCallback *)callbackBlock + forKeypath:(nonnull LOTKeypath *)keypath { + [_compContainer setValueCallback:callbackBlock forKeypath:keypath]; + [self _layoutAndForceUpdate]; +} + +- (nullable NSArray *)keysForKeyPath:(nonnull LOTKeypath *)keypath { + return [_compContainer keysForKeyPath:keypath]; +} + +- (CGPoint)convertPoint:(CGPoint)point + toKeypathLayer:(nonnull LOTKeypath *)keypath { + [self _layoutAndForceUpdate]; + return [_compContainer convertPoint:point toKeypathLayer:keypath withParentLayer:self.layer]; +} + +- (CGRect)convertRect:(CGRect)rect + toKeypathLayer:(nonnull LOTKeypath *)keypath { + [self _layoutAndForceUpdate]; + return [_compContainer convertRect:rect toKeypathLayer:keypath withParentLayer:self.layer]; +} + +- (CGPoint)convertPoint:(CGPoint)point + fromKeypathLayer:(nonnull LOTKeypath *)keypath { + [self _layoutAndForceUpdate]; + return [_compContainer convertPoint:point fromKeypathLayer:keypath withParentLayer:self.layer]; +} + +- (CGRect)convertRect:(CGRect)rect + fromKeypathLayer:(nonnull LOTKeypath *)keypath { + [self _layoutAndForceUpdate]; + return [_compContainer convertRect:rect fromKeypathLayer:keypath withParentLayer:self.layer]; +} #if TARGET_OS_IPHONE || TARGET_OS_SIMULATOR - (void)addSubview:(nonnull LOTView *)view - toLayerNamed:(nonnull NSString *)layer - applyTransform:(BOOL)applyTransform { - [self _layout]; + toKeypathLayer:(nonnull LOTKeypath *)keypath { + [self _layoutAndForceUpdate]; CGRect viewRect = view.frame; LOTView *wrapperView = [[LOTView alloc] initWithFrame:viewRect]; view.frame = view.bounds; view.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight; [wrapperView addSubview:view]; [self addSubview:wrapperView]; - [_compContainer addSublayer:wrapperView.layer toLayerNamed:layer applyTransform:applyTransform]; + [_compContainer addSublayer:wrapperView.layer toKeypathLayer:keypath]; +} + +- (void)maskSubview:(nonnull LOTView *)view + toKeypathLayer:(nonnull LOTKeypath *)keypath { + [self _layoutAndForceUpdate]; + CGRect viewRect = view.frame; + LOTView *wrapperView = [[LOTView alloc] initWithFrame:viewRect]; + view.frame = view.bounds; + view.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight; + [wrapperView addSubview:view]; + [self addSubview:wrapperView]; + [_compContainer maskSublayer:wrapperView.layer toKeypathLayer:keypath]; } + #else - (void)addSubview:(nonnull LOTView *)view - toLayerNamed:(nonnull NSString *)layer - applyTransform:(BOOL)applyTransform { + toKeypathLayer:(nonnull LOTKeypath *)keypath { + [self _layout]; CGRect viewRect = view.frame; LOTView *wrapperView = [[LOTView alloc] initWithFrame:viewRect]; view.frame = view.bounds; view.autoresizingMask = NSViewWidthSizable | NSViewHeightSizable; [wrapperView addSubview:view]; [self addSubview:wrapperView]; - [_compContainer addSublayer:wrapperView.layer toLayerNamed:layer applyTransform:applyTransform]; + [_compContainer addSublayer:wrapperView.layer toKeypathLayer:keypath]; } -#endif - -- (CGRect)convertRect:(CGRect)rect - toLayerNamed:(NSString *_Nullable)layerName { +- (void)maskSubview:(nonnull LOTView *)view + toKeypathLayer:(nonnull LOTKeypath *)keypath { [self _layout]; - if (layerName == nil) { - return [self.layer convertRect:rect toLayer:_compContainer]; - } - return [_compContainer convertRect:rect fromLayer:self.layer toLayerNamed:layerName]; -} - -- (void)setValue:(nonnull id)value - forKeypath:(nonnull NSString *)keypath - atFrame:(nullable NSNumber *)frame{ - BOOL didUpdate = [_compContainer setValue:value forKeypath:keypath atFrame:frame]; - if (didUpdate) { - [CATransaction begin]; - [CATransaction setDisableActions:YES]; - [_compContainer displayWithFrame:_compContainer.currentFrame forceUpdate:YES]; - [CATransaction commit]; - } else { - NSLog(@"%s: Keypath Not Found: %@", __PRETTY_FUNCTION__, keypath); - } + CGRect viewRect = view.frame; + LOTView *wrapperView = [[LOTView alloc] initWithFrame:viewRect]; + view.frame = view.bounds; + view.autoresizingMask = NSViewWidthSizable | NSViewHeightSizable; + [wrapperView addSubview:view]; + [self addSubview:wrapperView]; + [_compContainer maskSublayer:wrapperView.layer toKeypathLayer:keypath]; } -- (void)logHierarchyKeypaths { - [_compContainer logHierarchyKeypathsWithParent:nil]; -} +#endif # pragma mark - Semi-Private Methods @@ -615,6 +642,14 @@ - (void)layout { #endif +- (void)_layoutAndForceUpdate { + [CATransaction begin]; + [CATransaction setDisableActions:YES]; + [self _layout]; + [_compContainer displayWithFrame:_compContainer.currentFrame forceUpdate:YES]; + [CATransaction commit]; +} + - (void)_layout { CGPoint centerPoint = LOT_RectGetCenterPoint(self.bounds); CATransform3D xform; @@ -671,4 +706,68 @@ - (void)animationDidStop:(CAAnimation *)anim finished:(BOOL)complete { } } +# pragma mark - DEPRECATED + +#if TARGET_OS_IPHONE || TARGET_OS_SIMULATOR + +- (void)addSubview:(nonnull LOTView *)view + toLayerNamed:(nonnull NSString *)layer + applyTransform:(BOOL)applyTransform { + NSLog(@"%s: Function is DEPRECATED. Please use addSubview:forKeypathLayer:", __PRETTY_FUNCTION__); + [self _layout]; + CGRect viewRect = view.frame; + LOTView *wrapperView = [[LOTView alloc] initWithFrame:viewRect]; + view.frame = view.bounds; + view.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight; + [wrapperView addSubview:view]; + [self addSubview:wrapperView]; + [_compContainer addSublayer:wrapperView.layer toLayerNamed:layer applyTransform:applyTransform]; +} + +#else + +- (void)addSubview:(nonnull LOTView *)view + toLayerNamed:(nonnull NSString *)layer + applyTransform:(BOOL)applyTransform { + NSLog(@"%s: Function is DEPRECATED. Please use addSubview:forKeypathLayer:", __PRETTY_FUNCTION__); + CGRect viewRect = view.frame; + LOTView *wrapperView = [[LOTView alloc] initWithFrame:viewRect]; + view.frame = view.bounds; + view.autoresizingMask = NSViewWidthSizable | NSViewHeightSizable; + [wrapperView addSubview:view]; + [self addSubview:wrapperView]; + [_compContainer addSublayer:wrapperView.layer toLayerNamed:layer applyTransform:applyTransform]; +} + +#endif + +- (CGRect)convertRect:(CGRect)rect + toLayerNamed:(NSString *_Nullable)layerName { + NSLog(@"%s: Function is DEPRECATED. Please use convertRect:forKeypathLayer:", __PRETTY_FUNCTION__); + [self _layout]; + if (layerName == nil) { + return [self.layer convertRect:rect toLayer:_compContainer]; + } + return [_compContainer convertRect:rect fromLayer:self.layer toLayerNamed:layerName]; +} + +- (void)setValue:(nonnull id)value + forKeypath:(nonnull NSString *)keypath + atFrame:(nullable NSNumber *)frame{ + NSLog(@"%s: Function is DEPRECATED. Please use setValueCallback:forKeypath:", __PRETTY_FUNCTION__); + BOOL didUpdate = [_compContainer setValue:value forKeypath:keypath atFrame:frame]; + if (didUpdate) { + [CATransaction begin]; + [CATransaction setDisableActions:YES]; + [_compContainer displayWithFrame:_compContainer.currentFrame forceUpdate:YES]; + [CATransaction commit]; + } else { + NSLog(@"%s: Keypath Not Found: %@", __PRETTY_FUNCTION__, keypath); + } +} + +- (void)logHierarchyKeypaths { + [_compContainer logHierarchyKeypathsWithParent:nil]; +} + @end diff --git a/lottie-ios/Classes/Private/LOTKeypath.m b/lottie-ios/Classes/Private/LOTKeypath.m new file mode 100644 index 0000000000..1241c165c1 --- /dev/null +++ b/lottie-ios/Classes/Private/LOTKeypath.m @@ -0,0 +1,140 @@ +// +// LOTKeypath.m +// Lottie_iOS +// +// Created by brandon_withrow on 12/13/17. +// Copyright © 2017 Airbnb. All rights reserved. +// + +#import "LOTKeypath.h" + +NSString *const kLOTKeypathEnd = @"LOTENDKEYPATH"; + +@implementation LOTKeypath { + NSInteger _currentDepth; + NSMutableArray *_fuzzyDepthStack; + NSMutableArray *_currentStack; + NSArray *_keys; + NSMutableDictionary *_searchResults; +} + ++ (nonnull LOTKeypath *)keypathWithString:(nonnull NSString *)keypath { + return [[LOTKeypath alloc] initWithKeys:[keypath componentsSeparatedByString:@"."]]; +} + ++ (nonnull LOTKeypath *)keypathWithKeys:(nonnull NSString *)firstKey, ... { + NSMutableArray *keys = [NSMutableArray array]; + va_list args; + va_start(args, firstKey); + for (NSString *arg = firstKey; arg != nil; arg = va_arg(args, NSString*)) + { + [keys addObject:arg]; + } + va_end(args); + return [[LOTKeypath alloc] initWithKeys:keys]; +} + +- (instancetype)initWithKeys:(NSArray *)keys { + self = [super init]; + if (self) { + _keys = [NSArray arrayWithArray:keys]; + NSMutableString *absolutePath = [NSMutableString string]; + for (int i = 0; i < _keys.count; i++) { + if (i > 0) { + [absolutePath appendString:@"."]; + } + [absolutePath appendString:_keys[i]]; + } + _currentStack = [NSMutableArray array]; + _absoluteKeypath = absolutePath; + _currentDepth = 0; + _fuzzyDepthStack = [NSMutableArray array]; + _searchResults = [NSMutableDictionary dictionary]; + } + return self; +} + +- (BOOL)pushKey:(nonnull NSString *)key { + if (_currentDepth == _keys.count && + self.hasFuzzyWildcard == NO) { + return NO; + } + NSString *current = self.currentKey; + if (self.hasWildcard || + [current isEqualToString:key]) { + [_currentStack addObject:[key copy]]; + _currentDepth ++; + if (self.hasFuzzyWildcard) { + [_fuzzyDepthStack addObject:@(_currentDepth)]; + } + return YES; + } else if (self.hasFuzzyWildcard) { + [_currentStack addObject:[key copy]]; + return YES; + } + return NO; +} + +- (void)popKey { + if (_currentDepth == 0) { + return; + } + NSInteger stackCount = _currentStack.count; + [_currentStack removeLastObject]; + + if (self.hasFuzzyWildcard ) { + if (stackCount == _fuzzyDepthStack.lastObject.integerValue) { + [_fuzzyDepthStack removeLastObject]; + } else { + return; + } + } + _currentDepth --; +} + +- (void)popToRootKey { + _currentDepth = 0; + [_currentStack removeAllObjects]; + [_fuzzyDepthStack removeAllObjects]; +} + +- (NSString *)currentKey { + if (_currentDepth == _keys.count) { + return kLOTKeypathEnd; + } + return _keys[_currentDepth]; +} + +- (NSString *)currentKeyPath { + return [_currentStack componentsJoinedByString:@"."]; +} + +- (BOOL)hasWildcard { + if (_currentDepth == _keys.count) { + return NO; + } + return ([_keys[_currentDepth] isEqualToString:@"**"] || + [_keys[_currentDepth] isEqualToString:@"*"]); +} + +- (BOOL)hasFuzzyWildcard { + if (_currentDepth == 0 || + _currentDepth > _keys.count) { + return NO; + } + return [_keys[_currentDepth - 1] isEqualToString:@"**"]; +} + +- (BOOL)endOfKeypath { + return (_currentDepth == _keys.count); +} + +- (void)addSearchResultForCurrentPath:(id _Nonnull)result { + [_searchResults setObject:result forKey:self.currentKeyPath]; +} + +- (NSDictionary *)searchResults { + return _searchResults; +} + +@end diff --git a/lottie-ios/Classes/Private/LOTValueCallback.m b/lottie-ios/Classes/Private/LOTValueCallback.m new file mode 100644 index 0000000000..be56f6aa93 --- /dev/null +++ b/lottie-ios/Classes/Private/LOTValueCallback.m @@ -0,0 +1,63 @@ +// +// LOTValueCallback.m +// Lottie +// +// Created by brandon_withrow on 12/15/17. +// Copyright © 2017 Airbnb. All rights reserved. +// + +#import "LOTValueCallback.h" + +@implementation LOTValueCallback + +@end + +@implementation LOTColorValueCallback + ++ (instancetype)withBlock:(LOTColorValueCallbackBlock)block { + LOTColorValueCallback *colorCallback = [[LOTColorValueCallback alloc] init]; + colorCallback.callback = block; + return colorCallback; +} + +@end + +@implementation LOTNumberValueCallback + ++ (instancetype)withBlock:(LOTNumberValueCallbackBlock)block { + LOTNumberValueCallback *numberCallback = [[LOTNumberValueCallback alloc] init]; + numberCallback.callback = block; + return numberCallback; +} + +@end + +@implementation LOTPointValueCallback + ++ (instancetype)withBlock:(LOTPointValueCallbackBlock)block { + LOTPointValueCallback *callback = [[LOTPointValueCallback alloc] init]; + callback.callback = block; + return callback; +} + +@end + +@implementation LOTSizeValueCallback + ++ (instancetype)withBlock:(LOTSizeValueCallbackBlock)block { + LOTSizeValueCallback *callback = [[LOTSizeValueCallback alloc] init]; + callback.callback = block; + return callback; +} + +@end + +@implementation LOTPathValueCallback + ++ (instancetype)withBlock:(LOTPathValueCallbackBlock)block { + LOTPathValueCallback *callback = [[LOTPathValueCallback alloc] init]; + callback.callback = block; + return callback; +} + +@end diff --git a/lottie-ios/Classes/PublicHeaders/LOTAnimationView.h b/lottie-ios/Classes/PublicHeaders/LOTAnimationView.h index 4520f21936..1746c17afc 100644 --- a/lottie-ios/Classes/PublicHeaders/LOTAnimationView.h +++ b/lottie-ios/Classes/PublicHeaders/LOTAnimationView.h @@ -9,6 +9,8 @@ #import #import "LOTAnimationView_Compat.h" #import "LOTComposition.h" +#import "LOTKeypath.h" +#import "LOTValueCallback.h" typedef void (^LOTAnimationCompletionBlock)(BOOL animationFinished); @@ -66,7 +68,7 @@ typedef void (^LOTAnimationCompletionBlock)(BOOL animationFinished); @property (nonatomic, strong, nullable) LOTComposition *sceneModel; /* - * Plays the animation from its current position to a specific progress. + * Plays the animation from its current position to a specific progress. * The animation will start from its current position. * If loopAnimation is YES the animation will loop from start position to toProgress indefinitely. * If loopAnimation is NO the animation will stop and the comletion block will be called. @@ -94,7 +96,7 @@ typedef void (^LOTAnimationCompletionBlock)(BOOL animationFinished); withCompletion:(nullable LOTAnimationCompletionBlock)completion; /* - * Plays the animation from specific frame to a specific frame. + * Plays the animation from specific frame to a specific frame. * The animation will start from its current position. * If loopAnimation is YES the animation will loop start frame to end frame indefinitely. * If loopAnimation is NO the animation will stop and the comletion block will be called. @@ -132,35 +134,35 @@ typedef void (^LOTAnimationCompletionBlock)(BOOL animationFinished); * @param keypath NSString . separate keypath * The Keypath is a dot seperated key path that specifies the location of the key to * be set from the After Effects file. This will begin with the Layer Name. - * EG "Layer 1.Shape 1.Fill 1.Color" + * EG "Layer 1.Shape 1.Fill 1.Color" * * @param frame - * The frame is the frame to be set. - * If the keyframe exists it will be overwritten, if it does not exist a new + * The frame is the frame to be set. + * If the keyframe exists it will be overwritten, if it does not exist a new * Linearlly interpolated keyframe will be added **/ - (void)setValue:(nonnull id)value forKeypath:(nonnull NSString *)keypath - atFrame:(nullable NSNumber *)frame; + atFrame:(nullable NSNumber *)frame __deprecated; /// Logs all child keypaths -- (void)logHierarchyKeypaths; +- (void)logHierarchyKeypaths __deprecated; /** - * Adds a custom subview to the animation using a LayerName from After Effects + * Adds a custom subview to the animation using a LayerName from After Effects * as a reference point. * * @param view The custom view instance to be added * * @param layer The string name of the After Effects layer to be referenced. * - * @param applyTransform If YES the custom view will be animated to move with the + * @param applyTransform If YES the custom view will be animated to move with the * specified After Effects layer. * If NO the custom view will be masked by the After Effects layer **/ - (void)addSubview:(nonnull LOTView *)view toLayerNamed:(nonnull NSString *)layer - applyTransform:(BOOL)applyTransform; + applyTransform:(BOOL)applyTransform __deprecated; /** * Converts the given CGRect from the recieving animation view's coordinate space @@ -171,7 +173,30 @@ typedef void (^LOTAnimationCompletionBlock)(BOOL animationFinished); **/ - (CGRect)convertRect:(CGRect)rect - toLayerNamed:(NSString *_Nullable)layerName; + toLayerNamed:(NSString *_Nullable)layerName __deprecated; + +- (void)setValueCallback:(nonnull LOTValueCallback *)callback + forKeypath:(nonnull LOTKeypath *)keypath; + +- (nullable NSArray *)keysForKeyPath:(nonnull LOTKeypath *)keypath; + +- (CGPoint)convertPoint:(CGPoint)point + toKeypathLayer:(nonnull LOTKeypath *)keypath; + +- (CGRect)convertRect:(CGRect)rect + toKeypathLayer:(nonnull LOTKeypath *)keypath; + +- (CGPoint)convertPoint:(CGPoint)point + fromKeypathLayer:(nonnull LOTKeypath *)keypath; + +- (CGRect)convertRect:(CGRect)rect + fromKeypathLayer:(nonnull LOTKeypath *)keypath; + +- (void)addSubview:(nonnull LOTView *)view + toKeypathLayer:(nonnull LOTKeypath *)keypath; + +- (void)maskSubview:(nonnull LOTView *)view + toKeypathLayer:(nonnull LOTKeypath *)keypath; #if !TARGET_OS_IPHONE && !TARGET_OS_SIMULATOR @property (nonatomic) LOTViewContentMode contentMode; diff --git a/lottie-ios/Classes/PublicHeaders/LOTKeypath.h b/lottie-ios/Classes/PublicHeaders/LOTKeypath.h new file mode 100644 index 0000000000..b02eb1d233 --- /dev/null +++ b/lottie-ios/Classes/PublicHeaders/LOTKeypath.h @@ -0,0 +1,36 @@ +// +// LOTKeypath.h +// Lottie_iOS +// +// Created by brandon_withrow on 12/13/17. +// Copyright © 2017 Airbnb. All rights reserved. +// + +#import + +extern NSString * _Nonnull const kLOTKeypathEnd; + +@interface LOTKeypath : NSObject + ++ (nonnull LOTKeypath *)keypathWithString:(nonnull NSString *)keypath; + ++ (nonnull LOTKeypath *)keypathWithKeys:(nonnull NSString *)firstKey, ... + NS_REQUIRES_NIL_TERMINATION; + +@property (nonatomic, readonly, nonnull) NSString *absoluteKeypath; +@property (nonatomic, readonly, nonnull) NSString *currentKey; +@property (nonatomic, readonly, nonnull) NSString *currentKeyPath; + +@property (nonatomic, readonly, nonnull) NSDictionary *searchResults; + +@property (nonatomic, readonly) BOOL hasFuzzyWildcard; +@property (nonatomic, readonly) BOOL hasWildcard; +@property (nonatomic, readonly) BOOL endOfKeypath; + +- (BOOL)pushKey:(nonnull NSString *)key; +- (void)popKey; +- (void)popToRootKey; + +- (void)addSearchResultForCurrentPath:(id _Nonnull)result; + +@end diff --git a/lottie-ios/Classes/PublicHeaders/LOTValueCallback.h b/lottie-ios/Classes/PublicHeaders/LOTValueCallback.h new file mode 100644 index 0000000000..b20f3e25e0 --- /dev/null +++ b/lottie-ios/Classes/PublicHeaders/LOTValueCallback.h @@ -0,0 +1,94 @@ +// +// LOTValueCallback.h +// Lottie +// +// Created by brandon_withrow on 12/15/17. +// Copyright © 2017 Airbnb. All rights reserved. +// + +#import +#import "LOTPlatformCompat.h" + +typedef UIColor * _Nonnull (^LOTColorValueCallbackBlock)(CGFloat startFrame, + CGFloat endFrame, + UIColor * _Nullable startColor, + UIColor * _Nullable endColor, + UIColor * _Nullable interpolatedColor, + CGFloat interpolatedProgress, + CGFloat currentFrame); + +typedef CGFloat (^LOTNumberValueCallbackBlock)(CGFloat startFrame, + CGFloat endFrame, + CGFloat startValue, + CGFloat endValue, + CGFloat interpolatedValue, + CGFloat interpolatedProgress, + CGFloat currentFrame); + +typedef CGPoint (^LOTPointValueCallbackBlock)(CGFloat startFrame, + CGFloat endFrame, + CGPoint startPoint, + CGPoint endPoint, + CGPoint interpolatedPoint, + CGFloat interpolatedProgress, + CGFloat currentFrame); + +typedef CGSize (^LOTSizeValueCallbackBlock)(CGFloat startFrame, + CGFloat endFrame, + CGSize startSize, + CGSize endSize, + CGSize interpolatedSize, + CGFloat interpolatedProgress, + CGFloat currentFrame); + +typedef UIBezierPath * _Nonnull (^LOTPathValueCallbackBlock)(CGFloat startFrame, + CGFloat endFrame, + CGFloat interpolatedProgress, + CGFloat currentFrame); + +@interface LOTValueCallback : NSObject + + +@end + +@interface LOTColorValueCallback : LOTValueCallback + ++ (instancetype _Nonnull)withBlock:(LOTColorValueCallbackBlock _Nonnull )block; + +@property (nonatomic, copy, nonnull) LOTColorValueCallbackBlock callback; + +@end + +@interface LOTNumberValueCallback : LOTValueCallback + ++ (instancetype _Nonnull)withBlock:(LOTNumberValueCallbackBlock _Nonnull)block; + +@property (nonatomic, copy, nonnull) LOTNumberValueCallbackBlock callback; + +@end + +@interface LOTPointValueCallback : LOTValueCallback + ++ (instancetype _Nonnull)withBlock:(LOTPointValueCallbackBlock _Nonnull)block; + +@property (nonatomic, copy, nonnull) LOTPointValueCallbackBlock callback; + +@end + +@interface LOTSizeValueCallback : LOTValueCallback + ++ (instancetype _Nonnull)withBlock:(LOTSizeValueCallbackBlock _Nonnull)block; + +@property (nonatomic, copy, nonnull) LOTSizeValueCallbackBlock callback; + + +@end + +@interface LOTPathValueCallback : LOTValueCallback + ++ (instancetype _Nonnull)withBlock:(LOTPathValueCallbackBlock _Nonnull)block; + +@property (nonatomic, copy, nonnull) LOTPathValueCallbackBlock callback; + + +@end diff --git a/lottie-ios/Classes/RenderSystem/InterpolatorNodes/LOTColorInterpolator.h b/lottie-ios/Classes/RenderSystem/InterpolatorNodes/LOTColorInterpolator.h index b07cf685c8..7cfcf6b8b2 100644 --- a/lottie-ios/Classes/RenderSystem/InterpolatorNodes/LOTColorInterpolator.h +++ b/lottie-ios/Classes/RenderSystem/InterpolatorNodes/LOTColorInterpolator.h @@ -8,6 +8,7 @@ #import "LOTValueInterpolator.h" #import "LOTPlatformCompat.h" +#import "LOTValueCallback.h" NS_ASSUME_NONNULL_BEGIN @@ -15,6 +16,8 @@ NS_ASSUME_NONNULL_BEGIN - (UIColor *)colorForFrame:(NSNumber *)frame; +@property (nonatomic, strong, nullable) LOTColorValueCallback *colorCallback; + @end NS_ASSUME_NONNULL_END diff --git a/lottie-ios/Classes/RenderSystem/InterpolatorNodes/LOTColorInterpolator.m b/lottie-ios/Classes/RenderSystem/InterpolatorNodes/LOTColorInterpolator.m index 6dd6dab005..b224a907a1 100644 --- a/lottie-ios/Classes/RenderSystem/InterpolatorNodes/LOTColorInterpolator.m +++ b/lottie-ios/Classes/RenderSystem/InterpolatorNodes/LOTColorInterpolator.m @@ -14,13 +14,19 @@ @implementation LOTColorInterpolator - (UIColor *)colorForFrame:(NSNumber *)frame { CGFloat progress = [self progressForFrame:frame]; + UIColor *returnColor; + if (progress == 0) { - return self.leadingKeyframe.colorValue; + returnColor = self.leadingKeyframe.colorValue; + } else if (progress == 1) { + returnColor = self.trailingKeyframe.colorValue; + } else { + returnColor = [UIColor LOT_colorByLerpingFromColor:self.leadingKeyframe.colorValue toColor:self.trailingKeyframe.colorValue amount:progress]; } - if (progress == 1) { - return self.trailingKeyframe.colorValue; + if (self.hasValueOverride) { + return self.colorCallback.callback(self.leadingKeyframe.keyframeTime.floatValue, self.trailingKeyframe.keyframeTime.floatValue, self.leadingKeyframe.colorValue, self.trailingKeyframe.colorValue, returnColor, progress, frame.floatValue); } - UIColor *returnColor = [UIColor LOT_colorByLerpingFromColor:self.leadingKeyframe.colorValue toColor:self.trailingKeyframe.colorValue amount:progress]; + return returnColor; } @@ -32,4 +38,13 @@ - (id)keyframeDataForValue:(id)value { return nil; } +- (void)setValueCallback:(LOTValueCallback *)valueCallback { + NSAssert(([valueCallback isKindOfClass:[LOTColorValueCallback class]]), @"Color Interpolator set with incorrect callback type. Expected LOTColorValueCallback"); + self.colorCallback = (LOTColorValueCallback *)valueCallback; +} + +- (BOOL)hasValueOverride { + return self.colorCallback != nil; +} + @end diff --git a/lottie-ios/Classes/RenderSystem/InterpolatorNodes/LOTNumberInterpolator.h b/lottie-ios/Classes/RenderSystem/InterpolatorNodes/LOTNumberInterpolator.h index 9c0e877a4b..06eb692f30 100644 --- a/lottie-ios/Classes/RenderSystem/InterpolatorNodes/LOTNumberInterpolator.h +++ b/lottie-ios/Classes/RenderSystem/InterpolatorNodes/LOTNumberInterpolator.h @@ -8,12 +8,15 @@ #import #import "LOTValueInterpolator.h" +#import "LOTValueCallback.h" NS_ASSUME_NONNULL_BEGIN @interface LOTNumberInterpolator : LOTValueInterpolator - (CGFloat)floatValueForFrame:(NSNumber *)frame; +@property (nonatomic, strong, nullable) LOTNumberValueCallback *numberCallback; + @end NS_ASSUME_NONNULL_END diff --git a/lottie-ios/Classes/RenderSystem/InterpolatorNodes/LOTNumberInterpolator.m b/lottie-ios/Classes/RenderSystem/InterpolatorNodes/LOTNumberInterpolator.m index d55a323f05..56e957e414 100644 --- a/lottie-ios/Classes/RenderSystem/InterpolatorNodes/LOTNumberInterpolator.m +++ b/lottie-ios/Classes/RenderSystem/InterpolatorNodes/LOTNumberInterpolator.m @@ -13,13 +13,28 @@ @implementation LOTNumberInterpolator - (CGFloat)floatValueForFrame:(NSNumber *)frame { CGFloat progress = [self progressForFrame:frame]; + CGFloat returnValue; if (progress == 0) { - return self.leadingKeyframe.floatValue; + returnValue = self.leadingKeyframe.floatValue; + } else if (progress == 1) { + returnValue = self.trailingKeyframe.floatValue; + } else { + returnValue = LOT_RemapValue(progress, 0, 1, self.leadingKeyframe.floatValue, self.trailingKeyframe.floatValue); } - if (progress == 1) { - return self.trailingKeyframe.floatValue; + if (self.hasValueOverride) { + return self.numberCallback.callback(self.leadingKeyframe.keyframeTime.floatValue, self.trailingKeyframe.keyframeTime.floatValue, self.leadingKeyframe.floatValue, self.trailingKeyframe.floatValue, returnValue, progress, frame.floatValue); } - return LOT_RemapValue(progress, 0, 1, self.leadingKeyframe.floatValue, self.trailingKeyframe.floatValue); + + return returnValue; +} + +- (BOOL)hasValueOverride { + return self.numberCallback != nil; +} + +- (void)setValueCallback:(LOTValueCallback *)valueCallback { + NSAssert(([valueCallback isKindOfClass:[LOTNumberValueCallback class]]), @"Number Interpolator set with incorrect callback type. Expected LOTNumberValueCallback"); + self.numberCallback = (LOTNumberValueCallback*)valueCallback; } - (id)keyframeDataForValue:(id)value { diff --git a/lottie-ios/Classes/RenderSystem/InterpolatorNodes/LOTPathInterpolator.h b/lottie-ios/Classes/RenderSystem/InterpolatorNodes/LOTPathInterpolator.h index b89c58bd39..dfb4850889 100644 --- a/lottie-ios/Classes/RenderSystem/InterpolatorNodes/LOTPathInterpolator.h +++ b/lottie-ios/Classes/RenderSystem/InterpolatorNodes/LOTPathInterpolator.h @@ -9,6 +9,7 @@ #import "LOTValueInterpolator.h" #import "LOTPlatformCompat.h" #import "LOTBezierPath.h" +#import "LOTValueCallback.h" NS_ASSUME_NONNULL_BEGIN @@ -16,6 +17,8 @@ NS_ASSUME_NONNULL_BEGIN - (LOTBezierPath *)pathForFrame:(NSNumber *)frame cacheLengths:(BOOL)cacheLengths; +@property (nonatomic, strong, nullable) LOTPathValueCallback *pathCallback; + @end NS_ASSUME_NONNULL_END diff --git a/lottie-ios/Classes/RenderSystem/InterpolatorNodes/LOTPathInterpolator.m b/lottie-ios/Classes/RenderSystem/InterpolatorNodes/LOTPathInterpolator.m index 2c275e9fbc..3e25e062f9 100644 --- a/lottie-ios/Classes/RenderSystem/InterpolatorNodes/LOTPathInterpolator.m +++ b/lottie-ios/Classes/RenderSystem/InterpolatorNodes/LOTPathInterpolator.m @@ -13,7 +13,11 @@ @implementation LOTPathInterpolator - (LOTBezierPath *)pathForFrame:(NSNumber *)frame cacheLengths:(BOOL)cacheLengths { CGFloat progress = [self progressForFrame:frame]; - + if (self.hasValueOverride) { + UIBezierPath *path = self.pathCallback.callback(self.leadingKeyframe.keyframeTime.floatValue, self.trailingKeyframe.keyframeTime.floatValue, progress, frame.floatValue); + return [LOTBezierPath pathWithCGPath:path.CGPath]; + } + LOTBezierPath *returnPath = [[LOTBezierPath alloc] init]; returnPath.cacheLengths = cacheLengths; LOTBezierData *leadingData = self.leadingKeyframe.pathData; @@ -62,4 +66,13 @@ - (LOTBezierPath *)pathForFrame:(NSNumber *)frame cacheLengths:(BOOL)cacheLength return returnPath; } +- (void)setValueCallback:(LOTValueCallback *)valueCallback { + NSAssert(([valueCallback isKindOfClass:[LOTPathValueCallback class]]), @"Path Interpolator set with incorrect callback type. Expected LOTPathValueCallback"); + self.pathCallback = (LOTPathValueCallback*)valueCallback; +} + +- (BOOL)hasValueOverride { + return self.pathCallback != nil; +} + @end diff --git a/lottie-ios/Classes/RenderSystem/InterpolatorNodes/LOTPointInterpolator.h b/lottie-ios/Classes/RenderSystem/InterpolatorNodes/LOTPointInterpolator.h index 2600132479..6d880841ad 100644 --- a/lottie-ios/Classes/RenderSystem/InterpolatorNodes/LOTPointInterpolator.h +++ b/lottie-ios/Classes/RenderSystem/InterpolatorNodes/LOTPointInterpolator.h @@ -7,6 +7,7 @@ // #import "LOTValueInterpolator.h" +#import "LOTValueCallback.h" NS_ASSUME_NONNULL_BEGIN @@ -14,6 +15,8 @@ NS_ASSUME_NONNULL_BEGIN - (CGPoint)pointValueForFrame:(NSNumber *)frame; +@property (nonatomic, strong, nullable) LOTPointValueCallback *pointCallback; + @end NS_ASSUME_NONNULL_END diff --git a/lottie-ios/Classes/RenderSystem/InterpolatorNodes/LOTPointInterpolator.m b/lottie-ios/Classes/RenderSystem/InterpolatorNodes/LOTPointInterpolator.m index 4182c0c048..558d111a23 100644 --- a/lottie-ios/Classes/RenderSystem/InterpolatorNodes/LOTPointInterpolator.m +++ b/lottie-ios/Classes/RenderSystem/InterpolatorNodes/LOTPointInterpolator.m @@ -13,20 +13,33 @@ @implementation LOTPointInterpolator - (CGPoint)pointValueForFrame:(NSNumber *)frame { CGFloat progress = [self progressForFrame:frame]; + CGPoint returnPoint; if (progress == 0) { - return self.leadingKeyframe.pointValue; - } - if (progress == 1) { - return self.trailingKeyframe.pointValue; - } - if (!CGPointEqualToPoint(self.leadingKeyframe.spatialOutTangent, CGPointZero) && - !CGPointEqualToPoint(self.trailingKeyframe.spatialInTangent, CGPointZero)) { + returnPoint = self.leadingKeyframe.pointValue; + } else if (progress == 1) { + returnPoint = self.trailingKeyframe.pointValue; + } else if (!CGPointEqualToPoint(self.leadingKeyframe.spatialOutTangent, CGPointZero) || + !CGPointEqualToPoint(self.trailingKeyframe.spatialInTangent, CGPointZero)) { // Spatial Bezier path CGPoint outTan = LOT_PointAddedToPoint(self.leadingKeyframe.pointValue, self.leadingKeyframe.spatialOutTangent); CGPoint inTan = LOT_PointAddedToPoint(self.trailingKeyframe.pointValue, self.trailingKeyframe.spatialInTangent); - return LOT_PointInCubicCurve(self.leadingKeyframe.pointValue, outTan, inTan, self.trailingKeyframe.pointValue, progress); + returnPoint = LOT_PointInCubicCurve(self.leadingKeyframe.pointValue, outTan, inTan, self.trailingKeyframe.pointValue, progress); + } else { + returnPoint = LOT_PointInLine(self.leadingKeyframe.pointValue, self.trailingKeyframe.pointValue, progress); } - return LOT_PointInLine(self.leadingKeyframe.pointValue, self.trailingKeyframe.pointValue, progress); + if (self.hasValueOverride) { + return self.pointCallback.callback(self.leadingKeyframe.keyframeTime.floatValue, self.trailingKeyframe.keyframeTime.floatValue, self.leadingKeyframe.pointValue, self.trailingKeyframe.pointValue, returnPoint, progress, frame.floatValue); + } + return returnPoint; +} + +- (BOOL)hasValueOverride { + return self.pointCallback != nil; +} + +- (void)setValueCallback:(LOTValueCallback *)valueCallback { + NSAssert(([valueCallback isKindOfClass:[LOTPointValueCallback class]]), @"Point Interpolator set with incorrect callback type. Expected LOTPointValueCallback"); + self.pointCallback = (LOTPointValueCallback*)valueCallback; } - (id)keyframeDataForValue:(id)value { diff --git a/lottie-ios/Classes/RenderSystem/InterpolatorNodes/LOTSizeInterpolator.h b/lottie-ios/Classes/RenderSystem/InterpolatorNodes/LOTSizeInterpolator.h index bc6f6c58b6..bb159035ca 100644 --- a/lottie-ios/Classes/RenderSystem/InterpolatorNodes/LOTSizeInterpolator.h +++ b/lottie-ios/Classes/RenderSystem/InterpolatorNodes/LOTSizeInterpolator.h @@ -7,6 +7,7 @@ // #import "LOTValueInterpolator.h" +#import "LOTValueCallback.h" NS_ASSUME_NONNULL_BEGIN @@ -14,6 +15,8 @@ NS_ASSUME_NONNULL_BEGIN - (CGSize)sizeValueForFrame:(NSNumber *)frame; +@property (nonatomic, strong, nullable) LOTSizeValueCallback *sizeCallback; + @end NS_ASSUME_NONNULL_END diff --git a/lottie-ios/Classes/RenderSystem/InterpolatorNodes/LOTSizeInterpolator.m b/lottie-ios/Classes/RenderSystem/InterpolatorNodes/LOTSizeInterpolator.m index 7e231de1fe..edc624ce01 100644 --- a/lottie-ios/Classes/RenderSystem/InterpolatorNodes/LOTSizeInterpolator.m +++ b/lottie-ios/Classes/RenderSystem/InterpolatorNodes/LOTSizeInterpolator.m @@ -14,14 +14,28 @@ @implementation LOTSizeInterpolator - (CGSize)sizeValueForFrame:(NSNumber *)frame { CGFloat progress = [self progressForFrame:frame]; + CGSize returnSize; if (progress == 0) { - return self.leadingKeyframe.sizeValue; + returnSize = self.leadingKeyframe.sizeValue; + }else if (progress == 1) { + returnSize = self.trailingKeyframe.sizeValue; + } else { + returnSize = CGSizeMake(LOT_RemapValue(progress, 0, 1, self.leadingKeyframe.sizeValue.width, self.trailingKeyframe.sizeValue.width), + LOT_RemapValue(progress, 0, 1, self.leadingKeyframe.sizeValue.height, self.trailingKeyframe.sizeValue.height)); } - if (progress == 1) { - return self.trailingKeyframe.sizeValue; + if (self.hasValueOverride) { + return self.sizeCallback.callback(self.leadingKeyframe.keyframeTime.floatValue, self.trailingKeyframe.keyframeTime.floatValue, self.leadingKeyframe.sizeValue, self.trailingKeyframe.sizeValue, returnSize, progress, frame.floatValue); } - return CGSizeMake(LOT_RemapValue(progress, 0, 1, self.leadingKeyframe.sizeValue.width, self.trailingKeyframe.sizeValue.width), - LOT_RemapValue(progress, 0, 1, self.leadingKeyframe.sizeValue.height, self.trailingKeyframe.sizeValue.height)); + return returnSize; +} + +- (BOOL)hasValueOverride { + return self.sizeCallback != nil; +} + +- (void)setValueCallback:(LOTValueCallback *)valueCallback { + NSAssert(([valueCallback isKindOfClass:[LOTSizeValueCallback class]]), @"Size Interpolator set with incorrect callback type. Expected LOTSizeValueCallback"); + self.sizeCallback = (LOTSizeValueCallback*)valueCallback; } - (id)keyframeDataForValue:(id)value { diff --git a/lottie-ios/Classes/RenderSystem/InterpolatorNodes/LOTValueInterpolator.h b/lottie-ios/Classes/RenderSystem/InterpolatorNodes/LOTValueInterpolator.h index dade4829a8..eeffe6d3fe 100644 --- a/lottie-ios/Classes/RenderSystem/InterpolatorNodes/LOTValueInterpolator.h +++ b/lottie-ios/Classes/RenderSystem/InterpolatorNodes/LOTValueInterpolator.h @@ -8,6 +8,7 @@ #import #import "LOTKeyframe.h" +#import "LOTValueCallback.h" NS_ASSUME_NONNULL_BEGIN @@ -16,11 +17,14 @@ NS_ASSUME_NONNULL_BEGIN - (instancetype)initWithKeyframes:(NSArray *)keyframes; /// Used to dynamically update keyframe data. -- (BOOL)setValue:(id)value atFrame:(NSNumber *)frame; +- (BOOL)setValue:(id)value atFrame:(NSNumber *)frame __deprecated; - (id _Nullable)keyframeDataForValue:(id)value; @property (nonatomic, weak, nullable) LOTKeyframe *leadingKeyframe; @property (nonatomic, weak, nullable) LOTKeyframe *trailingKeyframe; +@property (nonatomic, readonly) BOOL hasValueOverride; + +- (void)setValueCallback:(LOTValueCallback *)valueCallback; - (BOOL)hasUpdateForFrame:(NSNumber *)frame; - (CGFloat)progressForFrame:(NSNumber *)frame; diff --git a/lottie-ios/Classes/RenderSystem/InterpolatorNodes/LOTValueInterpolator.m b/lottie-ios/Classes/RenderSystem/InterpolatorNodes/LOTValueInterpolator.m index 4f332e5c4b..45b5fc4475 100644 --- a/lottie-ios/Classes/RenderSystem/InterpolatorNodes/LOTValueInterpolator.m +++ b/lottie-ios/Classes/RenderSystem/InterpolatorNodes/LOTValueInterpolator.m @@ -30,57 +30,10 @@ - (id)keyframeDataForValue:(id)value { return nil; } -// Change keyframe data -- (BOOL)setValue:(id)value atFrame:(NSNumber *)frame { - id data = [self keyframeDataForValue:value]; - if (data == nil) { - return NO; - } - if (frame == nil) { - frame = @0; - } - [self updateKeyframeSpanForFrame:frame]; - if (frame.floatValue == self.leadingKeyframe.keyframeTime.floatValue) { - // Is leading frame, replace - LOTKeyframe *newKeyframe = [self.leadingKeyframe copyWithData:data]; - NSMutableArray *keyframes = [NSMutableArray arrayWithArray:_keyframes]; - NSUInteger idx = [keyframes indexOfObject:self.leadingKeyframe]; - [keyframes replaceObjectAtIndex:idx withObject:newKeyframe]; - self.leadingKeyframe = newKeyframe; - _keyframes = keyframes; - } else if (frame.floatValue == self.trailingKeyframe.keyframeTime.floatValue) { - // Is trailing frame - LOTKeyframe *newKeyframe = [self.trailingKeyframe copyWithData:data]; - NSMutableArray *keyframes = [NSMutableArray arrayWithArray:_keyframes]; - NSUInteger idx = [keyframes indexOfObject:self.trailingKeyframe]; - [keyframes replaceObjectAtIndex:idx withObject:newKeyframe]; - self.trailingKeyframe = newKeyframe; - _keyframes = keyframes; - } else { - // Is between leading and trailing. Either can be nil. - // For now added keyframes will default to linear interpolation. - // TODO BW Add smart bezier interpolation - NSMutableDictionary *keyframeDict = [NSMutableDictionary dictionary]; - keyframeDict[@"s"] = data; - keyframeDict[@"t"] = frame; - LOTKeyframe *keyframe = [[LOTKeyframe alloc] initWithKeyframe:keyframeDict]; - NSMutableArray *newKeyframes = [NSMutableArray arrayWithArray:_keyframes]; - if (self.trailingKeyframe == nil || - self.trailingKeyframe == newKeyframes.lastObject) { - [newKeyframes addObject:keyframe]; - } else { - NSInteger idx = [newKeyframes indexOfObject:self.trailingKeyframe]; - [newKeyframes insertObject:keyframe atIndex:idx]; - } - _keyframes = newKeyframes; - self.leadingKeyframe = nil; - self.trailingKeyframe = nil; - } - - return YES; -} - - (BOOL)hasUpdateForFrame:(NSNumber *)frame { + if (self.hasValueOverride) { + return YES; + } /* Cases we dont update keyframe if time is in span and leading keyframe is hold @@ -212,4 +165,60 @@ - (CGFloat)progressForFrame:(NSNumber *)frame { return progession; } +- (void)setValueCallback:(LOTValueCallback *)valueCallback { + NSAssert((NO), @"Interpolator does not support value callbacks"); +} + +#pragma mark - DEPRECATED + +// Change keyframe data +- (BOOL)setValue:(id)value atFrame:(NSNumber *)frame { + id data = [self keyframeDataForValue:value]; + if (data == nil) { + return NO; + } + if (frame == nil) { + frame = @0; + } + [self updateKeyframeSpanForFrame:frame]; + if (frame.floatValue == self.leadingKeyframe.keyframeTime.floatValue) { + // Is leading frame, replace + LOTKeyframe *newKeyframe = [self.leadingKeyframe copyWithData:data]; + NSMutableArray *keyframes = [NSMutableArray arrayWithArray:_keyframes]; + NSUInteger idx = [keyframes indexOfObject:self.leadingKeyframe]; + [keyframes replaceObjectAtIndex:idx withObject:newKeyframe]; + self.leadingKeyframe = newKeyframe; + _keyframes = keyframes; + } else if (frame.floatValue == self.trailingKeyframe.keyframeTime.floatValue) { + // Is trailing frame + LOTKeyframe *newKeyframe = [self.trailingKeyframe copyWithData:data]; + NSMutableArray *keyframes = [NSMutableArray arrayWithArray:_keyframes]; + NSUInteger idx = [keyframes indexOfObject:self.trailingKeyframe]; + [keyframes replaceObjectAtIndex:idx withObject:newKeyframe]; + self.trailingKeyframe = newKeyframe; + _keyframes = keyframes; + } else { + // Is between leading and trailing. Either can be nil. + // For now added keyframes will default to linear interpolation. + // TODO BW Add smart bezier interpolation + NSMutableDictionary *keyframeDict = [NSMutableDictionary dictionary]; + keyframeDict[@"s"] = data; + keyframeDict[@"t"] = frame; + LOTKeyframe *keyframe = [[LOTKeyframe alloc] initWithKeyframe:keyframeDict]; + NSMutableArray *newKeyframes = [NSMutableArray arrayWithArray:_keyframes]; + if (self.trailingKeyframe == nil || + self.trailingKeyframe == newKeyframes.lastObject) { + [newKeyframes addObject:keyframe]; + } else { + NSInteger idx = [newKeyframes indexOfObject:self.trailingKeyframe]; + [newKeyframes insertObject:keyframe atIndex:idx]; + } + _keyframes = newKeyframes; + self.leadingKeyframe = nil; + self.trailingKeyframe = nil; + } + + return YES; +} + @end diff --git a/lottie-ios/Classes/RenderSystem/LOTAnimatorNode.h b/lottie-ios/Classes/RenderSystem/LOTAnimatorNode.h index 4ba456c8f3..0a52148bba 100644 --- a/lottie-ios/Classes/RenderSystem/LOTAnimatorNode.h +++ b/lottie-ios/Classes/RenderSystem/LOTAnimatorNode.h @@ -9,6 +9,8 @@ #import #import "LOTPlatformCompat.h" #import "LOTBezierPath.h" +#import "LOTKeypath.h" +#import "LOTValueCallback.h" extern NSInteger indentation_level; @interface LOTAnimatorNode : NSObject @@ -51,18 +53,27 @@ extern NSInteger indentation_level; /// Rebuild all outputs for the node. This is called after upstream updates have been performed. - (void)rebuildOutputs; +- (void)logString:(NSString *_Nonnull)string; + +- (void)searchNodesForKeypath:(LOTKeypath * _Nonnull)keypath; + +- (void)setValueCallback:(nonnull LOTValueCallback *)callbackBlock + forKeypath:(nonnull LOTKeypath *)keypath; + +/* + * DEPRECATED + */ + /// Traverses children untill keypath is found and attempts to set the keypath to the value. - (BOOL)setValue:(nonnull id)value forKeyAtPath:(nonnull NSString *)keypath - forFrame:(nullable NSNumber *)frame; + forFrame:(nullable NSNumber *)frame __deprecated; /// Sets the keyframe to the value, to be overwritten by subclasses - (BOOL)setInterpolatorValue:(nonnull id)value forKey:(nonnull NSString *)key - forFrame:(nullable NSNumber *)frame; - -- (void)logString:(NSString *_Nonnull)string; + forFrame:(nullable NSNumber *)frame __deprecated; -- (void)logHierarchyKeypathsWithParent:(NSString * _Nullable)parent; +- (void)logHierarchyKeypathsWithParent:(NSString * _Nullable)parent __deprecated; @end diff --git a/lottie-ios/Classes/RenderSystem/LOTAnimatorNode.m b/lottie-ios/Classes/RenderSystem/LOTAnimatorNode.m index fd181cc8bb..7e42db08be 100644 --- a/lottie-ios/Classes/RenderSystem/LOTAnimatorNode.m +++ b/lottie-ios/Classes/RenderSystem/LOTAnimatorNode.m @@ -14,7 +14,6 @@ @implementation LOTAnimatorNode - - (instancetype _Nonnull)initWithInputNode:(LOTAnimatorNode *_Nullable)inputNode keyName:(NSString *_Nullable)keyname { self = [super init]; @@ -98,6 +97,39 @@ - (void)setPathShouldCacheLengths:(BOOL)pathShouldCacheLengths { self.inputNode.pathShouldCacheLengths = pathShouldCacheLengths; } +- (void)searchNodesForKeypath:(LOTKeypath * _Nonnull)keypath { + [self.inputNode searchNodesForKeypath:keypath]; + if ([keypath pushKey:self.keyname]) { + // Matches self. Check interpolators + if (keypath.endOfKeypath) { + // Add self + [keypath addSearchResultForCurrentPath:self]; + } else if (self.valueInterpolators[keypath.currentKey] != nil) { + [keypath pushKey:keypath.currentKey]; + // We have a match! + [keypath addSearchResultForCurrentPath:self]; + [keypath popKey]; + } + [keypath popKey]; + } +} + +- (void)setValueCallback:(nonnull LOTValueCallback *)callbackBlock + forKeypath:(nonnull LOTKeypath *)keypath { + if ([keypath pushKey:self.keyname]) { + // Matches self. Check interpolators + LOTValueInterpolator *interpolator = self.valueInterpolators[keypath.currentKey]; + if (interpolator) { + // We have a match! + [interpolator setValueCallback:callbackBlock]; + } + [keypath popKey]; + } + [self.inputNode setValueCallback:callbackBlock forKeypath:keypath]; +} + +#pragma mark - DEPRECATED + /// Traverses children untill keypath is found and attempts to set the keypath to the value. - (BOOL)setValue:(nonnull id)value forKeyAtPath:(nonnull NSString *)keypath diff --git a/lottie-ios/Classes/RenderSystem/RenderNodes/LOTRenderGroup.m b/lottie-ios/Classes/RenderSystem/RenderNodes/LOTRenderGroup.m index d063f8d542..047a76ffe4 100644 --- a/lottie-ios/Classes/RenderSystem/RenderNodes/LOTRenderGroup.m +++ b/lottie-ios/Classes/RenderSystem/RenderNodes/LOTRenderGroup.m @@ -48,11 +48,18 @@ - (instancetype _Nonnull)initWithInputNode:(LOTAnimatorNode * _Nullable)inputNod - (NSDictionary *)valueInterpolators { if (_opacityInterpolator && _transformInterolator) { - return @{@"Transform.Opacity" : _opacityInterpolator, + return @{@"Opacity" : _opacityInterpolator, + @"Position" : _transformInterolator.positionInterpolator, + @"Scale" : _transformInterolator.scaleInterpolator, + @"Rotation" : _transformInterolator.scaleInterpolator, + @"Anchor Point" : _transformInterolator.anchorInterpolator, + // Deprecated + @"Transform.Opacity" : _opacityInterpolator, @"Transform.Position" : _transformInterolator.positionInterpolator, @"Transform.Scale" : _transformInterolator.scaleInterpolator, @"Transform.Rotation" : _transformInterolator.scaleInterpolator, - @"Transform.Anchor Point" : _transformInterolator.anchorInterpolator}; + @"Transform.Anchor Point" : _transformInterolator.anchorInterpolator + }; } return nil; } @@ -176,6 +183,59 @@ - (LOTBezierPath *)outputPath { return _outputPath; } +- (void)searchNodesForKeypath:(LOTKeypath * _Nonnull)keypath { + [self.inputNode searchNodesForKeypath:keypath]; + if ([keypath pushKey:self.keyname]) { + // Matches self. Dig deeper. + // Check interpolators + + if ([keypath pushKey:@"Transform"]) { + // Matches a Transform interpolator! + if (self.valueInterpolators[keypath.currentKey] != nil) { + [keypath pushKey:keypath.currentKey]; + [keypath addSearchResultForCurrentPath:self]; + [keypath popKey]; + } + [keypath popKey]; + } + + if (keypath.endOfKeypath) { + // We have a match! + [keypath addSearchResultForCurrentPath:self]; + } + // Check child nodes + [_rootNode searchNodesForKeypath:keypath]; + [keypath popKey]; + } +} + +- (void)setValueCallback:(nonnull LOTValueCallback *)callbackBlock + forKeypath:(nonnull LOTKeypath *)keypath { + if ([keypath pushKey:self.keyname]) { + // Matches self. Dig deeper. + // Check interpolators + if ([keypath pushKey:@"Transform"]) { + // Matches a Transform interpolator! + LOTValueInterpolator *interpolator = self.valueInterpolators[keypath.currentKey]; + if (interpolator) { + // We have a match! + [interpolator setValueCallback:callbackBlock]; + } + [keypath popKey]; + } + + // Check child nodes + [_rootNode setValueCallback:callbackBlock forKeypath:keypath]; + + [keypath popKey]; + } + + // Check upstream + [self.inputNode setValueCallback:callbackBlock forKeypath:keypath]; +} + +#pragma mark - DEPRECATED + - (BOOL)setInterpolatorValue:(id)value forKey:(NSString *)key forFrame:(NSNumber *)frame {