AICon 上海站|日程100%上线,解锁Al未来! 了解详情
写点什么

我们如何将 Pinterest 的 iOS 应用大小减少 30% 以上

  • 2021-05-12
  • 本文字数:1271 字

    阅读完需:约 4 分钟

我们如何将 Pinterest 的 iOS 应用大小减少 30% 以上

众所周知,应用程序的大小(下载大小 [1] [2])是非常重要的,并且在应用程序的大小和客户参与度之间存在关联。通常,人们会根据大小来决定是否使用软件,甚至以兆字节来支付带宽。更不用说,随着应用程序大小的增加,卸载率也会上升,这会导致用户试图释放设备上的磁盘空间。

 

近来,我们对 Pinterest 的 iOS 版 v9.1 进行了改进,使其体积大大减少:


表 1:iPhone 11 Pro 是我们的目标机型。

 

结果,自从发布以来,我们发现新版本(用户从 App Store 下载)的应用程序安装量有所增加。

问题是什么?

 

关于 Pinterest 的背景,我们使用 Bazel 进行 iOS 版本构建。加入你不熟悉 Bazel,这篇文章值得一读。

 

要创建本地化文件,我们有一个 CI 作业,它在应用程序(通过 Bazel 查询)中自动扫描所有源代码,并将其发送给 Mojito 进行翻译。这在我们添加一些扩展之前一直运行良好。

 

每个扩展都是具有自己 BUILD 文件的模块。在 Bazel 构建后,它将本地化字符串从主应用包复制到每个扩展包。但是,这会通过复制每个扩展中的 Localizable.strings 文件来扩展整个应用包。

 

因此,我们决定删除扩展中的本地化副本。

修复

 

第一,我们更新了 BUILD 文件,这样扩展程序就不会从主应用包复制本地化字符串了。

 

但是,使用这个更改,NSLocalizedString 无法正确加载本地化字符串。在进一步研究之后,我们发现这些宏都使用 +[NSBundle mainBundle],但是 [NSBundle mainBundle] 实际上会返回一个包含“当前应用程序可执行文件”的包,当从扩展中调用该包时,该包将作为你的应用程序的子文件夹。举例来说,它是 /path/to/Pinterest.app/PlugIns/SiriExtension.appex/ 而非 /path/to/Pinterest.app/。为了使 NSLocalizedStringWithDefaultValue 能够从主应用包中读取本地化字符串,我们进行了更改来对路径进行设置。

 

这些全部已保存更改((所有 Localizable.strings 的大小)*(具有这种本地化重复的扩展的数量)),大约占全部应用程序大小的 30%。

长远规划

 

接下来,我们计划将本地化资源放入各自的 SDK/ 扩展中,而非依赖于应用包,这样做有以下好处:

 

  • 每个包都将是自包含的,所以它不需要主应用程序包就能运行或测试本地化,并且可以被绑定到一个单独的应用程序中。

  • 在扩展代码中,NSLocalizedString 和本地化 API 按照自己的方式工作。

  • 让包开源。

 

此外,还可以进行其他可能的改进,例如,删除不必要的非面向消费者的代码本地化,研究更大尺寸的图像格式,以及其他编译器级的优化。

 

[1] 下载大小是指从 App Store 下载时传输的实际大小,只有当应用超出苹果确定的 200 MB 的限制,且用户没有使用 Wi-Fi 时才会显示,除非用户更改默认设置。由于它被压缩,所以比通常的安装体积要小。


[2] 本地安装大小是指实际应用在你的手机磁盘上的大小(设置应用→iPhone 存储→Pinterest→应用大小)。它是为你的手机型号瘦身的,所以通常比通用体积小。

 

作者介绍:


Liang Ma,Pinterest Engineering 团队应用基础软件工程师。

 

英文原文链接:https://medium.com/pinterest-engineering/how-we-reduced-pinterests-ios-app-size-by-30-50mb-68d7f8425882

2021-05-12 17:221863

评论

发布
暂无评论
发现更多内容

八股MQ007——浅谈Broker的网络架构

Codyida

后端、

聆心智能联合洪恩打造“AI问答”|国内首批儿童启蒙成长领域类ChatGPT式应用

硬科技星球

基于Sovit2D智慧养鸡组态大屏管理系统

2D3D前端可视化开发

物联网 组态软件 智慧农业 web组态 智慧养鸡

3 步集成 Terraform + 极狐GitLab CI ,实现基础设施自动化管理

极狐GitLab

ci DevOps 基础设施 Terraform 极狐GitLab

流控验证太麻烦?不敢上生产?MSE 有办法!

阿里巴巴云原生

阿里云 微服务 云原生 Spring Cloud Apache Dubbo

IOS技术分享| 快对讲2.0会议场景实现

anyRTC开发者

ios 音视频 视频会议 移动开发 快对讲

MySQL表分区的选择与实践小结

北桥苏

MySQL 表分区

如何使用Fiddler抓取APP接口和微信授权网页源代码

北桥苏

fiddler 网络抓包 抓包分析 抓包工具

开源字节数字化乡村系统

源字节1号

开源 软件开发 小程序开发

如何向大模型ChatGPT提出问题以获得优质回答:基于AIGC和深度学习的实践指南

GPU算力

从“能用”到“好用”:它的出现,解决你80%的转型困境【内含免费试用附教程】

加入高科技仿生人

低代码 数字化业务转型 数字转型

解决centos的mysql服务3306端口无法远程连接10038问题

北桥苏

MySQL 安装宝塔

谷歌全线反击!PaLM 2部分性能已经超越GPT-4

引迈信息

低代码 Google ChatGPT JNPF PaLM 2

瓴羊Quick BI数据可视化打造看板,助力极氪汽车决策

夏日星河

PHP公众号开发给用户发微信消息提醒功能

北桥苏

微信公众号 模板 公众号接入

感受国产BI工具的理论,瓴羊Quick BI、Smartbi对比

对不起该用户已成仙‖

DApp泰山众筹系统开发合约搭建

薇電13242772558

智能合约 dapp

从立项到发布仅三个月,开源技术问答社区 Answer 是如何诞生的?

万事ONES

让开发者成为创新主体 | 阿里云云原生4月动态

阿里巴巴云原生

阿里云 云原生 月报

购买小间距led显示屏需要注意什么?

Dylan

图像 像素灰度 LED显示屏

如何使用apache的ab压力测试小工具传参数

北桥苏

AB apche A/B 测试

中馥科技集团成为五粮液社交零售战略合作伙伴,强强联手布局白酒赛道

电子信息发烧客

聊点技术 | 自适应AI,让Bonree ONE更智能

博睿数据

可观测性 智能运维 博睿数据 Bonree ONE ONE有引力

高性能网络 SIG 月度动态:长期投入得到业界认可,新增一位 virtio reviewer

OpenAnolis小助手

高性能网络 龙蜥社区 virtio anck SIG动态

PHP简单实现异步多文件上传并使用Postman测试提交图片

北桥苏

php OSS thinkphp

打破技术封锁,瓴羊Quick BI、Smartbi等国产BI工具崛起

夜雨微澜

大数据

轻松网站下载:SiteSucker mac汉化激活版

真大的脸盆

Mac Mac 软件 网站下载 下载网站工具 网站下载工具

我们如何将 Pinterest 的 iOS 应用大小减少 30% 以上_语言 & 开发_Pinterest Engineering_InfoQ精选文章