iOS优化之App瘦身(三)梁飞宇

当向AppStoreConnect上传.ipa时,AppStoreConnect构建过程中,会自动分割当前App,创建特定的变体,以适配不同的设备。当用户从AppStore下载当前App,AppStore会根据当前用户的设备类型,分发针对当前设备的变体的过程,叫做Slicing,原理如下图:

通常情况下iOS系统App内部本地图片使用时同一张图片通常有@1x、@2x、@3x三种格式,我们知道这是为了适配不同的屏幕,但是有一个问题,每一张本地图片都有3张的话,当前设备只能使用一种格式,而另外两两种格式的图片不起任何作用,进而会增大app包的体积,Slicing的出现解决了此问题,不过还需要我们遵循Slicing的规则,即@1x、@2x、@3x格式的图片要同时存在,并且将图片资源存放在.xcassets去管理,不能直接放在Bundle。然而就当前苹果设备来讲@1x的设备基本不存在,所以@2x、@3x是必备的。

此功能可以简单的优化图片资源大小,在适配不同屏幕的前提下,进一步优化了当前App的包体积。

所以:小图片尽量放到Assets.xcassets里面去

注意的是:用Asset管理图片要比直接放在bundle里在加载速度上要快。因为Asset会在编译期做优化,让加载的时候更快,此外在Asset中加载图片是要比Bundle快的,因为'[UIImageimageNamed]'要遍历Bundle才能找到图。加载Asset中图的耗时主要在在第一次张图,因为要建立索引,可以通过把启动的图放到一个小的Asset里来减少这部分耗时。

引申:

Bitcode是一种程序中间码。是纯苹果内部行为,当前app包含Bitcode配置的程序将会在AppStoreConnect上被重新编译和链接,进而对可执行文件做优化。这部分都是在服务端自动完成的。

如果以后Apple新推出了新的CPU架构或者以后LLVM推出了一系列优化,我们就不需要重新为其发布新的安装包了。AppleStore会为我们自动完成这步。

但是开启Bitcode需要注意:

Bitcode开启BuildSettings->EnableBitcode->设置为YES

此功能为苹果内部优化行为,非开发则直接操纵,不过多赘述

翻译为按需加载,顾名思义,就是需要的时候再去加载。指一部分资源(图片资源,压缩包资源等)可以被放置在苹果的服务器上(非开发者主动放置,只需放到项目中,做些处理即可),不随着App的下载而下载,直到用户真正进入到某个页面时或者出发下载事件时才下载这些资源文件。

按需加载支持iOS9.0及以后的app,按需加载资源是默认开启的。你也可以在target的buildsettings中手动更改。

使用介绍:

名词解释

一些过大的图片还可以采用webP的格式进行加载,可以利用SDWebImage/WebP提供的UIImage+WebP分类来进行WebP格式图片的转换:

+(UIImage*)sd_imageWithWebPData:(NSData*)data;实际用法:

optimization选项设置为space可以减少包大小

如果不支持32位以及iOS8,去掉armv7,可执行文件以及库会减小,即本地.ipa也会减小。

可执行文件中的符号是指程序中的所有的变量、类、函数、枚举、变量和地址映射关系,以及一些在调试的时候使用到的用于定位代码在源码中的位置的调试符号,符号和断点定位以及堆栈符号化有很重要的关系。

StripStyle表示的是我们需要去除的符号的类型的选项,其分为三个选择项:

并不是所有的符号都是必须的,比如DebugMap,所以Xcode提供给我们StripLinkedProduct来去除不需要的符号信息(StripStyle中选择的选项相应的符号),去除了符号信息之后我们就只能使用dSYM来进行符号化了,所以需要将DebugInformationFormat修改为DWARFwithdSYMfile。

与StripLinkedProduct类似,但是这个是将那些拷贝进项目包的三方库、资源或者Extension的DebugSymbol去除掉,同样也是使用的strip命令。这个选项没有前置条件,所以我们只需要在Release模式下开启,不然就不能对三方库进行断点调试和符号化了。

Cocoapods管理的动态库(use_framework!)的情况就相对要特殊一点,因为Cocoapods中的的动态库是使用自己实现的脚本Pods-xxx-frameworks.sh来实现拷贝的,所以并不会走Xcode的流程,当然也就不受StripDebugSymbolsDuringCopy的影响。当然Cocoapods是源码管理的,所以只需要将源码Target中的StripLinkedProduct设置为YES即可。3.4.StripSwiftSymbols开启StripSwiftSymbols能帮助我们移除相应Target中的所有的Swift符号,这个选项也是默认打开的。

如下图所示:

将Mach-o可执行文件内的__TEXT的部分代码段安全移动到其他代码段中,避开苹果的加密机制,提高可执行文件的压缩效率,进而让App的下载大小减小。

通俗解释:就是把一些非必要的经过转换之后的代码,乔迁到别的地方,避开苹果对这些非必要的代码再做什么操作,苹果对这些操作会对下载包变大。

iOS可执行文件是Mach-O格式,主要由Header、LoadCommands、Data三部分。

在这个文件夹下找到对应的工程文件名/Build/Products/Debug,进入这个目录下,就可以找到我们的可执行文件了。

打开MachOview文件->Open

Open之后,找到当前项目的.app文件,按照下图寻找,点击Open。

查看当前项目的Mach-O文件,效果如下

将上图中的红框里面的可更改的代码段全部移除值其他代码段中:

重新打包之后把打包的ipa后缀改成zip,再用MachView查看解压之后的Mach-o文件,其内部格式已经发生变更

对项目工程进行Archive之后会生成.xcarchive文件,该文件中包含了App、dsYMS以及其它信息

将xcarchive文件上传到AppStoreConnect后,苹果对App中的可执行文件进行加密等操作,将App压缩成ipa文件(和平时打测试包不一样),才发布到AppStore,加密对可执行文件的大小本身影响很小,但它会严重影响可执行文件的压缩效率,导致压缩后的ipa文件大小增加,也就是下载的包变大,事实上这种加密只针对非越狱手机有用,对越狱手机不起作用。

THE END
1.宝宝食谱大全下载宝宝辅食食谱app哪个好宝宝食谱软件下载宝宝食谱app为用户带来更多的食谱软件,这些食谱软件更加适合宝妈为宝宝制作辅食,通过软件之中记录的食谱制作辅食,可以为宝宝补充更多成长所需要的维生素和各类营养,让宝宝可以在更多的健康美食下茁壮的进行成长.http://www.downcc.com/k/baobaoshipu/
2.网上厨房app下载安装最新版食谱软件你可以确定你的食谱,有助于你健康的饮食,是个不错的软件,希望你喜欢,有兴趣的朋友不妨来下载。手机安卓食谱软件哪个好,哪个宝宝食谱软件好?小编悉心整理了手机安卓食谱软件排行榜、手机食谱软件。小编为大家推荐最流行的食谱软件。 下厨房app 美食杰家常菜谱大全 豆果美食app 懒饭美食app 美食天下菜谱大全 家常https://m.liqucn.com/rj/29113.wml
3.学做菜的app排行榜前十名十大免费学做菜软件app推荐嘉肴健康美食菜谱手机版是一款由青岛嘉铭文化传播有限公司推出的美食应用,也称之为肴做饭做菜家常菜谱大全app,这里不仅有齐全丰富的菜谱,更有对您的健康状态,体质,慢性疾病和食疗的照顾性菜谱。这里的菜谱、食谱、美食、养生餐、儿童餐,食疗菜谱,美容菜谱, https://www.ddooo.com/zt/zcrj.htm
4.食谱自动生成APP推荐食谱自动生成下载而“食谱自动生成app”应运而生,为您提供了一个方便快捷的解决方案。这款智能应用程序能够根据您的个人喜好和健康需求,为您自动生成营养均衡的食谱,让您轻松享受美味健康的餐饮生活。您只需填写一些基本信息,如食材偏好、饮食习惯等,即可获得专业的营养师推荐的食谱,让您每天的饮食更加多样化和科学化。无论您是想https://www.wandoujia.com/bangdan/1243578/
5.孕妇食谱app哪个好?孕妇食谱软件排行榜孕妇每日食谱孕妇食谱app 共有10个软件 孕妇食谱是一款很不错的专为孕妇打造的健康饮食资讯软件,能够有效的给出合理的健康指导和饮食情况的分析,吃什么会对孕妇有好处,哪些食物是要避雷的地方,各种孕期和育儿、胎教等阶段的知识,还有各种适合孕妇吃的菜谱以及菜系推荐,吃什么补什么,从怀孕开始到月子时期的食谱大全,是准宝爸宝妈http://www.downyi.com/key/yunfushipu/
6.做菜app软件大全学做饭app下载做菜教学视频app下载美食天下app 8.0/17.01M /2024-04-23 家常菜谱大全 下载 烘焙帮app 8.2/22.29M /2024-09-25 小白学烘焙下厨房的视频菜谱大全 下载 掌厨app 6.7/28.17M /2024-01-17 找菜谱,看视频,学做菜,品美食 下载 香哈菜谱app 8.8/47.56M /2024-12-13 官方推荐厨房菜谱食谱应用 下载 懒饭App2024最新版 https://m.32r.com/zt/zfrj/
7.辅食达人在此!婴幼儿食谱app推荐儿童食谱作为新手父母,为宝宝提供健康营养的辅食是一项艰巨的任务。市面上琳琅满目的婴幼儿食谱app让人眼花缭乱,如何选择一款合适的app成为父母们面临的难题。 本文将为您推荐几款备受好评的婴幼儿食谱app,帮助您轻松应对宝宝的辅食需求。 1. 宝宝树 宝宝树是一款功能齐全的综合性育儿app,其中包含了丰富的婴幼儿食谱。该app根https://www.cibailian.com/ertong/20947.html
8.AppStore上的“智能食谱生成器&个性化食谱助手”免费 提供App 内购买项目 iPhone 截屏简介 使用Dish Generator 和 Recipe Keeper 充满自信和创造力地走进厨房。在我们的人工智能厨师的帮助下,根据产品、KCAL 或您的想法创建食谱。 特征: ? AI 食谱创建:根据想法、成分列表或大卡立即生成独特的食谱。 ? 杂货清单:创建并导出您的杂货清单 ? 食谱修改:轻松https://apps.apple.com/cn/app/%E6%99%BA%E8%83%BD%E9%A3%9F%E8%B0%B1%E7%94%9F%E6%88%90%E5%99%A8-%E4%B8%AA%E6%80%A7%E5%8C%96%E9%A3%9F%E8%B0%B1%E5%8A%A9%E6%89%8B/id6733245097
9.做饭的app排行榜前十名手机做菜app哪款好用?8款做菜app推荐给宝宝做饭的食谱软件上门服务做饭app做饭的app软件上门做饭的厨师服务app上门做饭app做饭软件学做饭软件厨师上门做饭app免费的学做饭软件教做饭做菜的app学做饭菜app上门做饭服务app学做饭的软件上门做菜app做表软件初中做题app教做菜的app照片做成视频的软件做相册软件自己做壁纸的软件https://m.pianwan.com/s/zj-5898647
10.美食菜谱根据食材生成的美食菜谱app软件哪个最好呢根据食材生成的美食菜谱app软件都有哪些呢?这些美食菜谱app软件汇聚了万千佳肴的详细做法,从经典家常菜到创新料理应有尽有。无论是想学习新技能,还是寻找灵感烹饪晚餐,都是你的不二之选。清晰的步骤指导,搭配诱人的成品图片,让烹饪过程既简单又充满乐趣。那么根据食材https://www.yxwoo.com/heji/mscp/
11.AI智能菜谱小程序人工智能平台开发(App系统定制)通过分析用户的口味偏好、营养需求和食材偏好等信息,智能菜谱小程序能够生成符合用户需求的菜谱,并提供烹饪步骤、食材购买建议和食谱定制化等功能。用户可以通过小程序快速找到适合自己的菜谱,提升烹饪技能并丰富饮食选择。 C. 人工智能作为实现AI智能菜谱小程序的基础技术http://guangzhou.11467.com/info/20943916.htm
12.医养结合智慧养老一体化信息化平台建设方案社区养老机构养老新建工单,按照工单模板进行工单填写;工单编号由系统设置的单据编号生成规则自动生成。 服务工单填写可以录入老人需求服务项目,服务地址可以是老人在系统所留存的家庭地址,也可以是填写其他地址,联系电话可以是老人来电号码,也可以是别的号码,留的哪个联系电话,相应的工单信息提示短信就会发到哪个号码上。可以根据老人要求,填http://www.jujiayanglao.net/Home/News/show-1050
13.美食食谱类APP开发功能需求分析美食食谱类APP开发针对当代的家庭用户以及上班族的饮食需求,提供人性化的菜谱内容系统以及新颖的学习模式,让用户可以通过APP交流沟通,提高做菜或者烘焙等方面的技术。 美食食谱类APP开发功能需求分析简介: 1、美食资讯。平系统会定时推送一些美食类的资讯,让用户了解一些美食制作的小技巧。 https://www.wandongli.com/index.php/news_detail.html?id=1749
14.recipeapp在这个案例中,“recipe-app-api”是一个基于Python语言构建的食谱应用API,主要用于提供食谱相关的数据服务,如搜索、查看、创建和编辑食谱等。 【Python编程基础】 Python是这个项目的编程语言,它以其简洁明了的语法和强大的库支持而闻名。Python的特性包括动态类型、自动内存管理以及丰富的标准库,这使得Python成为开发https://www.coder100.com/index/index/content/id/4028369
15.各位爱做饭的友友,假如有这样一款菜谱APP,你们感兴趣吗?如果有这样一款APP,你们会感兴趣吗?我准备开发一款私人食谱应用,希望能帮助大家更好地管理和优化自己的烹饪体验。请大家配合调查一下,做出来后会给大家免费使用哦! 我预计包含以下功能: 记录做菜步骤,形成你个人独一无二的菜谱,非常精美 做菜时的步骤提醒,全语音交互 家人可以在您的食谱中选择菜单 根据食谱生成食材https://www.douban.com/group/topic/305864618/
16.厨房故事app(KitchenStories)5、收藏功能可让你标注和找到你喜爱的食谱。 亮点 1、将你喜爱的食谱存入收藏夹。 2、你尝试发布一道菜谱,会获得最真实的厨友点赞,交流心得提升厨艺。 3、定期增加新食谱和烹饪方法。 4、可通过邮件发送自动生成的采购清单。 优势 1.用户体验良好:app的用户界面简洁明了,操作流畅,用户体验良好。无论是浏览菜谱https://www.hanzify.org/soft/27749.html
17.规划库存减少浪费:以Grocy为数据库的物品管理方案综合看来,Grocy 提供了一个很好的框架,易用的 API。同时,具有较为活跃的社区。目前已经有 iOS 客户端、Android 客户端、Barcode Buddy 扫码助手、Home Assistant 插件、Recipe Buddy 食谱助手等等。2 Grocy 已经具备了扫码出入库和基于Open Food Facts的食品信息获取等功能,但它的交互与其它 app 一样,仍然强烈依https://ios.sspai.com/post/83836
18.食谱搭配app哪个最好用食谱搭配app排行榜前十名食谱搭配app可以帮助我们合理规划饮食,还我们一个健康的饮食习惯,解决我们一日三餐不知道吃什么的问题,小编今天为大家推荐几款食谱搭配app,大家不要错过哦!http://www.sjwyx.com/phbang/spdpappphb/
19.学习打卡App排行榜华为手机学习打卡app推荐【有效开会就用钉钉会议】自动匹配发言人字幕:钉钉会议可精准定位多人会议中的发言人,让观点碰撞清晰有序,同时实时识别会议语音并呈现字幕,嘈杂环境或出差路上也能及时看到讨论内容,随时随地,流畅开会。会议要点智能提炼:无需专人记录,会中闪记帮你实时听会转写,及时生成会议摘要;智能转写录制会议内容,会后自动提炼http://vip.diandian.com/phb/1812/2-1.html
20.java毕业设计选题大全,题目仅供参考【584】基于ssm后端的后勤报修系统APP 【723】基于springboot vue前后端分离的宿舍管理系统 基于ssm家庭食谱管理系统 【520】基于java springboot二手书交易商城微信小程序 【388】springboot mybatis基于ssm办公自动化管理系统 基于微信小程序校园订餐平台+ssm后台管理 基于微信小程序的高校体育场管理系统https://blog.csdn.net/weixin_46437112/article/details/143503349