"Command PhaseScriptExecution failed with a nonzero exit code" 归档时

"Command PhaseScriptExecution failed with a nonzero exit code" when archiving

所以我有一个用 Expo 构建的应用程序,但随后被弹出以获取 ios 和 android 文件夹,在 android 和 ios 上一切正常我已经发布了它对于 android 但在 ios 上,当我尝试存档项目时它给了我一个错误 Command PhaseScriptExecution failed with nonzero exit code 我不知道是什么导致了这个错误我已经阅读了很多 Whosebug 问题并尝试了很多事情,但没有运气这是我到目前为止尝试过的。

我试过了:

好吧,之前用 Command+B 构建也没有用,但现在我去了 Targets->App name->build phases->bundle expo assets-> 并检查了“运行 脚本仅在安装时”选项和构建开始工作但归档仍然不起作用

除了上述错误,我还注意到 xcode

上的另一个错误

所以如果有人知道为什么会发生这种情况,请问好吗?

解决方案一:

这是由于Bare Expo Bundle Assets

以下是论坛上提出的实际问题: https://forums.expo.io/t/ios-bundle-assets-error-when-building-release-403/36616

pull(修复)请求已合并到 master

-

Solution:

将您的 expo-cli 更新为 expo-cli@3.19.2 或更高版本

npm install -g expo-cli

-

注:解法1就是本题的答案

方案二:

在终端上打开项目目录并运行此命令并再次存档

react-native bundle --platform ios --dev false --entry-file index.js --bundle-output ./ios/main.jsbundle

方案三:

转到

Keychain Access -> Right-click on login -> Lock & unlock again -> Clean Xcode project ->Make build again

一个可能的原因可能是 Xcode 使用的是过时版本的 Node(在我的例子中,这是因为我使用 nvm 来管理我的 Node 版本,但 Xcode 使用的是旧版本我很久以前通过 HomeBrew 安装的 Node。

默认情况下,Xcode 将使用位于 /usr/local/bin/node 的 Node 二进制文件。通过 运行:

检查其版本
/usr/local/bin/node -v
node -v

如果第一个命令输出的是旧版本的 Node,只需删除它并用指向较新版本的符号链接替换它:

rm -rf /usr/local/bin/node
ln -s $(which node) /usr/local/bin/node

对我来说,这个问题是我将项目放在名称中包含空格的目录中。 FBReactNativeSpec 构建的中间脚本引用路径时没有转义空格,因此失败。

当我尝试启动一个新的 RN 项目时,我遇到了与 John 所说的相同的问题。但事实证明我不得不在没有空格的路径中重新创建项目。

我的实际错误来自 PhaseScriptExecution 部分的正上方,这是由于 Error: cannot find the node binary. Try setting the NODE_BINARY variable in the...

当 Xcode 在 /usr/local/bin/node 寻找节点时,它实际上并不存在,因为 nvm 使用更具体的动态路径。

解决方法很简单。根据您的节点路径设置系统 link。然后再次尝试构建。 运行 终端中的这个:

ln -s $(which node) /usr/local/bin/node

这个答案来自这个 SO 答案: 但是在其他答案和评论中也提到了。 这也和@ashwin-m的回答类似,但是我发现我没看懂那个。

使用Xcode构建项目,向上滚动可以看到更多错误信息。就我而言,这是 JS 代码的问题,而不是本机问题。请参阅下面的图片。上面是 JS 错误,下面是 PhaseScriptExecution 错误。

Error: Command PhaseScriptExecution failed with a nonzero exit code

如果您是 运行 来自 Xcode 而不是 react-native 命令行,您必须在重试之前清理 Xcode 中的构建文件夹。

如果您使用的是 nvm,取消设置默认别名可以解决此问题。

$ nvm unalias default

或者如果它要求设置 nvm 默认值:

$ nvm alias default node

再次构建应用程序。

为可能在寻找解决方案时偶然发现此 post 的其他人添加此内容。

我为这个错误尝试了几乎所有可能的解决方案,none 似乎有效。就我而言,结果是我使用的是 monorepo。

如果您也在 monorepo 内部使用 RN,一个可能的解决方案可能是确保您的 RN 模块没有被挂起。 RN 似乎严重依赖与项目同级的 node_modules;这与 monorepo 提升冲突。

如果您使用的是 Yarn,则可以将以下内容添加到您的 package.json(使用 RN 的子存储库)

"workspaces": {
  "nohoist": [
    "**/*",
  ]
},

如果你不想排除所有内容,你也可以排除个别包被提​​升,但我发现在我排除所有内容之前我仍然不断收到一些错误变化。通过更多的试验和错误,您可能不必排除所有内容。