引用资产目录并从框架中包含资产目录都会创建重复项吗?

时间:2019-04-26 01:00:59

标签: ios frameworks storyboard xcasset asset-catalog

herehere所述,这是在框架的.xcassets文件中托管可重复使用图像,然后在 storyboard / XIB < / em>,是直接在应用程序的项目中手动创建对该目录文件的引用。这会将资产放入应用程序的主捆绑包中,并在尝试通过Interface Builder使用资产时避免了此错误:

  

无法加载从笔尖引用的“ ImageName”图像   标识符为“ BundleName”的捆绑软件

不过,我的问题是:这会导致在构建时重复资产吗? iOS是否足够智能,不能将两者的资产加倍?

  • 在应用程序的主捆绑包
  • 中引用
  • 包含在嵌入式框架的捆绑包中

如果这确实导致重复,那么还有什么其他方法可以更有效地达到相同的结果?该框架需要嵌入到应用程序中,因为它包含其他可重用的代码,并且资产也必须位于框架的目录中,因为它们也在其他应用程序中使用。

1 个答案:

答案 0 :(得分:1)

Apple的目标是最小化资产所需的空间,因此资产被合并并压缩到一个名为“ Asset.car”的文件中。

当您提交到应用商店时,将启动一个名为“应用细化”的过程,该过程将为不同的实际设备创建变体。

您可以在本地模拟该过程,甚至可以使用第三方工具在“ Asset.car”文件中查看。

我在此答案中详细描述了整个过程: Pixelated images on iOS10 when building with Xcode 10

要亲自测试,请执行以下操作:

  • 我创建了一个工作区
  • 我添加了一个框架
  • 我添加了一个应用程序
  • 在框架内,我添加了一个'Media.xcassets'
  • 我从应用程序中引用了此Media.xcassets
  • 我在Media.xcassets中添加了一张名为“ Regensburg.jpg”的图片
  • 我在情节提要中使用此图像

然后,执行上面链接的答案中所述的过程,并提取Asset.car文件。

使用内部的第三方工具进行浏览时,可以看到图像仅在其中一次。

好消息:与预期的一样,没有重复发生。

屏幕截图

screenshot

在屏幕截图中,您可以看到:

  • 具有框架和应用程序的Xcode项目结构以及后台的.xcassets

  • 使用故事板上的唯一图像

  • 在Finder右下区域中提取的Assets.car

  • 最后在左下角提到的第三方工具,在那里您看到文件仅存在一次

更多信息

就像我的其他答案一样,我建议您观看以下WWDC 2018视频:第227节,优化应用程序资产,https://developer.apple.com/videos/play/wwdc2018/227/