修复Fastlane build iOS US-ASCII 报错的记录

675 阅读1分钟

项目中使用了fastlane进行打包iOS时, 报了这样一个错误: invalid byte sequence in US-ASCII (ArgumentError)

[12:57:40]: ▸ Traceback (most recent call last):
[12:57:40]: ▸ 	9: from /usr/local/bin/xcpretty:23:in `<main>'
[12:57:40]: ▸ 	8: from /usr/local/bin/xcpretty:23:in `load'
[12:57:40]: ▸ 	7: from /Library/Ruby/Gems/2.6.0/gems/xcpretty-0.3.0/bin/xcpretty:83:in `<top (required)>'
[12:57:40]: ▸ 	6: from /Library/Ruby/Gems/2.6.0/gems/xcpretty-0.3.0/bin/xcpretty:83:in `each_line'
[12:57:40]: ▸ 	5: from /Library/Ruby/Gems/2.6.0/gems/xcpretty-0.3.0/bin/xcpretty:84:in `block in <top (required)>'
[12:57:40]: ▸ 	4: from /Library/Ruby/Gems/2.6.0/gems/xcpretty-0.3.0/lib/xcpretty/printer.rb:19:in `pretty_print'
[12:57:40]: ▸ 	3: from /Library/Ruby/Gems/2.6.0/gems/xcpretty-0.3.0/lib/xcpretty/formatters/formatter.rb:88:in `pretty_format'
[12:57:40]: ▸ 	2: from /Library/Ruby/Gems/2.6.0/gems/xcpretty-0.3.0/lib/xcpretty/parser.rb:307:in `parse'
[12:57:40]: ▸ 	1: from /Library/Ruby/Gems/2.6.0/gems/xcpretty-0.3.0/lib/xcpretty/parser.rb:434:in `update_test_state'
[12:57:40]: ▸ /Library/Ruby/Gems/2.6.0/gems/xcpretty-0.3.0/lib/xcpretty/parser.rb:434:in `===': invalid byte sequence in US-ASCII (ArgumentError)

我们进过了很多轮的测试, 最终确定在其中一个commit中才会出现这样的错误, 但是查看代码未发现有这样的字符, 我们团队也很纳闷, 最终定位是在commit上, 我们使用了一个 的全角字符导致, xcpretty报错.

我们项目中, 会将截取10 个commit信息, 通过 fastlane的firebase_app_distribution上传release note, 在这个过程中有中文字符的话, 编码会变成UTF-8, 而Ruby用 ASCII 编码来读源码, 如果未指定编码,在执行过程会出现报错. 如果想使用UTF-8, 需要在文件头上指加入 # -*- coding: UTF-8 -*-(EMAC写法) 或者 #coding=utf-8.

还有就是网上搜索中能找到的解决方案, 在环境中设置ruby环境变量.

export LANG=en_US.UTF-8
export LANGUAGE=en_US.UTF-8
export LC_ALL=en_US.UTF-8