网易首页 > 网易号 > 正文 申请入驻

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

0
分享至

作者 | Sergio De Simone

译者 | 王强

策划 | Tina

在最近的一篇文章中,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(https://www.infoq.com/news/2024/12/lyft-ios-maps-extension/)

声明:本文为 InfoQ 翻译,未经许可禁止转载。

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
证监会最新发布!吴清发声!

证监会最新发布!吴清发声!

数据宝
2026-01-17 17:51:47
浙江女老师跟丈夫旅游,失踪1天1夜,在江中被发现时只剩头颅

浙江女老师跟丈夫旅游,失踪1天1夜,在江中被发现时只剩头颅

叹为观止易
2026-01-17 10:47:58
1000架歼-20和900架歼-16?英国智库:难以战胜2030年的中国空军

1000架歼-20和900架歼-16?英国智库:难以战胜2030年的中国空军

军机Talk
2026-01-17 14:25:03
贾国龙活成了堂吉诃德,向着想象中的风车冲锋,老罗都于心不忍

贾国龙活成了堂吉诃德,向着想象中的风车冲锋,老罗都于心不忍

上林院
2026-01-16 21:28:03
原来有这么多工作需要保密!网友:牺牲12年的爸爸竟然回来了!

原来有这么多工作需要保密!网友:牺牲12年的爸爸竟然回来了!

另子维爱读史
2026-01-16 18:29:22
林彪离世后,原256号副机长康庭梓罕见爆料,揭开坠机尘封真相

林彪离世后,原256号副机长康庭梓罕见爆料,揭开坠机尘封真相

磊子讲史
2026-01-06 15:54:18
罗永浩、贾国龙均被禁言

罗永浩、贾国龙均被禁言

扬子晚报
2026-01-16 22:36:42
免税结束,车市“凉凉”?

免税结束,车市“凉凉”?

汽车公社
2026-01-15 08:43:51
加入澳大利亚国籍,我后悔了!

加入澳大利亚国籍,我后悔了!

澳洲财经见闻
2026-01-17 14:58:19
孩子为买电话手表和父母签离谱协议,网友:李鸿章来了也不敢签啊

孩子为买电话手表和父母签离谱协议,网友:李鸿章来了也不敢签啊

新东方
2026-01-16 17:32:03
小泽会见扎卢日内,叶尔马克被从腐败嫌疑人中排除

小泽会见扎卢日内,叶尔马克被从腐败嫌疑人中排除

近距离
2026-01-16 14:15:59
三次DNA儿子不是亲生的,可我从未外遇!直到医生说出真相

三次DNA儿子不是亲生的,可我从未外遇!直到医生说出真相

黄家湖的忧伤
2026-01-16 16:42:15
美媒实锤歼-20飞越台岛,台军零反应防线失效,统一大势不可阻挡

美媒实锤歼-20飞越台岛,台军零反应防线失效,统一大势不可阻挡

Hi科普啦
2026-01-16 15:14:30
俄罗斯石油天然气收入下降24%,创五年来新低,2026年将继续下跌

俄罗斯石油天然气收入下降24%,创五年来新低,2026年将继续下跌

山河路口
2026-01-17 19:24:20
“中产返贫”一条街:半生积蓄秒变负债,只剩公务员和躺平赢家?

“中产返贫”一条街:半生积蓄秒变负债,只剩公务员和躺平赢家?

笑熬浆糊111
2026-01-17 17:00:41
失算!麻黄鸡协会本想“毁掉”董宇辉,不料自己先被扒了个底朝天

失算!麻黄鸡协会本想“毁掉”董宇辉,不料自己先被扒了个底朝天

讯崽侃天下
2026-01-16 10:44:44
很多人的存款都将归零

很多人的存款都将归零

诗词中国
2025-12-22 19:22:52
最新 | 天津最新雪情!降雪时段集中在→

最新 | 天津最新雪情!降雪时段集中在→

天津广播
2026-01-17 15:46:09
这下麻烦大了!不到24小时,李湘迎来3个噩耗,个个戳她心窝

这下麻烦大了!不到24小时,李湘迎来3个噩耗,个个戳她心窝

老汆古装影视解说
2026-01-17 06:34:51
全世界都在静静等待,战争可能很快到来

全世界都在静静等待,战争可能很快到来

牛弹琴
2026-01-14 07:46:19
2026-01-17 20:40:49
InfoQ incentive-icons
InfoQ
有内容的技术社区媒体
11948文章数 51703关注度
往期回顾 全部

科技要闻

8亿周活扛不住烧钱 ChatGPT终向广告"低头"

头条要闻

媒体:网友捐款超1400万 并不能直接解决嫣然医院问题

头条要闻

媒体:网友捐款超1400万 并不能直接解决嫣然医院问题

体育要闻

三巨头走了俩,联盟笑柄却起飞了

娱乐要闻

马年春晚首次联排场外细节!

财经要闻

保不准,人民币会闪击6.8!

汽车要闻

林肯贾鸣镝:稳中求进,将精细化运营进行到底

态度原创

教育
亲子
艺术
数码
公开课

教育要闻

科一、北川中学、蜀东外国语......绵阳多所学校正在招聘

亲子要闻

双胞胎宝宝的行为让人好奇,他们长大后回忆了当时的聊天记录,网友:回头再看一遍还真说得通

艺术要闻

这美丽的风景画,真是让人流连忘返

数码要闻

苹果多款产品将于2026至2028年陆续换装OLED屏幕

公开课

李玫瑾:为什么性格比能力更重要?

无障碍浏览 进入关怀版