bto*_*om5 5 bundle ios swift on-demand-resources
我目前正在尝试为 AWS Cloudfront 实施 Apple 的按需资源管理 API,因为 Apple 的 ODR 在某种程度上太不可靠了。
我注意到当我使用 ODR 资源标签标记 Assets.scnassets/ 内的图像时,我可以使用
UIImage(name: resourceName)
Run Code Online (Sandbox Code Playgroud)
一旦它被NSBundleRequest对象下载。因为我可以作为 UIImage 访问下载的资源,所以我知道该资源位于应用程序的主包中,但我认为这是不可能的,因为包是只读的。苹果是怎么做到的?最重要的方面是能够使用这个非常简单的界面创建 UIImages。
不确定它在技术上是如何完成的,但我非常确定将 ODR 归因于特定包(通常是主包)是有意完成的,因此您可以依赖它。
我正在使用 RxOnDemandResources 库从数十个标签中获取数百个 MP3,并且它是在每个包的基础上完成的 -
Bundle
.main
.rx
.demandResources(withTags: tags) // tags: Set<String>
.subscribeOn(Scheduler.concurrentUser) // declare your scheduler first
.observeOn(Scheduler.concurrentMain) // declare your scheduler first
.subscribe { event in
switch event {
case .next(let progress):
self.showProgress(progress: Float(progress.fractionCompleted)) // declare your handler first
case .error(let error):
break // handle appropriately
case .completed:
if let url = Bundle.main.url(forResource: file, withExtension: "") {
os_log("url: %@", log: Log.odr, type: .info, "\(url)")
// TODO use your resource
}
}
}
.disposed(by: self.disposeBag)Run Code Online (Sandbox Code Playgroud)
回到你的问题:是的,你可以像往常一样通过特定的捆绑包访问 ODR 资源,但有所有先决条件(检查可用性,如果需要则获取) - 即并非总是如此。
| 归档时间: |
|
| 查看次数: |
744 次 |
| 最近记录: |