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

Apple M1(Rosetta模式)下React Native项目Xcode构建iOS归档失败求助

我之前在M1 Mac上用Rosetta运行React Native 0.63项目归档时,碰到过和你一模一样的问题!你试过的pod reintegrate、删锁文件这些操作我当时也都试过,后来发现是Shell环境和Pods脚本的严格变量检查冲突导致的,给你几个亲测有效的解决办法:

解决方法

方法一:通过Podfile自动修复脚本(推荐)

在iOS目录下的Podfile末尾添加这段配置,它会自动修改Pods的框架脚本,关闭未绑定变量的严格检查,同时指定用bash运行:

post_install do |installer|
  # 遍历所有target,调整Shell配置
  installer.pods_project.targets.each do |target|
    target.build_configurations.each do |config|
      config.build_settings['SHELL_PATH'] = '/bin/bash'
    end
  end

  # 给Pods-SagaReserve-frameworks.sh添加set +u,取消未绑定变量报错
  framework_script = File.join(installer.pods_project.path.parent, 'Target Support Files/Pods-SagaReserve/Pods-SagaReserve-frameworks.sh')
  if File.exist?(framework_script)
    content = File.read(framework_script)
    # 只在开头没加过的情况下添加
    unless content.start_with?('set +u')
      File.write(framework_script, "set +u\n#{content}")
    end
  end
end

添加完成后,执行:

cd ios
pod install

然后重新打开Xcode尝试归档。

方法二:手动修改Xcode的构建阶段

如果方法一没生效,可以直接修改Xcode里的构建脚本:

  1. 打开Xcode,选中你的项目target SagaReserve,切换到Build Phases标签
  2. 找到[CP] Embed Pods Frameworks这一项,双击打开脚本编辑界面
  3. 在脚本的最开头添加一行:set +u(这行命令会关闭"未绑定变量即报错"的严格模式)
  4. 同时把顶部的Shell选项从/bin/sh改成/bin/bash

保存后重新归档试试。

方法三:调整终端的默认Shell

如果你的Mac默认用的是zsh,在Rosetta环境下可能会有变量传递问题:

  1. 打开终端,右键点击Dock里的终端图标,选择「显示简介」,勾选「使用Rosetta打开」
  2. 在终端里执行命令:chsh -s /bin/bash,把默认Shell改成bash
  3. 重启终端和Xcode,再尝试归档

问题原因

这个错误source: unbound variable是因为Pods的框架脚本启用了set -u严格模式(遇到未定义的变量就终止执行),而在M1+Rosetta的混合环境下,某些环境变量没有被正确传递,触发了这个检查。上面的方法要么关闭了严格检查,要么切换到兼容性更好的bash环境,就能解决问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 18:32:27