iOS生产构建中weightOfFont(UIFont*)崩溃的排查与解决
TestFlight生产构建崩溃问题解决记录
问题现象
首次将开发的App提交至Apple TestFlight进行Beta测试时,出现生产构建频繁崩溃的情况:模拟器和Expo Go环境下测试完全正常,但TestFlight分发的生产包运行后频繁崩溃。
崩溃线索
查看Apple提供的崩溃报告,所有崩溃的线程调用栈均指向:
weightOfFont(UIFont*) + 212 (RCTFont.mm:60)
多份报告的崩溃触发点一致。
尝试过的无效解决方案
先后尝试以下操作,均未解决崩溃问题:
- 将Fonts文件夹重命名为font;
- 在app.json中添加资源打包配置:
"assetBundlePatterns": [ "assets/*" ]; - 运行
npx expo-doctor@latest,检测结果无报错或警告; - 执行
npx react-native-asset命令手动链接字体资源; - 创建
react-native.config.js并配置字体资源路径:
module.exports = { assets: ['./assets/font'], };
- 修改字体运行时加载代码,添加异常捕获逻辑:
try { Font.loadAsync({ 'RobotoSlab-Medium': require('./assets/font/RobotoSlab-Medium.ttf'), 'RobotoSlab-Bold': require('./assets/font/RobotoSlab-Bold.ttf') }).then(() => { setFontLoaded(true) setAppIsReady(true); }) } catch (e) { console.warn('Fonts are not loaded properly'); console.log(e) }
最终解决方法
查阅Expo-Fonts文档后发现,问题根源是同时启用了字体嵌入配置和运行时加载两种字体引入方式,两者冲突导致生产构建时字体资源处理异常。移除嵌入字体的相关配置后,重新构建并上传TestFlight,生产版本不再崩溃。
内容的提问来源于stack exchange,提问作者RogueGingerz
相关产品推荐
相关产品推荐

