在 Flutter Plugins 中引用和使用 Image 等资源
上一篇文章仅仅把图片作为普通资源引入到插件中,这种方式无法利用苹果的App Thinning机制,所以这篇文章介绍如何利用Asset Catalog打包图片资源:
注:只有在Asset Catalog中引入的图片,才可以利用这套App Thinning。
- 创建Asset Catelog
由于Android Studio中没有这个类型模版,所以需要在xcode编辑器中添加该文件,定位到目录 Pods\Development Pods\image_picker....\image_picker\ios,右键创建,找到Asset Catalog,将之前的所有图片添加到asset里面;
- 修改.podspec文件
s.resource_bundles = {'Image_Picker'=>['ImagePicker.xcassets']}
- 执行pod install
- 编译运行主工程
展开Run.app找到image_picker.framework展开,找到Image_Picker.bundle再展开,可以看到之前的一堆图片已经看不到了,但多了一个
Assets.car,它就是图片编译后产生的二进制产物。
获取图片的方式无需改动。
引用Google来的一段话:
UIImage imageNamed:inBundle:compatibleWithTraitCollection: 实际上,会优先去查找指定Bundle(UIImage imageNamed:即为mainBundle)的路径下的Assets.car文件并展开,然后找不到再去寻找Bundle路径下同名的图片文件。所以,从API使用上来看,一个图片具体是在散落在Bundle根路径下,还是在被编译到Bundle路径下的Assets.car中,代码应该是一致的。