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

时间:2017-06-05 12:02:57

标签: ios xcode build

关于Xcode本地化流程,我有一个非常好奇的错误。我会尝试尽可能多地分享细节。

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

The operation couldn't be completed. Argument list too long

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

事实

~ $ 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
  1. 我在macOS Sierra 10.12.5上使用Xcode 8.2。
  2. 只有在尝试从本地化导出时才会发生错误。当我通过xcodebuild -exportLocalizations运行本地化流程时也是如此。
  3. 我可以很好地构建和运行应用程序。 (我相信)我的标题搜索路径没有问题。
  4. 尝试

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

    因此,我目前得到的假设是:

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

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

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

1 个答案:

答案 0 :(得分:4)

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

  

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

     

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

     

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

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

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