You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Expo Prebuild iOS端AppDelegate.mm修改丢失及安卓差异咨询

Expo Prebuild 常见问题解答

1. iOS 替换 AppDelegate.mm 是预期行为吗?

是的,这是expo prebuild的预期行为。Expo 的 prebuild 机制基于项目中的app.json/app.config.js等配置文件,完全重新生成 iOS 和 Android 的原生项目文件,包括 AppDelegate.mm 这类核心原生文件。每次运行 prebuild 时,它会用模板文件覆盖现有文件,因此手动修改的内容会被清除。图标被重新生成同样是预期行为,Expo 会根据app.json里的icon字段自动生成适配各种尺寸的 iOS 图标。

2. 如何持久化 AppDelegate.mm 的修改?

推荐两种可靠方案:

  • 使用 Expo Config Plugins:这是官方推荐的方式。你可以编写自定义配置插件,在 prebuild 过程中自动将修改注入到 AppDelegate.mm 中。比如添加原生模块初始化代码,插件可通过修改 AST(抽象语法树)插入代码,避免手动修改被覆盖。具体做法是创建插件文件,用withAppDelegate函数修改 AppDelegate 内容,再在app.config.js中注册该插件。
  • 手动合并修改:如果不想编写插件,可每次运行expo prebuild --no-install,之后手动对比新生成的 AppDelegate.mm 和之前的修改版本,合并自定义内容。这种方式较繁琐,适合临时修改或简单场景。

3. 为何 Android 平台的变更比 iOS 少?

主要有三点原因:

  • Android 项目结构更分散灵活:Android 的原生配置分散在AndroidManifest.xml、build.gradle、MainActivity.kt等多个文件中,Expo 的 prebuild 模板仅修改必要配置项,而非完全覆盖所有文件。比如自定义代码可放在独立的 Application 类中,不会被 prebuild 覆盖。
  • iOS 依赖集成更集中:iOS 多数原生模块的配置需集中在 AppDelegate.mm 中(如初始化第三方 SDK、处理 Deep Link 等),Expo 需完全控制该文件以保证配置一致性;而 Android 可通过清单文件、gradle 配置或单独类处理这些逻辑,无需频繁修改核心 Activity 文件。
  • Expo 对 Android 的兼容性策略:Android 版本与设备碎片化更严重,Expo 的 prebuild 机制在 Android 端尽量保留用户自定义修改,仅更新必要部分保证项目可运行,而 iOS 端依赖完全生成的模板避免配置冲突。

内容的提问来源于stack exchange,提问作者Samarth Kadam

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 14:04:56