【QCon】精华内容上线92%,全面覆盖“人工智能+”的典型案例!>>> 了解详情
写点什么

我们如何将 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:221652

评论

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

火山引擎徐广治:边缘云,下一代云计算

火山引擎边缘云

云计算 边缘云 火山引擎边缘云

2023-07-14:讲一讲Kafka与RocketMQ中存储设计的异同?

福大大架构师每日一题

福大大架构师每日一题

小巧玲珑的AVIF,你的网页图片换新装!

汽车之家客户端前端团队

九个超级有用的 Javascript 技巧

这我可不懂

JavaScript js

一文读懂数字孪生是什么

高端章鱼哥

人工智能 大数据 数字孪生

银行机构数据治理案例解读,构建全行数据资产体系

袋鼠云数栈

数字化转型 金融

2023年iOS App Store上架流程详解(上)

以 AI 变革组织运营与管理,2023 Kyligence 用户大会盛大举行

Kyligence

数据分析 数智化

可观测性 Trace 全量存储之性能优化

乘云 DataBuff

APM 可观测性 k8s监控 全链路追踪 Dynatrace

牛刀低代码开发实战—需求评审

牛刀专业低代码

低代码 低代码开发平台 牛刀低代码 低代码paas平台 java低代码

突破:GGX(Golden Gate)发布悉尼测试网,跨链基础设施迈出重要一步

股市老人

学科知识图谱学习平台项目 :技术栈Java、Neo4j、MySQL等超详细教学

汀丶人工智能

人工智能 自然语言处理 深度学习 neo4j 知识图谱

LangChain 联合创始人下场揭秘:如何用 LangChain 和向量数据库搞定语义搜索

Zilliz

Milvus Zilliz #LangChain

三个实用重构技术,改进你的代码

这我可不懂

重构 代码 代码重构

微博评论的高可用计算架构

sandywrh

牛刀专业低代码开发实战—奖酬金预分配

牛刀专业低代码

低代码 牛刀低代码 低代码paas平台 java低代码 私有化低代码

Docker学习路线5:在 Docker 中实现数据持久化

小万哥

Java c++ Go Docker 后端

H5页面秒开优化与实践

汽车之家客户端前端团队

从十万行代码定位undefined is not an object (evaluating 't.length')

汽车之家客户端前端团队

给我五分钟!让你掌握React的Redux中间件原理

汽车之家客户端前端团队

免费试用商业智能工具,帮助您轻松选择BI工具

夜雨微澜

蚂蚁集团积极参与《金融业分布式信息系统运维技术研究报告》的编写

TRaaS

牛刀专业低代码开发实战—招聘管理

牛刀专业低代码

低代码 低代码开发平台 起步牛刀低代码 牛刀低代码 牛刀专业低代码

牛刀低代码开发实战—物联网车载大气监测

牛刀专业低代码

低代码 低代码开发平台 起步牛刀低代码 牛刀低代码 低代码paas平台

24款绘画软件app推荐免费!手绘爱好者必备。

彭宏豪95

效率工具 软件推荐 科技 画图工具 绘图软件

“开放合作 共享未来”华秋联手伙伴共创硬件生态,助力物联网硬件加速创新

华秋电子

白鲸开源WhaleScheduler完成阿里云PolarDB数据库产品生态集成认证

阿里云数据库开源

开源数据库 国产数据库 polarDB PolarDB-X PolarDB for PostgreSQL

苹果iOS App Store上架操作流程详解:从开发者账号到应用发布

官宣!Databend Cloud 和青云科技达成合作

Databend

HDC.Cloud 2023|邂逅AI,华为云CodeArts铸就研发效能10倍提升

华为云PaaS服务小智

华为 华为云 华为开发者大会2023

告别内卷,瓴羊飞渡,中国ToB生态迎来 iPhone 时刻

B Impact

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