@@ -4,17 +4,18 @@ import RiveRuntime
44final class HybridRiveFileFactory : HybridRiveFileFactorySpec {
55 let assetLoader = ReferencedAssetLoader ( )
66
7- private func buildRiveFile( data: Data , loadCdn: Bool , referencedAssets: ReferencedAssetsType ? ) throws -> ( file: RiveFile , cache: ReferencedAssetCache , loader: ReferencedAssetLoader ? ) {
7+ private func buildRiveFile( data: Data , loadCdn: Bool , referencedAssets: ReferencedAssetsType ? ) throws -> ( file: RiveFile , cache: ReferencedAssetCache , factory : RiveFactory ? , loader: ReferencedAssetLoader ? ) {
88 var referencedAssetCache = SendableRef ( ReferencedAssetCache ( ) )
9- let customLoader = assetLoader. createCustomLoader ( referencedAssets: referencedAssets, cache: referencedAssetCache)
9+ var factoryCache : SendableRef < RiveFactory ? > = . init( nil )
10+ let customLoader = assetLoader. createCustomLoader ( referencedAssets: referencedAssets, cache: referencedAssetCache, factory: factoryCache)
1011
1112 let riveFile = if let customLoader = customLoader {
1213 try RiveFile ( data: data, loadCdn: loadCdn, customAssetLoader: customLoader)
1314 } else {
1415 try RiveFile ( data: data, loadCdn: loadCdn)
1516 }
1617
17- return ( file: riveFile, cache: referencedAssetCache. value, loader: customLoader != nil ? assetLoader : nil )
18+ return ( file: riveFile, cache: referencedAssetCache. value, factory : factoryCache . value , loader: customLoader != nil ? assetLoader : nil )
1819 }
1920
2021 // MARK: Public Methods
@@ -44,6 +45,9 @@ final class HybridRiveFileFactory: HybridRiveFileFactorySpec {
4445 let hybridRiveFile = HybridRiveFile ( )
4546 hybridRiveFile. riveFile = result. file
4647 hybridRiveFile. referencedAssetCache = result. cache
48+ if let factory = result. factory {
49+ hybridRiveFile. cachedFactory = factory
50+ }
4751 hybridRiveFile. assetLoader = result. loader
4852 return hybridRiveFile
4953 } catch let error as NSError {
@@ -105,11 +109,12 @@ final class HybridRiveFileFactory: HybridRiveFileFactorySpec {
105109 do {
106110 let assetLoader = self . assetLoader
107111 let referencedAssetCache = SendableRef ( ReferencedAssetCache ( ) )
112+ let factoryCache = SendableRef < RiveFactory ? > ( nil )
108113 let riveFile = try await withCheckedThrowingContinuation { continuation in
109114 DispatchQueue . global ( qos: . userInitiated) . async {
110115 do {
111116 let riveFile =
112- if let customLoader = assetLoader. createCustomLoader ( referencedAssets: referencedAssets, cache: referencedAssetCache) {
117+ if let customLoader = assetLoader. createCustomLoader ( referencedAssets: referencedAssets, cache: referencedAssetCache, factory : factoryCache ) {
113118 try RiveFile ( resource: resource, loadCdn: loadCdn, customAssetLoader: customLoader)
114119 } else {
115120 try RiveFile ( resource: resource, loadCdn: loadCdn)
0 commit comments