0

SwiftUI "Hello World" 适用于 iOS,但不适用于 MacOS。

尝试构建一个简单的“Hello World”SwiftUI 示例以查看它在 Mac 上的工作原理,但我得到一个空的黑屏应用程序。

我正在使用 Xcode 11 MacOS 目标已检查 MacOS 版本 10.15 Beta (19A471t)

import SwiftUI

struct ContentView : View {
    var body: some View {
        VStack {
            Toggle(isOn: /*@START_MENU_TOKEN@*/.constant(true)/*@END_MENU_TOKEN@*/) {
                Text(/*@START_MENU_TOKEN@*/"Toggle"/*@END_MENU_TOKEN@*/)
            }
            Stepper(value: /*@START_MENU_TOKEN@*/.constant(4)/*@END_MENU_TOKEN@*/, in: /*@START_MENU_TOKEN@*/1...10/*@END_MENU_TOKEN@*/) {
                /*@START_MENU_TOKEN@*/Text("Stepper")/*@END_MENU_TOKEN@*/
            }
            Text("Hello World")
        }
    }
}

#if DEBUG
struct ContentView_Previews : PreviewProvider {
    static var previews: some View {
        ContentView()
    }
}
#endif
4

5 回答 5

4

这是一个已知问题,在Xcode 11 Beta Release Notes中提到:

Xcode 11 beta 不支持在配置为使用 UIKit for Mac 的项目中使用 SwiftUI。

所以我们唯一的选择就是等到下一个 Xcode 11 测试版发布。


更新:这适用于 Xcode 11.0 beta 2。

于 2019-06-11T14:19:04.640 回答
1

现在可以使用Xcode 11 beta 2了:

Xcode 11 beta 支持使用 SwiftUI 进行开发。

请注意,由 Beta 1 创建的骨架应用程序(从新建项目菜单创建)将不起作用。您需要使用 Beta 2 创建的那个。

于 2019-06-18T09:14:09.427 回答
1

它在 Xcode 11 beta 2 和 macOS 10.15 beta2 上运行良好。

在此处输入图像描述

于 2019-06-18T20:15:32.213 回答
0

虽然 Xcode 11 beta 1 缺少支持是一个已知问题,但您可以通过更改 SceneDelegatewillConnectTo方法中的场景设置来启用它:

#if targetEnvironment(UIKitForMac)
    let windowScene = UIWindowScene(session: session, connectionOptions: connectionOptions)
    let window = UIWindow(windowScene: windowScene)
#else
    let window = UIWindow(frame: UIScreen.main.bounds)
#endif
    window.rootViewController = UIHostingController(rootView:
      ContentView()
        .environmentObject(TimersStore.shared)
        .environmentObject(SettingsStore.shared)
    )

我保护了这段代码,因为出于某种原因,如果您在 iOS/iPadOS 目标上使用 UIWindowScene,它会导致键盘不再出现并且文本输入不起作用。这对于在 macOS 上运行的应用程序也是如此,但您至少可以检查您的应用程序的外观/运行方式。

于 2019-06-14T15:18:15.267 回答
0

现在这在 SwiftUI 中非常简单:

import SwiftUI

struct ContentView: View {
    #if targetEnvironment(macCatalyst)
    var body: some View {
        Text("Hello, Mac!")
    }
    #else
    var body: some View {
        Text("Hello, iOS!")
    }
    #endif
}

确保您在部署信息目标中选中了“Mac”。

于 2019-11-14T11:27:45.390 回答