在MacOS上构建SwiftUI“ Hello World”

时间:2019-06-11 12:16:19

标签: macos swiftui

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

5 个答案:

答案 0 :(得分:5)

这是Xcode 11 Beta Release Notes中提到的已知问题:

  

Xcode 11 Beta不支持在项目中使用SwiftUI   配置为使用Mac版UIKit。

因此,我们唯一的选择就是等待下一个Xcode 11 beta版本。


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

答案 1 :(得分:1)

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

  

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

请注意,由Beta 1创建的骨架应用程序(通过“新建项目”菜单创建)将无法使用。您需要使用Beta 2创建的版本。

答案 2 :(得分:1)

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

enter image description here

答案 3 :(得分:0)

虽然众所周知的问题是缺少对Xcode 11 beta 1的支持,但是您可以通过在SceneDelegate willConnectTo方法中更改场景设置来启用它:

#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上运行的应用程序也是如此,但是您至少可以检查一下应用程序的外观/运行方式。

答案 4 :(得分: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”。