【问题标题】:"Command PhaseScriptExecution failed with a nonzero exit code" when archiving归档时“命令 PhaseScriptExecution 失败,退出代码非零”
【发布时间】:2020-09-26 10:06:45
【问题描述】:

所以我有一个使用 Expo 构建的应用程序,但随后弹出以获取 ios 和 android 文件夹在 android 和 ios 上一切正常我已经为 android 发布了它,但在 ios 上当我尝试归档项目时它给了我一个错误987654325@ 我不知道是什么导致了这个错误我已经阅读了很多 StackOverflow 问题尝试了很多东西但是没有运气这是我迄今为止尝试的。

我试过了:

  • 移除 pod 锁定文件,移除 pod 文件夹,执行pod deintegrate, 做pod update
    • 在 keychainAccess 中锁定和解锁登录
    • 在 xcode 中清理构建文件夹
    • 重新启动我的笔记本电脑和 xcode
    • 从新构建系统更改为旧构建系统
    • 删除 DerivedData 文件夹并清理 Xcode
  • 升级 cocopods 并再次安装 pod

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

除了上述错误,我还注意到 xcode 上的另一个错误

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

【问题讨论】:

    标签: react-native expo xcode11


    【解决方案1】:

    一个可能的原因可能是 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
    

    【讨论】:

    • 这为我修好了!
    • 忙着将 RN 项目从 0.62.3 更新到 0.67.1,同时也在为节点版本管理器运行 nvm。这解决了我最后剩下的问题。项目现在构建!
    【解决方案2】:

    解决方案 1:

    这是由于Bare Expo Bundle Assets

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

    pull(修复)请求已合并到主控中

    -

    Solution:

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

    npm install -g expo-cli
    

    -

    注意:解决方案 1 是此问题的答案

    解决方案 2:

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

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

    解决方案 3:

    前往

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

    【讨论】:

    • 评论不用于扩展讨论;这个对话是moved to chat
    • 我已经在 expo-cli 版本 4.4.8,所以解决方案 1 对我不起作用
    【解决方案3】:

    对我来说这个问题是我将项目放在名称中带有空格的目录中。 FBReactNativeSpec 构建的中间脚本是引用路径而不转义空格,所以它失败了。

    【讨论】:

      【解决方案4】:

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

      $ nvm unalias default
      

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

      $ nvm alias default node
      

      再次构建应用程序。

      【讨论】:

      • 这对我有用(除了设置链接)谢谢。
      【解决方案5】:

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

      【讨论】:

        【解决方案6】:

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

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

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

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

        这个答案来自这个 SO 答案:React Native ios build : Can't find node 但是那里的其他答案和 cmets 也提到了。 这也类似于@ashwin-m 答案,但我发现我不明白那个。

        【讨论】:

          【解决方案7】:

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

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

          【讨论】:

            【解决方案8】:

            为可能偶然发现此帖子以寻找解决方案的其他人添加此内容。

            我尝试了几乎所有可能的解决方案来解决这个错误,但似乎没有一个有效。就我而言,最终我使用的是 monorepo。

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

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

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

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

            【讨论】:

              猜你喜欢
              • 2020-06-27
              • 2020-12-18
              • 2020-10-25
              • 2021-04-30
              • 2021-02-03
              • 2019-07-23
              • 1970-01-01
              • 2022-01-14
              • 2023-03-27
              相关资源
              最近更新 更多