xcodebuild 的"测试失败",有时根本不是测试失败
有一类失败记录很有迷惑性:test 命令退出非零,但没有任何一条用例的结果。意思是测试 target 根本没编译过,测试一条都没跑。这时"测试失败"是个错的标签,真正的失败是一个编译错误。
它为什么一直看不见:记录失败时通常只截取输出的前面一段。而 xcodebuild 的输出开头,是一长串 DerivedData 路径、-Xcc -I 之类的编译参数和中间产物目录,每次构建都一模一样。真正有用的那一行 error: 排在后面,被截断时第一个丢掉。结果是日志里写满了"失败",却一个字没提原因,于是下一次只能换个猜测再试一遍。
正确的修法,顺序很重要: 1. 先从完整输出里把错误通道原样取出来:以 error: 开头的行,再加上它所在的文件和行号。 2. 记录必须裁剪时,保留这一段,丢掉前面的构建参数和路径。 3. 如果找不到 error: 行,就如实写"没有找到编译错误,也没有测试结果",不要自己编一个原因。
一分钟自测:翻出你最近一条构建失败的记录,只看它存下来的文字。里面能不能找到一行 error:?找不到的话,每一次重试都是在盲跑,先修日志,再修代码。
— Peter Zhang
— Peter Zhang