写点什么

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

评论

发布
暂无评论

Screen Studio for Mac(屏幕录制软件) v2.20.4激活版

iMac小白

Databend Labs 成立 3 周年!

Databend

如何基于容器网络流量指标进行弹性伸缩

华为云开发者联盟

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

从《繁花》看图数据库的关联力!

博文视点Broadview

引领测试开发新风向:模型驱动测试的魔力

测吧(北京)科技有限公司

测试

Remote Desktop Manager for mac(远程桌面管理器) v2024.1.5.1中文激活版

iMac小白

Menuwhere for Mac(菜单栏工具) v2.2.2免激活版

iMac小白

金融信创湖仓一体数据平台架构实践

数新网络官方账号

金融 信创 数据平台 湖仓一体

下一代积木式智能组装编排,集成开发效率10倍提升

华为云PaaS服务小智

华为云

Tower for Mac(强大的Git客户端) v10.5注册激活版

iMac小白

好物期刊#1:我每天都使用的在线工具

JavaPub

程序员 计算机 在线工具

利用API接口进行竞品价格监控的综合指南

Noah

SecGPT-Mini,一个在CPU上可体验的开源网络安全大模型

云起无垠

MediaHuman YouTube to MP3 Converter mac(YouTube音乐转MP3转换器) v3.9.9.88中文注册版

iMac小白

Lock-It for Mac(应用程序加密工具) 1.2.0激活版

iMac小白

淘宝1688京东...商品详情API接口(属性,详情图,价格,sku评价等接口)可高并发批量采集

Anzexi58

API 文档

数字先锋| 上云!让“媒”好“发声”

天翼云开发者社区

云计算 网络 上云

引领测试开发新风向:模型驱动测试的魔力

测试人

软件测试

MediaHuman YouTube Downloader mac(YouTube视频下载工具) v3.9.9.88中文注册版

iMac小白

如何使用香山之香山工具详解:difftest应用及配合波形检验

源芯

芯片设计 risc-v 开源芯片 高性能处理器香山

电子元器件行业MES系统能解决哪些管理难题?

万界星空科技

工业互联网 制造业 电子元器件 mes 万界星空科技

释放全球互连的数字潜力!MWC 2024云网高峰论坛召开,中国电信天翼云扬帆起航!

天翼云开发者社区

云计算 峰会 世界移动通信大会

Cycling 74 Max for Mac(音乐可视化编程软件) v8.6.1激活版

iMac小白

OSXBytes Remove-It for Mac(Mac电脑清理工具) v1.4.1激活版

iMac小白

钉钉如何通过AppLink快速连接仓储系统

RestCloud

钉钉 APPlink 自动化集成 仓储系统

LLM 推理优化探微 (2) :Transformer 模型 KV 缓存技术详解

Baihai IDP

程序员 AI LLM 白海科技 KV缓存

开发者分享:利用 EMQX Cloud 与 ESP32 微控制器实现智能液冷散热系统

EMQ映云科技

mqtt mqtt broker

Vocabulary

Echo!!!

Ableton Live 12 Suite for mac(音乐制作工具) v12.0中文激活版

iMac小白

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

Footprint Analytics

blockchain Token LDO

低代码平台与MES:智能制造的新篇章

万界星空科技

制造业 低代码平台 mes 万界星空科技 机器人组装行业

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