iOS ReactNative 构建在 M1 mac 上失败

时间:2021-02-11 06:10:39

标签: react-native react-native-ios apple-m1

我在基于 M1 芯片的 Mac 上使用 npx react-native “projectName”创建了一个示例 ReactNative 项目。创建的项目没有任何问题,android 项目构建并成功运行,在谷歌预览模拟器和真实设备上都没有任何错误。但是 iOS 构建失败了。我已经使用 Rosetta 安装了可可豆荚,并安装了其他所需的软件包和软件,例如 home-brew、watchman、Xcode、iOS 模拟器等

但是如果我创建一个博览会项目,它在 iOS 和 android 上都可以正常工作,但我想知道,基于 ReactNative CLI 的项目在 M1 芯片组上工作正常,如果它确实工作,那么可能有问题我的开发设置。

请帮助我解决这个问题

这是日志文件数据

<块引用>

块引用 0 详细的 cli [ 0 详细的 cli '/usr/local/bin/node', 0 详细 cli '/usr/local/lib/node_modules/npm/bin/npm-cli.js', 0 详细的 cli 'exec', 0 冗长的 cli '--', 0 详细的 cli 'react-native', 0 详细的 cli 'run-ios' 0 详细 cli ] 1 条信息使用 npm@7.4.0 2 信息使用 node@v15.6.0 3 时序 config:load:defaults 1ms 内完成 4 时序 config:load:file:/usr/local/lib/node_modules/npm/npmrc 2ms 内完成 5 时序 config:load:builtin 2ms 内完成 6 计时 config:load:cli 1ms 内完成 7 计时 config:load:env 0ms 完成 8 计时 config:load:file:/Users/vihagayohan/Desktop/ReactNative/Ikman/.npmrc 1ms 内完成 9 时序 config:load:project 1ms 内完成 10 计时 config:load:file:/Users/vihagayohan/.npmrc 在 0ms 内完成 11 计时 config:load:user 0ms 内完成 12 计时 config:load:file:/usr/local/etc/npmrc 0ms完成 13 计时 config:load:global 0ms 内完成 14 计时 config:load:cafile 0ms 完成 15 计时 config:load:validate 0ms 内完成 16 计时 config:load:setUserAgent 在 0ms 内完成 17 时序 config:load:setEnvs 1ms 内完成 18 时序配置:加载在 6ms 内完成 19 冗长的 npm 会话 b605b9422c99c9ad 20 计时 npm:load 在 15ms 内完成 21 计时命令:exec 71201ms 完成 22 详细堆栈错误:命令失败 ChildProcess 中的 22 详细堆栈。 (/usr/local/lib/node_modules/npm/node_modules/@npmcli/promise-spawn/index.js:64:27) ChildProcess.emit 上的 22 详细堆栈(节点:事件:379:20) 22 详细堆栈在可能关闭(节点:内部/子进程:1065:16) Process.ChildProcess._handle.onexit 处的 22 详细堆栈(节点:内部/子进程:296:5) 23 详细 pkid Ikman@0.0.1 24 详细 cwd /Users/vihagayohan/Desktop/ReactNative/Ikman 25 冗长的达尔文 20.1.0 26 详细 argv "/usr/local/bin/node" "/usr/local/lib/node_modules/npm/bin/npm-cli.js" "exec" "--" "react-native" "run-ios" 27 详细节点 v15.6.0 28 冗长的 npm v7.4.0 29 错误代码 1 30 错误路径 /Users/vihagayohan/Desktop/ReactNative/Ikman 31 错误命令失败 32 错误命令 sh -c react-native "run-ios" 33 详细退出 1 0 详细的 cli [ 0 详细的 cli '/usr/local/bin/node', 0 详细 cli '/usr/local/lib/node_modules/npm/bin/npm-cli.js', 0 详细的 cli 'exec', 0 冗长的 cli '--', 0 详细的 cli 'react-native', 0 详细的 cli 'run-ios' 0 详细 cli ] 1 条信息使用 npm@7.4.0 2 信息使用 node@v15.6.0 3 时序 config:load:defaults 1ms 内完成 4 时序 config:load:file:/usr/local/lib/node_modules/npm/npmrc 2ms 内完成 5 时序 config:load:builtin 2ms 内完成 6 计时 config:load:cli 1ms 内完成 7 计时 config:load:env 0ms 完成 8 计时 config:load:file:/Users/vihagayohan/Desktop/ReactNative/Ikman/.npmrc 1ms 内完成 9 时序 config:load:project 1ms 内完成 10 计时 config:load:file:/Users/vihagayohan/.npmrc 在 0ms 内完成 11 计时 config:load:user 0ms 内完成 12 计时 config:load:file:/usr/local/etc/npmrc 0ms完成 13 计时 config:load:global 0ms 内完成 14 计时 config:load:cafile 0ms 完成 15 计时 config:load:validate 0ms 内完成 16 计时 config:load:setUserAgent 在 0ms 内完成 17 时序 config:load:setEnvs 1ms 内完成 18 时序配置:加载在 6ms 内完成 19 冗长的 npm 会话 b605b9422c99c9ad 20 计时 npm:load 在 15ms 内完成 21 计时命令:exec 71201ms 完成 22 详细堆栈错误:命令失败 ChildProcess 中的 22 详细堆栈。 (/usr/local/lib/node_modules/npm/node_modules/@npmcli/promise-spawn/index.js:64:27) ChildProcess.emit 上的 22 个详细堆栈(节点:事件:379:20) 22 详细堆栈在可能关闭(节点:内部/子进程:1065:16) Process.ChildProcess._handle.onexit 处的 22 详细堆栈(节点:内部/子进程:296:5) 23 详细 pkid Ikman@0.0.1 24 详细 cwd /Users/vihagayohan/Desktop/ReactNative/Ikman 25 冗长的达尔文 20.1.0 26 详细 argv "/usr/local/bin/node" "/usr/local/lib/node_modules/npm/bin/npm-cli.js" "exec" "--" "react-native" "run-ios" 27 详细节点 v15.6.0 28 冗长的 npm v7.4.0 29 错误代码 1 30 错误路径 /Users/vihagayohan/Desktop/ReactNative/Ikman 31 错误命令失败 32 错误命令 sh -c react-native "run-ios" 33 详细退出 1

谢谢, 约翰enter image description here

4 个答案:

答案 0 :(得分:1)

几天前我问了这个问题,并努力寻求解决方案。所以现在我找到了一个解决方案,但不知道它是否是一个完美的解决方案,但到目前为止它工作正常。所以基本上我所做的是我评论(如图所示)来自 pod 文件和 pod 安装的鳍状肢依赖关系enter image description here

答案 1 :(得分:0)

尝试排除 Pod 和项目目标的 arm64 构建架构。

答案 2 :(得分:0)

我在带有 Chip M1 的 macbook Pro 上运行 react native iOS,出现构建错误。但是,在遵循这篇文章之后,我成功地在 macbook Pro M1 上运行了 react native iOS。技巧是使用 Rosetta 并将其应用到您的终端和 XCode。 完整指南如下:solve react native build failed on macbook Pro with chip M1

答案 3 :(得分:0)

我只是在构建设置 > 搜索路径 > 库搜索路径中添加这些。

$(SDKROOT)/usr/lib/swift

在您的 Podfile 中更改/添加/替换这一行。

use_flipper!({ 'Flipper-Folly' => '2.5.3', 'Flipper' => '0.87.0', 'Flipper-RSocket' => '1.3.1' })

在你的 Podfile 中定义这个函数 定义查找替换函数

 def find_and_replace(dir, findstr, replacestr)
   Dir[dir].each do |name|
       text = File.read(name)
       replace = text.gsub(findstr,replacestr)
       replaced = text.index(replacestr)
       if replaced == nil && text != replace
           puts "Fix: " + name
           File.open(name, "w") { |file| file.puts replace }
           STDOUT.flush
       end
   end
   Dir[dir + '*/'].each(&method(:find_and_replace))
 end

然后从 post-install 调用这个函数,所以我们需要在 post_install do |installer| 中添加以下 2 个函数调用

find_and_replace("Pods/RCT-Folly/folly/synchronization/DistributedMutex-inl.h",
                  "atomic_notify_one(state)", "folly::atomic_notify_one(state)") 
find_and_replace("Pods/RCT-Folly/folly/synchronization/DistributedMutex-inl.h",
 "atomic_wait_until(&state, previous | data, deadline)", "folly::atomic_wait_until(&state, previous | data, deadline)")

在 ios 文件夹中运行 pod repo update

并使用

更新您的项目 pod
pod install

完成!!