在适配 React Native 项目到鸿蒙时,使用了 react-native-splash-screen 来实现启动页效果。本地开发测试一切正常,但当代码交付给同事后,iOS 端却直接无法启动,报错如下:
RNSplashScreen.h not found
这起初让我摸不着头脑,因为三端(iOS、Android、HarmonyOS)在我的本地开发环境都能正常运行。于是,问题排查之旅开始了。
问题排查过程
-
检查依赖是否安装完整
起初怀疑是同事忘了运行pod install,于是让他重新执行。然而问题依然存在,iOS 构建失败。 -
发现 Pod 版本不一致
在对比同事与我的环境时,注意到同事的react-native-splash-screen安装的 Pod 版本与我本地的不一致。 深入分析发现,问题的原因是鸿蒙适配包@react-native-oh-tpl/react-native-splash-screen的目录下保留了一个podspec文件。pod install时,CocoaPods 误选了这个错误的 podspec,而非我们需要的官方版本。最终导致构建失败。 -
为何本地没有问题?
回忆后发现,我本地开发的操作顺序是先pod install,然后才安装react-native-oh-tpl相关依赖。这一顺序使得 Pod 没有去查找错误的 podspec,而直接使用了正确的react-native-splash-screen。
而同事那边是全新安装,直接安装了带有冲突的依赖,因此问题暴露。
解决方案
最终的解决方案是手动删除鸿蒙适配包中的错误 podspec 文件:
rm -rf node_modules/react-native-oh-tpl/react-native-splash-screen/react-native-splash-screen.podspec
删除这个错误的 podspec 文件后,重新执行 pod install,确保引入正确的 react-native-splash-screen,问题彻底解决。
经验总结
-
检查
Podfile.lock是排查 iOS 构建问题的重要环节
当面对类似header not found的问题时,Podfile.lock能帮助我们快速定位问题所在。 -
关注鸿蒙适配包的潜在影响
鸿蒙适配包在三端开发中非常重要,但某些包可能会意外影响已有依赖。建议定期检查它们是否引入了多余文件。 -
依赖安装顺序会影响结果
本地开发顺利并不代表其他环境也能正常运行,尤其是全新安装的场景,需要格外注意。