写点什么

在 Lyft 创建 iOS 应用扩展的挑战

作者:Sergio De Simone

  • 2024-12-30
    北京
  • 本文字数:1153 字

    阅读完需:约 4 分钟

在 Lyft 创建 iOS 应用扩展的挑战

在最近的一篇文章中,Lyft 工程师 Artur Stepaniuk 和 Max Husar 描述了 Lyft 如何处理为其 iOS 应用创建应用扩展的复杂性,其难点在于不打破苹果设置的严格的 RAM 和二进制大小限制,也不损害用户体验。


Lyft 的 iOS 应用包含一个扩展,可将其与 Apple Maps 集成,并在 Maps 应用内提供有关 Lyft 优惠的信息。正如 Stepaniuk 和 Husar 所解释的那样,以有效方式创建 iOS 应用扩展的关键是正确管理依赖项,以尽可能提高应用和扩展中的代码重用率,同时优化二进制大小和内存使用率。


此过程中的主要复杂因素是无法使用动态链接来避免在启动时将它们加载到内存中的成本,这会让应用程序在启动时过于缓慢。这使得静态链接成为唯一可行的选择,尽管代价是增加应用程序二进制大小及其内存占用。但是,


更大的二进制大小会导致更长的下载和安装时间,从而可能减少安装数量。最坏的情况是达到 200 MB 的下载大小限制,这会在使用蜂窝数据下载应用程序时触发额外的确认对话框。


在内存方面,Lyft 工程师发现扩展可能只能使用 20 到 50MB 的 RAM,具体取决于 iOS 版本、设备型号和其他因素。


为了减少应用程序二进制大小和内存占用,Lyft 工程师分析了他们应用程序的依赖关系图,以确定占用最大的模块。由于 Lyft 使用 Bazel,他们依靠图形可视化软件 Graphviz,使用 query --output=graph 命令从 Bazel 生成的数据创建图像。


为了详细测量二进制大小影响,可以将每个模块作为唯一的依赖项添加到 Apple Maps 扩展,并使用 binary-size-diff 工具进行分析。


binary-size-diff 是一种对比基础分支和给定拉取请求之间的二进制大小差异的工具。这样就可以测量删除(或包含)依赖项的实际效果。


获得该信息后,下一步就是识别所有看起来没必要加入的依赖项。为此,Lyft 工程师使用了 Bazel 的另一个功能来显示两个模块之间的传递依赖关系。


bazel query 'allpaths(INITIAL_MODULE_PATH:INITIAL_MODULE_NAME, TARGET_MODULE_PATH:TARGET_MODULE_NAME)' --output=graph | grep -v 'node \[shape=box\];' > relations.dot
复制代码


此命令会显示将所调查模块与其每个较大依赖项连接起来的路径中包含哪些模块,这样你就可以删除它们或使目标模块不依赖它们。在某个场景下,Lyft 团队决定复制一项服务以创建最小依赖项,目的是打破对较大模块的依赖。


使用这种方法,Lyft 工程师将其扩展的二进制大小从 45MB 减少到了 15MB。虽然 30MB 的减少对于服务端或桌面应用程序来说并不重要,但它相当于 200MB“安全”大小限制的 15%。


Stepaniuk 和 Husar 的文章包含了与发布应用扩展过程相关的其他细节,例如如何确保扩展可用于所有受支持的区域、使用 APPLICATION_EXTENSION_API_ONLY 构建设置的效果以及 SiriKit 特性,因此如果你对这些主题感兴趣,请不要错过它。


原文链接:

Challenges of Creating iOS App Extensions at Lyft


2024-12-30 09:007939

评论

发布
暂无评论

北京前端培训学习怎么选择

小谷哥

大数据学习好还是自学的效果好?

小谷哥

CSDN 报告:阿里云容器服务成为中国开发者首选

阿里巴巴中间件

阿里云 云原生 云原生容器

皮皮APP夏日防溺水公益讲座 联动武汉长江救援队筑建生命安全线

联营汇聚

解决 Flutter 嵌套过深,是选择函数还是自定义类组件?

岛上码农

flutter ios 前端 安卓开发 8月月更

零基础参加web前端培训薪资怎么样

小谷哥

web前端程序员学习靠谱吗?

小谷哥

Python自学教程4-数据类型学什么

和牛

Python 测试 8月月更

有个大神把牛客网的Java面试笔记在GitHub开源了

收到请回复

大数据 架构 语言 & 开发 开发技术

[CSS入门到进阶] 外国前端开发者说的 Intrinsic Ratios in css 是什么意思?

HullQin

CSS JavaScript html 前端 8月月更

推荐这几款好用的IDEA插件,一定不要错过

(-0 , +0)

IDEA 插件 8月月更

社区疫情防控小程序源码

清风

源码 计算机毕业设计

购物中心的运营保障,数衍科技数据桥接服务系统升级

科技怪咖

仅用3年!青软集团跃升华为云教育类目伙伴TOP2

科技怪咖

风险组件已经升级到最新版本,仍然提示风险,如何快速解决——kaptcha 安全漏洞

墨菲安全

Kaptcha 漏洞修复 开源安全 漏洞检测 开源安全与治理

EPPlus - 用于 .NET 的 Excel 电子表格

辣么大

Excel net 8月月更

在线医疗 | 眩晕智能语音问诊技术解决方案

擎声科技

RTC 实时音视频 语音通话 在线医疗 擎声Qtt

java程序员培训学习靠谱吗

小谷哥

开源一夏 |分布式事务--TCC解决方案

六月的雨在InfoQ

开源 分布式事务 TCC 最终一致性 8月月更

活动预告(29日)|诚邀您参与AWS & 观测云「可观测性体验日」

观测云

案例 | 拯救Larrakia

澳鹏Appen

人工智能 数据库 nlp 语音识别 数据标注

直播预告|FeatureStore Meetup V4携手第四范式 & 腾讯 & 微软大咖讲师,共探特征平台实践

星策开源社区

微软 腾讯 Feature Store 特征平台 MLOps

数衍科技与超市发达成合作,共同探索数字小票的新应用

科技怪咖

数字化时代CRM新的发展方向

力软低代码开发平台

腾讯云大数据平台 TBDS全面升级,加速构建安全可控的大数据生态

科技热闻

一加和OPPO是什么关系?我来揭秘

Geek_8a195c

ARMS实践|日志在可观测场景下的应用

阿里巴巴中间件

阿里云 云原生 可观测

OceanBase 4.0:当我们谈单机分布式一体化架构时,我们在说什么?

OceanBase 数据库

defi质押dapp智能合约系统开发代码逻辑

开发微hkkf5566

Python自学教程5-字符串有哪些常用操作

和牛

Python 测试 8月月更

在 Lyft 创建 iOS 应用扩展的挑战_软件工程_InfoQ精选文章