一 . iOS原生插件导入uni-app 图片资源包的处理,否则Xcode中图片显示,HBuilderX中的图片资源会出现图片加载失败的情况
+ (UIImage *)getImageResourceForNameFromCLShanYanSDKBundle:(NSString *)name {
return [UIImage imageNamed:name inBundle:[NSBundle bundleWithPath:[[NSBundle mainBundle] pathForResource:@"sdk_oauth" ofType:@"bundle"]] compatibleWithTraitCollection:nil];
}
最近是写uni-app原生插件开发的时候使用到了环信的SDK, 剔除模拟器框架后的大小为180MB, uni-app打包基座限制大小是40MB,超过大小后按照次数进行额外的收费, 因为这个原因需要研究一下静态库和动态库寻找解决办法
静态库: .a和.framework
动态库: .dylib和.framework
静态库: 链接时,静态库会被完整的复制到可执行文件中,被多次使用就有多分冗余拷贝
动态库: 链接时不复制,程序运行时由系统动态加载到内存,供程序调用,系统只加载一次,多个程序公用,节省内存
注意:项目中使用了动态库会被苹果拒绝
静态库文件的版本共4种
·真机Debug版本
·真机Release版本
·模拟器Debug版本
·模拟器Release版本
静态库的制作
截屏2020-05-09上午9.29.31.png
①debug运行一下command+B
②release运行一下
这样回得到真机和模拟器的两个框架
调试的时候需要将两个进行合并
上线的话, 为了减少包的大小可以提出模拟器的框架
静态库外部暴露.h的步骤如何所示:
WechatIMG954.jpeg 9561588989115_.pic_hd.jpg 9551588988817_.pic.jpg
测试的时候只需要合并debug下的真机和debug下的模拟器就可以了, 上线的时候可以移除debug下的模拟器框架
终端输入
合并.a
lipo -create xxxx.a xxxx.a -output /Users/lelemeng/Desktop/xxxx.a
9571588989602_.pic.jpg 9591588990015_.pic_hd.jpg
对合并的框架移除模拟器框架示例如下
【首先进入Hyphenate.framework所在目录】
// 移除支持x86_64,i386的二进制文件
lipo Hyphenate.framework/Hyphenate -remove x86_64 -remove i386 -output Hyphenate
//替换framwork内部二进制文件
mv Hyphenate Hyphenate.framework/Hyphenate
//查看剥离后的二进制文件支持的CPU架构,如果显示armv7 arm64,就完成剥离,可上传AppStore
lipo -info Hyphenate.framework/Hyphenate
制作framework注意事项
Build Active Architecture Only 选项中将debug改成NO,会变异真机的2个架构和模拟器的两个架构, 否则分别只有1个
可以理解成编译的是当前机器的架构, 会少一个
在TARGETS->Build Settings中,将 Mach-O Type 设置为 Static Library 如下图所示(将framework制作成静态库默认是动态库)
网友评论