CocoaPods的资源管理
2021-11-18 本文已影响0人
ssjk4
转自:https://juejin.cn/post/6844904002119811086
无论任何场景,禁止 使用 podspecName/assers/*/形式引入资源文件,存在严重的资源重复引入问题,会显著增加包体大小!无法享有任何 Xcode的优化.
使用 resources:
s.resources = ['ResourcesTest/Assets/*.xcassets',
'ResourcesTest/Assets/*.bundle' ]
使用 resource_bundles:
s.resource_bundles = {'ResourcesBubdlesTest'=> ['ResourcesBubdlesTest/Assets/*.xcassets'],'BlankLoading1'=> ['ResourcesBubdlesTest/Assets/BlankLoading.bundle'] }
不使用use_framework!
当不使用use_framework!时,最终对Pod库,会创建单独的静态链接库.a的Target,然后CocoaPods会对主工程App Target增加自己写的脚本来帮助我们拷贝Pod的资源。
resources里.xcassets资源会拷贝进入主目录Assets.car,.bundle文件放入主目录下!
resource_bundles文件.xcassets会放入命名空间.bundle下的Assets.car,.bundle放入主目录下的命名空间.bundle
使用use_framework!
当使用了use_framework!之后,CocoaPods会对每个Pod单独建立一个动态链接库的Target,每个Pod最后会直接以Framework集成到App中。而资源方面,由于Framework本身就能承载资源,所有的资源都会被拷贝到Framework文件夹中而不再使用单独的脚本处理。
资源文件取用方法:
无论是不是使用 use_framework ,对于私有库的image文件我们都是可以通过下面方法调用:
bundle寻址也一样
UIImage*ModuleImage(NSString*imageName) {NSBundle*bundle = [NSBundlebundleForClass:[ResourcesBubdlesTestclass]];return[UIImageimageNamed:imageName inBundle:bundle compatibleWithTraitCollection:nil];}NSBundle*BundleWithName(NSString*bundleName) {NSBundle*bundle = [NSBundlebundleForClass:[XHXRecordToolsclass]];NSURL*url = [bundle URLForResource:bundleName withExtension:@"bundle"];return[NSBundlebundleWithURL:url];}