如here和here所述,这是在框架的.xcassets
文件中托管可重复使用图像,然后在 storyboard / XIB < / em>,是直接在应用程序的项目中手动创建对该目录文件的引用。这会将资产放入应用程序的主捆绑包中,并在尝试通过Interface Builder使用资产时避免了此错误:
无法加载从笔尖引用的“ ImageName”图像 标识符为“ BundleName”的捆绑软件
不过,我的问题是:这会导致在构建时重复资产吗? iOS是否足够智能,不能将两者的资产加倍?
如果这确实导致重复,那么还有什么其他方法可以更有效地达到相同的结果?该框架需要嵌入到应用程序中,因为它包含其他可重用的代码,并且资产也必须位于框架的目录中,因为它们也在其他应用程序中使用。
答案 0 :(得分:1)
Apple的目标是最小化资产所需的空间,因此资产被合并并压缩到一个名为“ Asset.car”的文件中。
当您提交到应用商店时,将启动一个名为“应用细化”的过程,该过程将为不同的实际设备创建变体。
您可以在本地模拟该过程,甚至可以使用第三方工具在“ Asset.car”文件中查看。
我在此答案中详细描述了整个过程: Pixelated images on iOS10 when building with Xcode 10
要亲自测试,请执行以下操作:
然后,执行上面链接的答案中所述的过程,并提取Asset.car文件。
使用内部的第三方工具进行浏览时,可以看到图像仅在其中一次。
好消息:与预期的一样,没有重复发生。
屏幕截图
在屏幕截图中,您可以看到:
具有框架和应用程序的Xcode项目结构以及后台的.xcassets
使用故事板上的唯一图像
在Finder右下区域中提取的Assets.car
最后在左下角提到的第三方工具,在那里您看到文件仅存在一次
更多信息
就像我的其他答案一样,我建议您观看以下WWDC 2018视频:第227节,优化应用程序资产,https://developer.apple.com/videos/play/wwdc2018/227/