35 lines
1.1 KiB
Swift
35 lines
1.1 KiB
Swift
import Foundation
|
|
#if os(iOS) || os(tvOS) || os(watchOS) || targetEnvironment(macCatalyst)
|
|
import UIKit
|
|
#endif
|
|
|
|
extension Bundle {
|
|
func getAnimationData(_ name: String, subdirectory: String? = nil) throws -> Data? {
|
|
// Check for files in the bundle at the given path
|
|
let name = name.removingJSONSuffix()
|
|
if let url = url(forResource: name, withExtension: "json", subdirectory: subdirectory) {
|
|
return try Data(contentsOf: url)
|
|
}
|
|
|
|
// Check for data assets (not available on macOS)
|
|
#if os(iOS) || os(tvOS) || os(watchOS) || targetEnvironment(macCatalyst)
|
|
let assetKey = subdirectory != nil ? "\(subdirectory ?? "")/\(name)" : name
|
|
return NSDataAsset(name: assetKey, bundle: self)?.data
|
|
#else
|
|
return nil
|
|
#endif
|
|
}
|
|
}
|
|
|
|
extension String {
|
|
fileprivate func removingJSONSuffix() -> String {
|
|
// Allow filenames to be passed with a ".json" extension (but not other extensions)
|
|
// to keep the behavior from Lottie 2.x - instead of failing to load the animation
|
|
guard hasSuffix(".json") else {
|
|
return self
|
|
}
|
|
|
|
return (self as NSString).deletingPathExtension
|
|
}
|
|
}
|