Xcode 导出本地化引发错误“参数列表太长”

dvd*_*chr 3 xcode build ios

关于 Xcode 本地化过程,我有一个非常奇怪的错误要分享。我会尽量在法律上尽可能多地分享细节。

我正在尝试从 Xcode 导出 XLIFF 文件以通过“编辑器 > 本地化导出”发送给我们的翻译人员。但是,这会立即引发错误消息:

The operation couldn't be completed. Argument list too long
Run Code Online (Sandbox Code Playgroud)

这确实令人困惑,因为我在任何地方都找不到更详细的日志(我已经尝试检查我的 Console.app)。所以,我花了很多时间在谷歌上搜索——无济于事。我找不到这样的类似案例。错误本身仅在我尝试导出以进行本地化时发生。我可以很好地构建和运行应用程序。

事实

~ $ xcodebuild -version
Xcode 8.2
Build version 8C38
~ $ xcode-select -version
xcode-select version 2347.
~ $ echo $PATH
/Users/david.christiandy/.rbenv/shims:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/Users/david.christiandy/arctools/arcanist/bin:/usr/local/go/bin:/Library/Frameworks/Mono.framework/Versions/Current/Commands
Run Code Online (Sandbox Code Playgroud)
  1. 我在 macOS Sierra 10.12.5 上使用 Xcode 8.2。
  2. 只有当我尝试从本地化导出时才会发生错误。当我通过xcodebuild -exportLocalizations.
  3. 我可以很好地构建和运行应用程序。(我相信)我的标题搜索路径没有问题。

尝试

  • 认为代码有问题,所以我尝试xcodebuild在 CI 中运行导出过程(通过命令)。不知何故,它正在起作用。作为记录,我使用 Bitrise CI 与我的系统(Xcode 8.2.x,macOS 10.12)具有相同的堆栈
  • 要求同事在他们的机器上运行导出过程,他们也有同样的错误。
  • 这让我觉得配置肯定有问题。所以我做了一个独立的项目来确认导出过程一直失败。事实证明,它工作得很好!

所以,我目前得到的假设是:

  • 代码中可能有问题,并且
  • 可能有工具/软件(我们的大多数 iOS 工程师安装的)可能导致错误(因为 CI 完成得很好)。

我不知道为什么 CI 可以很好地运行导出过程,也不知道它什么时候会突然停止运行(就像我们的本地机器一样)。

感谢您对此事的任何帮助。谢谢!

dvd*_*chr 5

我也在苹果开发者论坛上问过这个问题,这里是链接:https : //forums.developer.apple.com/thread/86762

“参数列表太长”听起来像E2BIG,当您尝试运行具有巨大参数列表的子进程时会得到它(我相信当前的限制是 256 KiB)。我怀疑Export for Localizations正在运行某种命令行工具来完成这项工作(可能是该extractLocStrings工具,您会发现它潜伏在 Xcode 的应用程序包中)并将其完整路径传递给您项目中的每个文件。根据您拥有的文件数量以及这些路径的长度,很容易遇到这样的问题。

像这样的错误的“有趣”之一是它们取决于您放置项目的位置。如果项目位于主目录的顶部,事情可能会奏效,但如果它嵌套在子目录的深处,则事情可能会失败。这也提出了一种潜在的解决方法,即将您的项目在目录层次结构中进一步上移。

最后,你绝对应该提交一个关于这个的错误。我相信我们之前已经看到过 ( r. 30703294) 但您的报告将有助于强调这会给该领域的开发人员带来问题。请发布您的错误号,仅供记录。

几天前,在我阅读此答案之前,我设法通过 Xcode 删除了一些文件夹来使导出工作(仅删除引用)。最初我怀疑我删除的文件夹中存在无效格式,但是当我尝试删除其他文件夹时,导出过程运行正常。

我也尝试过使用 Xcode 9 导出字符串,我没有遇到这个问题。所以希望这个错误只适用于 Xcode 8.3.3 及以下版本。