AI实践哪家强?来 AICon, 解锁技术前沿,探寻产业新机! 了解详情
写点什么

在 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:008003

评论

发布
暂无评论

CST软件如何截取部分封装或者PCB进行仿真

思茂信息

cst操作 电磁仿真 CST Studio Suite

腾讯云与宝德计算深化战略合作,打造融合创新生态标杆

极客天地

微店平台中关键词获取商品详情数据采集实例演示

代码忍者

微店API

A10 ACOS 6 - 专为现代应用程序设计的开放式云就绪操作系统

sysin

A10

Apple Safari 18.5 - macOS 专属浏览器 (独立安装包下载)

sysin

safari

什么是im即时通讯?私有化im即时通讯软件优势是什么?

BeeWorks

即时通讯 IM 私有化部署 企业级应用

Apache DolphinScheduler社区答疑Star第三期评选结果公示

白鲸开源

大数据 开源 大数据任务调度 Apache DolphinScheduler

HyperWorks飞机复合材料结构分析(OptiStruct)

智造软件

仿真 建模 CAE hyperworks 复合材料

AI题库APP的开发框架

北京木奇移动技术有限公司

题库系统 软件外包公司 AI题库

Metasploit Framework 6.4.63 (macOS, Linux, Windows) - 开源渗透测试框架

sysin

Metasploit

Metasploit Pro 4.22.7-2025051201 (Linux, Windows) - 专业渗透测试框架

sysin

Metasploit

Shotcut 25.05 (Linux, macOS, Windows) - 免费开源视频编辑器

sysin

视频编辑

文献解读-Sentieon DNAscope LongRead – A highly Accurate, Fast, and Efficient Pipeline for Germline Variant Calling from PacBio HiFi

INSVAST

长读长测序 Sentieon 变异分析 DNAscope LongRead 生信分析服务

升级遇到坑?一文带你搞定DolphinScheduler 2.0到3.0升级

白鲸开源

开源 技术 干货 Apache DolphinScheduler 版本升级

Blender 入门教程(二):纹理绘制

北桥苏

建模 blender

中小企业怎么低成本实现智能改造,数字化转型?

积木链小链

数字化转型 智能制造 中小企业

蒙纳宣布收购韩国知名字体公司DESIGN210,推动高质量字体全球化

财见

AI题库APP的核心功能

北京木奇移动技术有限公司

AI技术 题库系统 软件外包公司

博云 AIOS 通过国家工信安全中心测试,产品完整性与功能性获权威认证

BoCloud博云

博云

华为音乐携手库客音乐,共筑高品质古典音乐新生态

最新动态

你没见过的调度玩法!Zoom首次公开DolphinScheduler创新应用

白鲸开源

开源 Zoom 技术分享 Apache DolphinScheduler

国内到美国的网络问题怎么解决?美国专线网络方案详解

Ogcloud

SD-WAN 美国专线网络 美国网络专线 美国专线 中美网络专线

最新日程!Altair 区域技术交流会华东站:邀您共探仿真智能化实践

Altair RapidMiner

人工智能 AI 数字孪生 仿真 CAE

去中心化云算力重构3A云游戏,元宇宙游戏还会远吗?

PowerVerse

元宇宙 云游戏 去中心化云算力

A10 Thunder 6.0.5 - 应用交付与负载均衡

sysin

A10

就在下周丨中煤科工、山东临工 、中国农机院、中建科…共探离散元仿真技术新视界

Altair RapidMiner

仿真 CAE 离散元仿真 工程机械 颗粒仿真

AI题库APP的开发流程

北京木奇移动技术有限公司

AI技术 软件外包公司 AI题库

SpringAI更新:废弃tools方法、正式支持DeepSeek!

王磊

【FAQ】HarmonyOS SDK 闭源开放能力 —Share Kit(2)

HarmonyOS SDK

harmoyos

VMware NSX 4.2.2 发布,新增功能概览

sysin

nsx

A10 vThunder 6.0.5 - 虚拟化应用交付控制器 (ADC)

sysin

A10

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