我在基于 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
答案 0 :(得分:1)
几天前我问了这个问题,并努力寻求解决方案。所以现在我找到了一个解决方案,但不知道它是否是一个完美的解决方案,但到目前为止它工作正常。所以基本上我所做的是我评论(如图所示)来自 pod 文件和 pod 安装的鳍状肢依赖关系
答案 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
并使用
更新您的项目 podpod install
完成!!