【问题标题】:Build SwiftUI "Hello World" on MacOS在 MacOS 上构建 SwiftUI “Hello World”
【发布时间】:2019-06-11 12:16:19
【问题描述】:

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

【问题讨论】:

  • 你能修复源代码吗?里面有些乱码

标签: macos swiftui


【解决方案1】:

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

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

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


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

【讨论】:

  • 非常感谢您的回答!我自己也一直在想这个。
  • 感谢莫礼萨的澄清!您是否尝试过在 Xcode Preview 中预览 SwiftUI MacOS?我尝试了以下代码,但也没有用:#if DEBUG struct ContentView_Previews : PreviewProvider { static var previews: some View { Group { ContentView() .previewDevice("Mac") ContentView() .previewDevice("iPad Pro (12.9-)英寸)(第三代)”
  • @AlexandreLordelo iPad 预览工作正常,但 mac 不会出现。也许它需要另一个字符串,或者预览中还不支持它!
  • @AlexandreLordelo 预览也修复了吗?
【解决方案2】:

现在可以使用Xcode 11 beta 2

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

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

【讨论】:

    【解决方案3】:

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

    【讨论】:

    • 还没能测试mac预览。你知道它的代码吗?
    • @AlexandreLordelo Xcode 11 beta 2 & macOS 10.15 beta2,够了
    • 谢谢!我假设您使用 Mac 作为构建目标?在 Debug 代码上定义如何,以便您可以预览 iOS 和 MacOS?
    【解决方案4】:

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

    【讨论】:

      【解决方案5】:

      现在这在 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”。

      【讨论】:

        猜你喜欢
        • 2018-08-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-12-19
        • 2023-03-03
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多