资源包中的资产目录

Posted

技术标签:

【中文标题】资源包中的资产目录【英文标题】:Asset Catalogs in resource bundles 【发布时间】:2013-09-19 17:09:36 【问题描述】:

我的框架附带了一个单独的资源包。我想在该捆绑包中放置和使用资产目录。但是 UIImage imageNamed: 说它使用当前的应用程序主包。如何从不同捆绑包中的资产目录加载图像?

使用 [bundle pathForResource:name ofType:@"png"] 的技巧不适用于已编译的资产目录。我已验证 Assets.car 文件确实在捆绑包中,并且包含我的图像。

【问题讨论】:

【参考方案1】:

ios 8 开始,您现在可以使用 [UIImage imageNamed:inBundle:compatibleWithTraitCollection:] 从不同的包中按名称加载图像。例如,动态框架可以使用独立于主应用程序包的自己的资产目录。

【讨论】:

@doozMen, Here 是文档。【参考方案2】:

根据 Apple 开发者的说法:

不幸的是,除了 Xcode 编译到你的主包中的那个之外,不可能从任何汽车文件中加载图像,因为 +imageNamed: 不接受包参数,这是这样做所需要的(即使这样它只能在单个包中打开单个资产目录)。

这是链接:

https://devforums.apple.com/message/968859#968859

【讨论】:

【参考方案3】:

有一个技巧可以让资产目录与包一起使用:将资源包的部署目标设置为 6.1(或更低版本)。资产目录自 7.0 以来才出现,因此 Xcode 实际上不会构建 .car 文件(已编译的资产目录),而是直接将资产复制到包中,如 here 所记录的那样:

Xcode 6 为资产目录提供不同的功能,具体取决于 > 项目的部署目标:

对于所有项目,可以使用集合名称加载单个图像。 对于部署目标至少为 iOS 7 或 OS X 10.9 的项目,Xcode 会将您的资产目录编译为运行时二进制文件格式,从而缩短应用的下载时间。

需要注意的是,任何附加信息(切片、渲染模式……)都会被忽略,您只会得到普通图像。虽然通过资产目录组织可能更方便,但我觉得这可能会导致一些难以发现的错误/混乱......

编辑:如果您应用上述技巧,您很可能无法获得 iOS 9 引入的 App Slicing 优势,因为在构建应用程序之后,没有编译的资产目录,而只有一个剩下一堆纯图像,因此Apple将无法自动剥离资源。这只是一个假设。

【讨论】:

以上是关于资源包中的资产目录的主要内容,如果未能解决你的问题,请参考以下文章

Unity用户手册2019.3(中文版)1.3.2 资源包

在 web 目录中安装供应商资源

复制资产/资源使 iOS 测试令人沮丧

在资产目录中切片 PDF 资源是不是损坏?

Mavne 排除 jar 包 中的目录文件和资源文件

Mavne 排除 jar 包 中的目录文件和资源文件