关于 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)
xcodebuild -exportLocalizations.xcodebuild在 CI 中运行导出过程(通过命令)。不知何故,它正在起作用。作为记录,我使用 Bitrise CI 与我的系统(Xcode 8.2.x,macOS 10.12)具有相同的堆栈我不知道为什么 CI 可以很好地运行导出过程,也不知道它什么时候会突然停止运行(就像我们的本地机器一样)。
感谢您对此事的任何帮助。谢谢!
我也在苹果开发者论坛上问过这个问题,这里是链接:https : //forums.developer.apple.com/thread/86762
“参数列表太长”听起来像
E2BIG,当您尝试运行具有巨大参数列表的子进程时会得到它(我相信当前的限制是 256 KiB)。我怀疑Export for Localizations正在运行某种命令行工具来完成这项工作(可能是该extractLocStrings工具,您会发现它潜伏在 Xcode 的应用程序包中)并将其完整路径传递给您项目中的每个文件。根据您拥有的文件数量以及这些路径的长度,很容易遇到这样的问题。像这样的错误的“有趣”之一是它们取决于您放置项目的位置。如果项目位于主目录的顶部,事情可能会奏效,但如果它嵌套在子目录的深处,则事情可能会失败。这也提出了一种潜在的解决方法,即将您的项目在目录层次结构中进一步上移。
最后,你绝对应该提交一个关于这个的错误。我相信我们之前已经看到过 (
r. 30703294) 但您的报告将有助于强调这会给该领域的开发人员带来问题。请发布您的错误号,仅供记录。
几天前,在我阅读此答案之前,我设法通过 Xcode 删除了一些文件夹来使导出工作(仅删除引用)。最初我怀疑我删除的文件夹中存在无效格式,但是当我尝试删除其他文件夹时,导出过程运行正常。
我也尝试过使用 Xcode 9 导出字符串,我没有遇到这个问题。所以希望这个错误只适用于 Xcode 8.3.3 及以下版本。