"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 问题并尝试了很多事情,但没有运气这是我到目前为止尝试过的。
我试过了:
- 正在删除 pod 锁定文件,删除 pod 文件夹,执行
pod deintegrate
,
做 pod update
- 在 keychainAccess 中锁定和解锁登录
- 清理 xcode
中的构建文件夹
- 重新启动我的笔记本电脑和 xcode
- 从新构建系统更改为旧构建系统
- 正在删除 DerivedData 文件夹并清理 Xcode
- 正在升级 cocopods 并重新安装 pod
好吧,之前用 Command+B
构建也没有用,但现在我去了 Targets->App name->build phases->bundle expo assets-> 并检查了“运行 脚本仅在安装时”选项和构建开始工作但归档仍然不起作用
除了上述错误,我还注意到 xcode
上的另一个错误
所以如果有人知道为什么会发生这种情况,请问好吗?
解决方案一:
以下是论坛上提出的实际问题:
https://forums.expo.io/t/ios-bundle-assets-error-when-building-release-403/36616
此 pull(修复)请求已合并到 master
-
将您的 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 错误。
如果您是 运行 来自 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": [
"**/*",
]
},
如果你不想排除所有内容,你也可以排除个别包被提升,但我发现在我排除所有内容之前我仍然不断收到一些错误变化。通过更多的试验和错误,您可能不必排除所有内容。
所以我有一个用 Expo 构建的应用程序,但随后被弹出以获取 ios 和 android 文件夹,在 android 和 ios 上一切正常我已经发布了它对于 android 但在 ios 上,当我尝试存档项目时它给了我一个错误 Command PhaseScriptExecution failed with nonzero exit code
我不知道是什么导致了这个错误我已经阅读了很多 Whosebug 问题并尝试了很多事情,但没有运气这是我到目前为止尝试过的。
我试过了:
- 正在删除 pod 锁定文件,删除 pod 文件夹,执行
pod deintegrate
, 做pod update
- 在 keychainAccess 中锁定和解锁登录
- 清理 xcode 中的构建文件夹
- 重新启动我的笔记本电脑和 xcode
- 从新构建系统更改为旧构建系统
- 正在删除 DerivedData 文件夹并清理 Xcode
- 正在升级 cocopods 并重新安装 pod
好吧,之前用 Command+B
构建也没有用,但现在我去了 Targets->App name->build phases->bundle expo assets-> 并检查了“运行 脚本仅在安装时”选项和构建开始工作但归档仍然不起作用
除了上述错误,我还注意到 xcode
上的另一个错误所以如果有人知道为什么会发生这种情况,请问好吗?
解决方案一:
以下是论坛上提出的实际问题: https://forums.expo.io/t/ios-bundle-assets-error-when-building-release-403/36616
此 pull(修复)请求已合并到 master
-
将您的 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 答案:
使用Xcode构建项目,向上滚动可以看到更多错误信息。就我而言,这是 JS 代码的问题,而不是本机问题。请参阅下面的图片。上面是 JS 错误,下面是 PhaseScriptExecution 错误。
如果您是 运行 来自 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": [
"**/*",
]
},
如果你不想排除所有内容,你也可以排除个别包被提升,但我发现在我排除所有内容之前我仍然不断收到一些错误变化。通过更多的试验和错误,您可能不必排除所有内容。