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

能否在苹果App Extension中使用Flutter实现Share Extension?

Flutter iOS/macOS Share Extension 合规实现方案

问题根因

你遇到的linking against a dylib which is not safe for use in application extensions警告属于预期报错,原因是默认编译的Flutter.framework未启用App Extension安全编译标记,且早期Flutter版本内部存在调用App Extension禁止的API的逻辑,直接使用无法通过苹果审核。

可过审的无hack实现方案

方案1:官方推荐的主App承接方案(最稳妥)

该方案不需要修改Flutter底层编译配置,100%符合苹果审核规则,是目前行业主流的实现方式:

  • 给主App和Share Extension开启同一个App Group权限,作为跨进程数据共享的通道
  • Share Extension仅保留最小原生逻辑:接收系统传入的共享内容(文本、图片、链接等),将数据存入App Group对应的共享存储区域,唤醒主App后直接结束Extension进程
  • 主App被唤醒后从App Group读取共享数据,跳转对应Flutter页面完成后续处理逻辑即可

方案2:Extension内直接运行Flutter(适合强需求场景)

Flutter 3.10及以上版本已经支持编译Extension安全的二进制文件,通过修改工程配置即可实现无hack的合规接入:

  1. 在iOS工程的Podfile中添加如下编译配置,强制所有依赖以App Extension安全模式编译:
post_install do |installer|
  installer.pods_project.targets.each do |target|
    flutter_additional_ios_build_settings(target)
    target.build_configurations.each do |config|
      # 启用Extension安全API限制
      config.build_settings['APPLICATION_EXTENSION_API_ONLY'] = 'YES'
      config.build_settings['LD_NO_PIE'] = 'NO'
    end
  end
end
  1. 为Share Extension单独初始化独立的FlutterEngine实例,不可复用主App的Engine(Extension与主App属于完全独立的进程)
  2. 确保你使用的所有Flutter插件都适配了App Extension规则,没有调用苹果禁止的Extension API,否则仍会被审核驳回

注意事项

  • 苹果对App Extension的内存限制远低于主App(通常仅为30~50MB),如果选择在Extension内运行Flutter,必须严格控制页面内存占用,避免进程被系统强制杀掉
  • 目前Flutter官方暂无针对App Extension的完整适配计划,方案2的适配逻辑需要开发者自行维护插件的兼容性

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 20:24:03