如何为watchOS SwiftUI应用添加启动屏?
解决watchOS SwiftUI应用启动屏不显示的问题
你遇到的问题很常见——watchOS并不支持iOS的UILaunchScreen配置项,所以你在Info.plist里加的这段配置其实不会被watchOS系统识别。下面给你两种可行的解决方案,分别对应系统原生启动屏和自定义启动屏:
方法一:使用系统原生启动屏(Asset Catalog)
这是最符合watchOS规范的方式,系统会自动处理启动屏的显示时机:
- 打开你的watchOS项目的
Assets.xcassets文件 - 右键点击空白区域,选择New Launch Image,Xcode会自动创建适配watchOS的启动图条目
- 将你的
Rupee图片拖入对应分辨率的槽位(Asset Catalog里会标注每个槽对应的Apple Watch型号,确保图片尺寸匹配) - 回到Info.plist,删除你添加的
<key>UILaunchScreen</key>整个字典——watchOS不需要这个配置,Xcode会自动为Launch Image生成对应的plist配置
⚠️ 重要提醒:确保你的Rupee图片已经被添加到watchOS应用目标的资源列表里(在Xcode的File Inspector里勾选watchOS目标),很多人会不小心只把图片加到iOS目标里,导致watchOS找不到资源。
方法二:自定义SwiftUI启动屏(适合需要动态内容的场景)
如果需要更灵活的启动屏(比如添加文字、动画),可以手动在SwiftUI里实现:
首先修改你的App入口文件,先显示启动屏视图,延迟后切换到主视图:
@main struct SampleWatchApp: App { @State private var isShowingSplash = true var body: some Scene { WindowGroup { Group { if isShowingSplash { SplashScreen() .onAppear { // 模拟启动加载时间,可根据实际情况调整 DispatchQueue.main.asyncAfter(deadline: .now() + 1.2) { withAnimation(.easeOut) { isShowingSplash = false } } } } else { MainView() // 替换成你的主视图 } } } } } // 自定义启动屏视图 struct SplashScreen: View { var body: some View { ZStack { // 设置背景色,匹配你的应用风格 Color(.systemBackground) .edgesIgnoringSafeArea(.all) Image("Rupee") .resizable() .scaledToFit() .frame(width: 70, height: 70) .shadow(radius: 4) } } }
额外注意事项
- watchOS应用启动速度通常很快,系统原生启动屏可能只会显示很短的时间,如果你的应用启动特别快,可能看起来像是没显示——可以在启动时加一点必要的初始化逻辑,让启动屏停留更久(但不要故意延迟,影响用户体验)
- 图片名称要完全匹配,watchOS的资源名称是大小写敏感的,确保
Rupee和Asset Catalog里的图片名称完全一致
内容的提问来源于stack exchange,提问作者SVG




