自iOS 9起,iOS具有“按需资源”(ODR)功能,允许Apple托管可按需下载的资源,而不是将其包含在应用程序包中。通过使用资源标签为资产添加标签,然后使用NSResourceBundleRequest
来请求给定标签的资产,我们可以通过将不经常使用的资产保持在设备外直到需要的时候来减小应用包的大小。
遗憾的是,我只能使它与Xcode的应用程序目标中特定包含的资源一起使用。有时,代码和资源未包含在应用程序目标中,而是包含在共享或外部框架中(例如,通过Cocoapods分发的库或用于在iOS,tvOS,watchOS,macOS应用程序之间共享代码和资产的共享框架) )。理想情况下,由于这些框架最终还是嵌入在您的应用程序目标中,因此Xcode可以简单地从嵌入的框架中提取资源并标记它们以供下载。
尽管这些框架目标在其项目文件中具有“资源标签”部分,并且我们仍然可以在这些目标中配置资源标签,但在运行时,资源请求仅因NSBundleOnDemandResourceInvalidTagError
而失败。调试导航器中的“磁盘”窗格也没有显示“按需资源”部分。
我找不到任何明确说明使用ODR或无法使用外部框架的文档。有谁知道这是否可能,如果可以,怎么实现?