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

多平台SwiftUI应用在macOS运行时能否跳过launchscreen.storyboard?

问题背景
  • 开发环境:Xcode 14.0 beta,创建SwiftUI应用时选用Multiplatform模板,核心交付平台为iOS,选择多平台模板仅为测试应用在macOS端的运行效果
  • 触发报错:iOS storyboard doesn't support device type 'mac'
  • 报错前置逻辑:WWDC 2020推出的基于Info.plist配置SwiftUI启动屏的方案从Xcode 13版本起失效,实测Xcode 14.0 beta中该方案仍无法正常工作,因此改用UIKit框架下的storyboard实现启动屏,但storyboard仅支持iOS等UIKit平台,无法在macOS端加载,触发上述报错。
核心问题解决方案

分平台差异化配置启动屏(无兼容问题)

不需要强行找统一的跨平台启动屏配置文件,直接按平台拆分配置即可:

  • iOS端:保留现有storyboard启动屏的配置和实现,无需改动
  • macOS端跳过storyboard配置操作步骤:
    1. 选中项目对应Target,打开General设置标签
    2. 找到Deployment Info板块,切换到macOS分类页
    3. 清空Launch Screen File输入框的内容,macOS端就不会尝试加载iOS专用的storyboard文件,报错直接消失
  • macOS端启动屏实现:如果需要macOS端也展示启动内容,直接用SwiftUI写原生启动视图即可,不需要依赖storyboard,在App入口通过状态控制首屏展示逻辑:
@main
struct DemoApp: App {
    @State private var isLoading = true
    var body: some Scene {
        WindowGroup {
            if isLoading {
                // 自定义启动页,可放置logo、加载进度等内容
                LaunchView()
                    .task {
                        // 这里放应用初始化逻辑,比如加载本地数据、拉取配置
                        try? await Task.sleep(nanoseconds: 1_500_000_000)
                        withAnimation {
                            isLoading = false
                        }
                    }
            } else {
                ContentView()
            }
        }
    }
}

补充说明:Xcode 13起多平台SwiftUI模板默认会把配置从Info.plist收敛到Xcode的Target设置面板,手动修改Info.plist里的启动屏键值会被Xcode的构建配置覆盖,这是旧方案失效的核心原因,不需要再尝试手动改Info.plist修复。

附加问题解答:多平台开发还是分端独立开发

行业内没有统一标准,按应用复杂度选择即可:

  • 功能简单、无强平台专属特性的应用(比如纯计算工具、本地笔记类应用),直接用Multiplatform模板开发是常见实践,核心业务代码可以100%复用,只需要对少量平台差异化UI做适配即可,维护成本最低
  • 功能复杂、需要调用大量平台专属能力(比如iOS端的健康Kit、实时活动,macOS端的菜单栏常驻、文件夹同步扩展),或者交互需要严格匹配各平台设计规范的应用,建议拆分iOS、macOS两个独立Target开发,把公共业务逻辑抽成共享模块供两端调用,避免写大量冗余的平台判断代码,后续迭代效率更高。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 07:09:18