使用upload-symbols.py向Flurry上传符号文件失败求助
解决Flurry upload-symbols.py上传dSYM失败的问题
针对你遇到的两个阶段的报错,我来一步步拆解问题并给出修复方案:
一、旧版本SDK(7.6.6)的「Broken pipe」错误
这个问题核心原因是Python 2.7的urllib2默认使用了过时的TLS协议(如TLS 1.0/1.1),而Flurry在2020年左右已经停止对这些旧协议的支持,服务器会主动断开连接,最终触发「Broken pipe」错误。
二、升级SDK到10.2.0后的「SSL read timeout」错误
虽然你升级了SDK,但upload-symbols.py脚本依然在调用系统自带的Python 2.7(从报错路径/System/Library/Frameworks/Python.framework/Versions/2.7可确认)。Python 2.7的SSL库对现代TLS协议支持不足,再加上大体积dSYM文件上传时默认超时时间过短,就会出现这个读取超时问题。
具体修复步骤:
强制脚本使用Python 3执行(最推荐的核心方案)
Python 2.7已停止维护,其SSL库完全跟不上现代服务的安全要求。你可以:- 修改
upload-symbols.py的第一行shebang:把#!/usr/bin/env python改成#!/usr/bin/env python3 - 或者在执行脚本时明确指定Python 3:
python3 ./Scripts/upload-symbols.py --log DEBUG
- 修改
调整脚本的超时参数
如果你的dSYM文件体积较大,默认超时时间可能不够,可修改脚本的请求超时设置:
找到exec_request函数里的urllib2.urlopen调用(切换到Python3后对应urllib.request.urlopen),添加timeout参数:
# Python 2版本修改 return urllib2.urlopen(request, timeout=300, **kwargs) # Python 3版本修改 return urllib.request.urlopen(request, timeout=300, **kwargs)
这里的300代表5分钟,你可以根据实际文件大小调整时长。
- 临时兼容Python 2.7(仅应急,不推荐长期使用)
如果暂时无法切换到Python3,可在脚本里强制启用TLS 1.2:
在exec_request函数开头添加以下代码:
import ssl context = ssl.SSLContext(ssl.PROTOCOL_TLSv1_2)
然后把urlopen调用改成:
response = urllib2.urlopen(request, context=context, **kwargs)
排查网络环境
- 测试本地网络能否正常访问Flurry API:执行
curl https://api.flurry.com,确认能收到正常响应 - 检查是否有代理、VPN或企业防火墙阻止了443端口的HTTPS连接,必要时临时关闭测试
- 测试本地网络能否正常访问Flurry API:执行
验证dSYM文件与权限
- 手动打包dSYM文件,尝试通过Flurry后台的手动上传功能上传,确认文件本身没有损坏
- 在Flurry后台检查你的API密钥是否绑定了正确的项目,且拥有上传符号文件的权限
内容的提问来源于stack exchange,提问作者Jay Lee
相关产品推荐
相关产品推荐

