Files
rive-ios/Source/Utils/RiveFile+Extensions.swift
luigi-rosso 27de5abf4b Ios out of band
few bits to sort out
- [x] make our mix of simulator/emulator consistent, settling on emulator
- [x] passing the factory in works great for just in time asset decoding, but its not amazing when you want to decode ahead of time.
- [x] couple of places left to pass this function signature through. (Question) is there a neater way to get this done, feels a bit like we are going back to parameter explosion a bit?
- [x] should do a few examples, i think the complexity grows quite a bit in this one as you add caching, or callbacks
- [x] should get the cached images/fonts to draw on init as well, either warming up cache, or jitting
- [x] examples loading assets from the bundle (also there seem to be actual asset things too? should we use those?!)
- [x] add test
- [x] re-add "preview" project & rev the preview project once this has been deployed. (do this after new ios deploy)
- [x] fix up race condition (see comment)

https://github.com/rive-app/rive/assets/1216025/2c14330f-e8a4-481b-bc27-4807cabe3b82

(simple example, both swift ui and standard)

![CleanShot 2023-11-20 at 16 54 59](https://github.com/rive-app/rive/assets/1216025/a71e207c-30ad-44dd-9e4b-ad7431b22186)

Diffs=
fabb7f97f Ios out of band (#6232)

Co-authored-by: Gordon Hayes <pggordonhayes@gmail.com>
Co-authored-by: Maxwell Talbot <talbot.maxwell@gmail.com>
2023-12-05 21:23:08 +00:00

33 lines
1.2 KiB
Swift

//
// RiveFile+Extensions.swift
// RiveRuntime
//
// Created by Zachary Duncan on 4/7/22.
// Copyright © 2022 Rive. All rights reserved.
//
import Foundation
public extension RiveFile {
convenience init(name fileName: String, extension ext: String = ".riv", in bundle: Bundle = .main, loadCdn: Bool=true, customLoader: LoadAsset? = nil) throws {
let byteArray = RiveFile.getBytes(fileName: fileName, extension: ext, in: bundle)
if (customLoader == nil){
try self.init(byteArray: byteArray, loadCdn: loadCdn)
}else {
try self.init(byteArray: byteArray, loadCdn: loadCdn, customAssetLoader: customLoader!)
}
}
static func getBytes(fileName: String, extension ext: String = ".riv", in bundle: Bundle = .main) -> [UInt8] {
guard let url = bundle.url(forResource: fileName, withExtension: ext) else {
fatalError("Failed to locate \(fileName) in bundle \(bundle).")
}
guard let data = try? Data(contentsOf: url) else {
fatalError("Failed to load \(url) from bundle.")
}
// Import the data into a RiveFile
return [UInt8](data)
}
}