【问题标题】:error: unable to spawn process (Argument list too long) in Xcode Build错误:无法在 Xcode 构建中生成进程(参数列表太长)
【发布时间】:2023-03-10 01:03:01
【问题描述】:

我收到此错误:

“错误:无法生成进程(参数列表太长)

** 存档失败 **

以下构建命令失败: CompileSwiftSources 正常 arm64 com.apple.xcode.tools.swift.compiler (1 次失败)

退出代码 =65 "

我浏览了这个链接: Xcode export localization throws error "Argument list too long"

这篇文章提供了一个很好的临时解决方案,说明减少路径层次结构。但这似乎不是一个合适的方法。谁能为我提供解决此问题的不同方法?

【问题讨论】:

  • 这基本上是由于路径名很长,因为编译器无法构建。解决方案是选择名称较短的 ar 路径。尝试重命名您的项目。

标签: swift xcode compile-time


【解决方案1】:

在我的例子中,它是关于 .xcconfig 文件中的自定义配置。 我的配置文件包括 Pod 配置,例如:

// Development.xcconfig

#include "Pods/Target Support Files/Pods-MyProject/Pods-MyProject.debug (development).xcconfig"
#include "Pods/Target Support Files/Pods-MyProjectTests/Pods-MyProjectTests.debug (development).xcconfig"

#include "Pods/Target Support Files/Pods-MyProject/Pods-MyProject.release (development).xcconfig"
#include "Pods/Target Support Files/Pods-MyProjectTests/Pods-MyProjectTests.release (development).xcconfig"
// Production.xcconfig

#include "Pods/Target Support Files/Pods-MyProject/Pods-MyProject.debug (production).xcconfig"
#include "Pods/Target Support Files/Pods-MyProjectTests/Pods-MyProjectTests.debug (production).xcconfig"

#include "Pods/Target Support Files/Pods-MyProject/Pods-MyProject.release (production).xcconfig"
#include "Pods/Target Support Files/Pods-MyProjectTests/Pods-MyProjectTests.release (production).xcconfig"

当我将 Firebase pod 添加到我的 Podfile 中时,这产生了您提到的错误。

所以要再次编译,我必须:

  1. 删除所有包含(#include ...)
  2. Project -> Info -> Configuration中明确设置,如下:

快速提示:

如果您不想手动设置相应的目标配置(带有红色图标的配置),请将它们标记为 None 并运行 pod install。这将自动为您更改。

【讨论】:

  • 这为我解决了问题。我在 Cocoapods 中使用自定义 xcconfig 文件并遇到了这个问题。
  • 非常感谢!这对我有用,我一直在努力找出问题所在,同时我正在使用旧版构建系统......如果您使用带有 cocoapods 的自定义 xcconfig 文件,这绝对是答案
  • 好吧,在阅读这篇文章多遍之后,这工作!谢谢!!
【解决方案2】:

几天前,我遇到了类似的挑战。我想提供详细信息并与 SO 社区分享我的研究。

首先我找到了这个帖子,然后我点击了问题中的链接。
是的,没错,链接中标记的答案是正确的,但是这个问题的解决方案不适合我。

问题

就我而言,当我将项目中的文件夹层次结构更改为更方便且更适合我时,我遇到了这个问题。
@oOEric 选项不适合我,因为根据规则,Xcode 中的组层次结构应该与系统中的文件夹层次结构一致。
但我已经编译了大约 1680 个 swift 文件。

问题是我的编译文件路径太长,而且数量太大。

研究

然后我开始研究,发现 swift jira 有同样的错误。 这里有一些链接:

  1. Main
  2. Linked Issue 1
  3. Linked Issue 2
  4. Linked Issue 3
  5. Bug on Open Radar

但在这里我没有找到适合我的解决方案。

最让我满意的是 swift 开发人员的反应。

同样,这是 Xcode 方面的问题,而不是 Swift 方面的问题。在这里评论不会让 Xcode 工程师工作得更快! (在 Apple,我们并非都是同一个人。)

好吧,经过这个回答,我终于确信如果是Xcode的bug,那么应该在Xcode中寻找解决方案。

解决方案

  1. 临时解决方案

您需要将项目在系统层次结构中移到更高的位置。

我选择这个,因为我的项目非常大,使用其他解决方案需要我一天以上的时间。

在我的例子中,我做了一个实验,计算出项目路径的长度应该不超过50个字符。

但这是一个临时解决方案。如果您的项目进一步发展,您将不得不缩短路径或使用其他解决方案。

  1. Cocoa Touch 框架目标

此方案适用于不使用依赖项的文件。

首先,您需要将 Cocoa Touch Framework 作为目标添加到您的主项目中。

此目标应自动添加到嵌入式二进制文件链接框架和库。

在此之后,您需要找到一些没有依赖关系的文件并将目标成员更改为您的“TestTarget”。

不要忘记来自 cocoa touch 框架的类、属性、方法、枚举、协议应该具有开放或公共访问权限。

别忘了清理你的 DerivedData 文件夹。

  1. 模块化 iOS

此解决方案采用更集成的方法。

如果您想在 Cocoa Touch 框架中使用任何依赖项,您应该阅读本指南并为您的大项目进行更复杂的重构!

Link to solution

我认为这是最好的解决方案。

我希望这个重要的答案会对某人有所帮助!

【讨论】:

    【解决方案3】:

    我通过将构建系统设置为Legacy build system 解决了这个问题 在文件-> 工作区设置-> 选择工作区设置

    【讨论】:

    • 如果您的 iOS 应用使用 Flutter 构建并使用 Firestore 框架,此解决方案特别有用。
    【解决方案4】:

    我通过减少 Xcode 中组的层次结构解决了这个问题。

    例如project_name/project_name/About/Model/Text 的原始文件 我删除了“模型”、“文本”组并移动了 project_name/project_name/About/ 下的文件

    【讨论】:

      【解决方案5】:

      我制作了简单的脚本来临时解决这个问题。 https://github.com/gregoryvit/flatter

      它只是将 Xcode 项目中的所有 swift 文件移动到根组。

      【讨论】:

        【解决方案6】:

        错误 - 无法生成进程(参数列表太长)

        这个错误有很多原因。下面提到了其中一些:

        • 您的项目可能有许多 swift 文件(比如说超过 2000 个)
        • 大多数 Swift 源文件可能深深嵌套在目录中

        • 其中许多文件的绝对路径超过 150 个字符(例如 /Macintosh HD/Users/jayprakashnd/mySampleProject/Module1…)

        Xcode swift 编译器在编译时获取所有源文件的绝对路径,达到 ARG_MX 限制并且构建失败。

        这已在 Xcode 11 中得到修复,其中一个标志用于设置无限数量的 swift 文件。

        解决方案:

        1. 切换到 Xcode 11 并在 build settings - User Defined Section 中将 USE_SWIFT_RESPONSE_FILE 添加到 YES

        2. 如果您无法切换到 Xcode 11,则在 Macintosh HD ▸ 用户目录中重新签出您的项目,文件夹名称为最小可能。

        解决方案 2 对我很有帮助!

        【讨论】:

          【解决方案7】:

          当我使用 Live Preview 使用 Xcode 11 测试版时,我遇到了这种情况。然后我通过在该错误消失后重新启动 Xcode 来解决它。

          【讨论】:

            【解决方案8】:

            我已经解决了这个问题,将我的 Xcode 项目文件夹移动到 mac 根目录,并将我的文件夹名称更改为更少的字符。

            1. 终端:cd /

            2. 将文件夹名称更改为 BX(示例)。

            【讨论】:

              【解决方案9】:

              xcode11

              -构建设置

              -用户定义

              -添加设置:USE_SWIFT_RESPONSE_FILE

              -setValue: 是

              这样做可以让 xcode 拥有比允许更多的文件。但我不确定这是否总能解决问题。

              【讨论】:

                【解决方案10】:

                我已将构建类型更改为 legacy,它也为我解决了本地和 CI builder 的问题。对我来说,这是在检查 Podfile.lock 和 Manifest.lock 期间引起的。可能这可以在我们的管道中跳过,因为我们总是在 CI 上安装 pod。

                【讨论】:

                  【解决方案11】:

                  如果您在以发布模式(或存档)构建时在 Flutter 项目中遇到此问题,请查看我的答案:https://stackoverflow.com/a/61446892/5502121 长话短说:

                  • 在文件 > 项目设置中将您的构建系统设置为 新构建系统...
                  • 删除iosbuild_ios 文件夹
                  • 运行flutter create . 以初始化新的ios 模块
                  • 运行pod install
                  • 运行flutter pub get
                  • 检查您的 Xcode 构建配置(应该是 Release 模式和 General iOS Device

                  你很高兴

                  【讨论】:

                    【解决方案12】:

                    我也有同样的问题。我使用临时解决方案修复它,但这对我有用。

                    我的解决方案是将Derived Data folder 更改为路径较短的目录。

                    步骤如下:

                    Xcode -> 文件 -> 工作区设置... -> 为Derived Data 选择Custom Location 并给出一个较短的路径作为位置。

                    【讨论】:

                      猜你喜欢
                      • 2020-04-21
                      • 2015-10-30
                      • 1970-01-01
                      • 1970-01-01
                      • 1970-01-01
                      • 2017-11-06
                      • 2019-11-15
                      • 1970-01-01
                      • 2014-08-24
                      相关资源
                      最近更新 更多