You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

拆分Main_iPhone Storyboard后App发布出现找不到该Storyboard的崩溃问题

解决Storyboard拆分后发布崩溃:找不到Main_iPhone的问题

哦,这个坑我之前踩过!明明本地测试一切正常,一发布就爆这个找不到旧Storyboard的错误,本质是项目里还有残留的引用没清理干净,或者打包/发布流程里的缓存搞鬼。下面给你一步步排查解决:

核心排查与解决步骤

1. 检查Info.plist的主Storyboard配置

这是最常见的原因!你删了旧的Main_iPhone,但Info.plist里的UIMainStoryboardFile(或者针对iPad的UIMainStoryboardFile~ipad)可能还没改成新的Storyboard名称,甚至还保留着Main_iPhone。

  • 找到项目里的Info.plist文件,搜索UIMainStoryboard关键词,把对应的value改成你现在的主Storyboard名字;如果已经不用Storyboard做入口,就直接删掉这个键值对,确保代码里通过UIWindow或SceneDelegate正确初始化根控制器。

2. 清理Xcode缓存与Derived Data

本地测试正常但发布包有问题,大概率是缓存里还存着旧配置:

  • 关闭Xcode,通过Xcode > Preferences > Locations找到Derived Data的路径,直接删掉整个文件夹;
  • 打开Xcode后按Cmd+Shift+K清理项目缓存,再按Cmd+Option+Shift+K清理构建文件夹。

3. 检查Build Settings里的残留引用

有些隐藏配置可能还挂着旧Storyboard的名字:

  • 打开项目的Build Settings,搜索storyboard,检查Main storyboard file base name(以及对应的iPad版本),确认值是新的主Storyboard,或者为空(如果用代码初始化);
  • 再搜索OTHER_LDFLAGS等选项,确保没有硬编码的旧Storyboard相关参数。

4. 排查代码里的硬编码引用

有没有代码里直接写了Main_iPhone来加载Storyboard?比如:

let storyboard = UIStoryboard(name: "Main_iPhone", bundle: nil)

或者OC里的:

UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main_iPhone" bundle:nil];

全局搜一下项目里的Main_iPhone字符串,把所有硬编码的地方改成新的Storyboard名字,或者移除相关代码。

5. 确认发布的包是最新构建的

有时候会犯低级错误:传去App Store/TestFlight的包不是拆分Storyboard后的最新版本!

  • 重新打一个Archive,仔细检查构建日志,确认旧的Main_iPhone.storyboard没有被包含在包内;
  • 上传前可以右键Archive文件选择Show Package Contents,查看包内是否有Main_iPhone.storyboardc文件夹。

6. 检查多Target的配置一致性

如果项目有多个Target(比如主App、Extension、测试Target),确保所有Target的Info.plist和Build Settings都同步修改了,别漏了某个Target还在引用旧的Storyboard。

提示:如果用SceneDelegate的项目,还要检查Info.plist里的UISceneStoryboardFile配置,这个地方也很容易遗漏!

内容的提问来源于stack exchange,提问作者Nonouf

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 10:05:36