拆分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
相关产品推荐
相关产品推荐

