RocketChat RN白标iOS构建报Bugsnag source map上传超时错误
RocketChat RN iOS白标构建Bugsnag上传超时问题解决方案
问题描述
对RocketChat开源React Native仓库做iOS端白标定制,参照官方iOS端白标指南构建项目时失败,核心报错为Command PhaseScriptExecution failed with a nonzero exit code,具体错误为Bugsnag source map上传连接超时。
完整构建日志如下:
> PhaseScriptExecution Upload\ source\ maps\ to\ Bugsnag > /Users/macbook/Library/Developer/Xcode/DerivedData/RocketChatRN-adkttzebukwzincfwduuaihsdgwi/Build/Intermediates.noindex/RocketChatRN.build/Debug-iphoneos/RocketChatRN.build/Script-88055964DAAE45B1A4886C27.sh > (in target 'RocketChatRN' from project 'RocketChatRN') > cd /Users/macbook/Rocket.Chat.ReactNative-develop/ios > /bin/sh -c /Users/macbook/Library/Developer/Xcode/DerivedData/RocketChatRN-adkttzebukwzincfwduuaihsdgwi/Build/Intermediates.noindex/RocketChatRN.build/Debug-iphoneos/RocketChatRN.build/Script-88055964DAAE45B1A4886C27.sh > > ℹ Preparing upload of React Native source map (dev / ios) › Reading > source map > "/var/folders/sz/jj5jd6j54kd505vxsyxvlk1h0000gn/T//bcd7e9d7452d009ff844f5acf22fb2f3-main.jsbundle.map" > › Reading bundle file > "/Users/macbook/Library/Developer/Xcode/DerivedData/RocketChatRN-adkttzebukwzincfwduuaihsdgwi/Build/Products/Debug-iphoneos/main.jsbundle" > ℹ Applying transformations to source map › Ensuring sourcesContent > field is populated › Stripping project root from sources › Initiating > upload to "https://upload.bugsnag.com/react-native-source-map" ERROR The request timed out. Connection timed out at ClientRequest.<anonymous> (/Users/macbook/Rocket.Chat.ReactNative-develop/node_modules/@bugsnag/source-maps/dist/Request.js:190:21) at Object.onceWrapper (node:events:641:28) at ClientRequest.emit (node:events:527:28) at TLSSocket.emitRequestTimeout (node:_http_client:771:9) at Object.onceWrapper (node:events:641:28) at TLSSocket.emit (node:events:539:35) at TLSSocket.Socket._onTimeout (node:net:516:8) at listOnTimeout (node:internal/timers:559:17) at processTimers (node:internal/timers:502:7)
已尝试在Xcode中禁用Bugsnag source map上传脚本,操作截图:
但重新构建仍然出现相同报错,无React Native开发经验,仅做白标定制操作,需要可落地的解决路径。
解决步骤
按优先级依次操作即可:
- 清理构建缓存后重新校验禁用状态
手动禁用脚本后必须先清缓存,否则Xcode会沿用旧的构建配置:按住Option键点击Xcode顶部菜单栏Product->Clean Build Folder,再删除~/Library/Developer/Xcode/DerivedData/下所有RocketChatRN开头的文件夹,重启Xcode后重新构建。 - 配置环境变量全局关闭Debug阶段source map上传
打开Xcode中RocketChatRN target的Build Settingstab,点击+号新增自定义配置,添加键为BUGSNAG_UPLOAD_SOURCEMAPS,值为NO的配置项,该配置会直接让Bugsnag的上传脚本跳过执行,不需要手动修改脚本内容。 - 排查Pod注入的重复上传脚本
RocketChat的依赖会通过CocoaPods自动注入Bugsnag上传逻辑,仅手动禁用主target下的脚本不会覆盖Pod注入的逻辑。打开ios/Podfile文件,找到post_install钩子部分,添加如下代码移除Pod注入的上传脚本:
修改完成后在ios目录下执行post_install do |installer| # 原有代码保留,新增以下内容 installer.pods_project.targets.each do |target| if target.name == 'BugsnagReactNative' target.build_phases.each do |phase| if phase.respond_to?(:name) && phase.name.include?('Upload source maps') target.build_phases.remove(phase) end end end end endpod install,重新打开xcworkspace文件构建即可。 - 本地调试阶段完全不需要Bugsnag相关能力的话,可以直接在项目的
.env配置文件中添加BugsnagKey=(值留空),会直接关闭所有Bugsnag相关的初始化、上报、上传逻辑,不影响应用核心功能使用。
白标定制本地调试阶段不需要上传source map到Bugsnag,关闭该逻辑不会对应用功能、后续正式包发布产生任何影响,正式发布前如果需要使用Bugsnag的崩溃上报能力,再配置对应可用的网络环境和自有Bugsnag Key即可。
内容的提问来源于stack exchange,提问作者Zohaib Ahmad
相关产品推荐
相关产品推荐

