HarmonyOS开发者限时福利来啦!最高10w+现金激励等你拿~ 了解详情
写点什么

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

评论

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

PVP2 ProVideoPlayer2 for Mac(PVP2多屏幕演示投放软件) v2.1.6永久激活版

mac

苹果mac Windows软件 ProVideoPlayer2 多功能演示工具

聊一聊 C# 线程切换后上下文都去了哪里

不在线第一只蜗牛

C# 前端 线程 window

教你几个部署多个nginx-ingress的注意事项

华为云开发者联盟

容器 开发 华为云 华为云开发者联盟

ABAQUS如何进行疲劳分析?

思茂信息

仿真软件 abaqus 有限元分析 有限元技术 结构仿真

首个离散元仿真软件EDEM好学吗?有什么学习技巧?

智造软件

仿真软件 仿真工具 离散元 离散元仿真 仿真分析

如何做代币分析:以 LINK 币为例

Footprint Analytics

区块链 加密货币 代币 LINK

QA团队基于DataLeap开放平台能力的数据测试实践

字节跳动数据平台

大数据 测试 QA 数据研发 数据管控

我的2023总结,AI快速发展的一年

零零

AI #技术人的2023总结

开发一个免费的App操作流程

Geek_2305a8

生成式AI:未来的发展方向是什么?

不在线第一只蜗牛

人工智能 生成式人工智能 技术 优化体系

通过小程序实现App灰度测试的好处

Geek_2305a8

低代码可视化工具10分钟完成应用开发

互联网工科生

软件开发 低代码平台 可视化开发 JNPF

松柏之志,下聚百川-松下中国阿里云大数据实践

阿里云大数据AI技术

HBase深度历险 | 京东物流技术团队

京东科技开发者

灰度测试的方式都有哪些?

Geek_2305a8

获奖名单公示|荣耀时刻,「第5届天池全球数据库大赛」决赛圆满收官

阿里云瑶池数据库

数据库 阿里云 阿里云瑶池数据库

生成式 AI,从陌生到使用,仅需两门课

科技热闻

还不知道什么是生成式 AI?两门课带你从了解到使用

科技热闻

使用代码生成工具快速开发应用-结合后端Web API提供接口和前端页面快速生成,实现通用的业务编码规则管理

快乐非自愿限量之名

Vue 前端 Web 后端 代码生成

称重驱动二次开发教程

EquatorCoco

技术 开发 系统 电子称重系统

“GPT驱动的新程序员时代 ,我们该如何编程”分论坛圆满举办

开放原子开源基金会

开源

大模型应用开发之道圆满举办

开放原子开源基金会

开源

11AC-IPQ4019 and 11AX-IPQ6010 motherboards with or without SFP,What is the difference between ?

wifi6-yiyi

wifi6 802.11ac 802.11AX

【第七在线】商品计划对于服装企业的重要性

第七在线

分享5个程序员必备的终端工具

伤感汤姆布利柏

前端 终端 低代码 JNPF

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