Does Both Referencing an Asset Catalogue and Including it from a Framework Create Duplication?

旧城冷巷雨未停 提交于 2019-12-04 05:26:26

问题


As discussed here & here, the only apparent way to host re-usable images in a Framework's .xcassets file, then use those images in the storyboard / XIB of an app, is to manually create a reference to that catalog file directly within the app's project. This puts the assets within the app's main bundle, and avoids this error when trying to use them via Interface Builder:

Could not load the "ImageName" image referenced from a nib in the bundle with identifier "BundleName"

My question, though, is: Does this lead to duplication of the assets at build-time? Is iOS smart enough not to double-up assets which are both:

  • Referenced in the app's main bundle and
  • Included in the bundle of an embedded framework

If this does lead to duplication, what other approach can achieve the same result more efficiently? The framework needs to be embedded in the app, because it contains other reusable code, and the assets need to be in the framework's catalog, because they're also used in other apps.


回答1:


Apple's goal is to minimize the space required for assets, so assets are combined and compressed into one file called 'Asset.car'.

When you submit to the app store a process called App Thinning is started that creates variants for different actual devices.

You can mimic the process locally and with a third-party tools even take a look inside the 'Asset.car' file.

I described the whole process in detail in this answer: Pixelated images on iOS10 when building with Xcode 10

To test it myself I did the following:

  • I created a workspace
  • I added a framework
  • I added an app
  • inside the framework I added a 'Media.xcassets'
  • I reference this Media.xcassets from the app
  • I added one picture called 'Regensburg.jpg' to Media.xcassets
  • I use this image in a storyboard

Then I do the process described in my linked answer above and extract the Asset.car file.

When taking a look with the third-party tool inside, one can see that the image is just once there.

So good news: like expected no duplication happens.

Screenshot

In the screenshot you can see:

  • Xcode project structure with framework and app as well as .xcassets in the background

  • usage of the only image inside in the storyboard

  • the extracted Assets.car in Finder in the lower right area

  • finally the mentioned third-party tool in the lower left area, where you see that the file is there just once

More information

Like in my other answer I would recommend to take a look at this WWDC 2018 video: Session 227, Optimizing App Assets, https://developer.apple.com/videos/play/wwdc2018/227/



来源:https://stackoverflow.com/questions/55859440/does-both-referencing-an-asset-catalogue-and-including-it-from-a-framework-creat

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!