错误:无法在Xcode Build中产生进程(参数列表过长)

时间:2018-11-09 12:53:58

标签: swift xcode

我收到此错误:

  

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

     

**归档失败**

     

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

     

退出代码= 65“

我通过以下链接: Xcode export localization throws error "Argument list too long"

本文为指出减少路径层次结构的问题提供了一个很好的临时解决方案。但这似乎不是适当的方法。谁能为我提供不同的解决方案?

12 个答案:

答案 0 :(得分:10)

就我而言,这与.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. 删除所有包含的内容
  2. 使它们在 Project-> Info-> Configuration 中明确设置,如下所示:

Solution

快速提示:

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

答案 1 :(得分:5)

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

首先,我找到了该线程,并按照提出的问题中的链接进行操作。
是的,没错,链接中标记的答案是正确的,但是该问题的解决方案不适合我。

问题

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

问题是我到编译文件的路径太长,并且它们的数量太大。

研究

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

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

但是在这里我找不到适合我的解决方案。

最让我满意的是敏捷开发人员的这种反应。

  

同样,这是Xcode方面的问题,而不是Swift方面的问题。在这里发表评论不会使Xcode工程师的工作更快!   (我们在苹果公司的人不尽相同。)

Okey,在回答之后,我终于确信,如果这是Xcode的错误,那么应该在Xcode中寻求解决方案。

解决方案

  1. 临时解决方案

您需要在系统层次结构中将项目上移。

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

以我为例,我进行了一个实验,计算得出项目路径的长度应不超过50个字符。

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

  1. 可可接触框架目标

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

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

enter image description here

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

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

enter image description here

不要忘记,可可触摸框架中的类,属性,方法,枚举,协议应具有开放或公共访问权限。

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

  1. 模块化iOS

此解决方案具有更集成的方法。

如果要在Cocoa Touch框架中使用任何依赖项,则应转到本指南,并对大型项目进行更复杂的重构!

Link to solution

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

我希望这个大答案能对某人有所帮助!

答案 2 :(得分:2)

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

答案 3 :(得分:1)

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

例如原始文件位于project_name / project_name / About / Model / Text 我删除了“模型”,“文本”组,并将文件移到project_name / project_name / About /

答案 4 :(得分:1)

我制作了用于临时修复该问题的简单脚本。 https://github.com/gregoryvit/flatter

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

答案 5 :(得分:1)

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

此错误的原因很多。下面提到其中一些:

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

Screenshot for deeply nested folder structure

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

Screenshot for absolute path

Xcode快速编译器采用所有源文件的绝对路径,因此进行编译时,达到了ARG_MX限制,并且构建失败。

此问题已在 Xcode 11 中修复,其中标志用于设置无限数量的快速文件。

解决方案:

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

  2. 如果无法切换到Xcode 11,则在Macintosh HD中对项目进行新签出⁩▸⁨Users⁩目录,其中 文件夹名称最小 可能。

解决方案2对我来说就像是魅​​力!

答案 6 :(得分:0)

当我通过Live Preview使用Xcode 11 beta版时,这发生在我身上。然后我通过在错误消失后重新启动Xcode来解决它。

答案 7 :(得分:0)

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

  1. 端子:cd /

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

答案 8 :(得分:0)

xcode11

-构建设置

-用户定义

-添加设置:USE_SWIFT_RESPONSE_FILE

-setValue:是

这样做可以使xcode拥有的文件数量超过允许的数量。但是我不确定这是否总能解决问题。

答案 9 :(得分:0)

我已将构建类型更改为旧版,这也为我解决了本地和CI构建器上的问题。对我来说,这是在检查Podfile.lock和Manifest.lock时引起的。由于我们始终在CI上安装Pod,因此可能会在我们的管道中跳过此步骤。

答案 10 :(得分:0)

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

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

你很好走

答案 11 :(得分:-1)

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

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

步骤如下:

Xcode -> File -> Workspace Settings... -> 为 Custom Location 选择 Derived Data 并给出一个较短的路径作为位置。