Xcode 12 / iOS14 Widget "@main and must provide a main static function" error

Используя Xcode 12, я пытаюсь создать расширение приложения Widget для моего проекта.

При создании новой цели виджета я получаю следующую ошибку:

'Widget' is annotated with @main and must provide a main static function of type () -> Void or () throws -> Void.

https://stackru.com/images/e f71223ad991ab5c619d08c12a971ee fcc0f63b1.png

5 ответов

Решение

Вы используете имя Widget, уже существует протокол под названием Widget в SwiftUI фреймворк.

Вы должны использовать другое имя, но если вы действительно хотите, добавьте имя модуля в начале, например SwiftUI.Widget

@main
struct Widget: SwiftUI.Widget {
    private let kind: String = "Widget"

    public var body: some WidgetConfiguration {
        IntentConfiguration(kind: kind, intent: ConfigurationIntent.self, provider: Provider(), placeholder: PlaceholderView()) { entry in
            WidgetEntryView(entry: entry)
        }
        .configurationDisplayName("My Widget")
        .description("This is an example widget.")
    }
}

Для тех, кто хочет исправить проблему AppDelegate при включении Mac для проекта iOS14 - обратитесь к: iOS Xcode 12.0 Swift 5 'AppDelegate' помечен @main и должен предоставлять основную статическую функцию типа () -> Void или () броски -> Пустота

Исправление состоит в том, чтобы заменить "@main" на "@UIApplicationMain".

Я получил эту точную ошибку со следующим кодом:

      @main
struct NotesApp: App {
    var body: some Scene {
        WindowGroup {
            ContentView()
        }
    }
}

Проблема заключалась в том, что я назвал свой класс логики приложения App.

У меня такая же ошибка с этим кодом:

      import WidgetKit

@main
struct WidgetSale: Widget {
    let kind: String = "widgetSale"

    var body: some WidgetConfiguration {
        StaticConfiguration(kind: kind, provider: Provider()) { entry in
            widgetSaleEntryView(entry: entry)
        }
        .configurationDisplayName("My Widget")
        .description("This is an example widget.")
    }
}

Я решаю это, импортируя swiftUI в начало файла:

      import SwiftUI

В моем случае у меня был код этого файла:

      import SwiftUI

@main
struct FooWidgetExtension: WidgetBundle {
    var body: some Widget {
        SomeWidget()
    }
}

private struct SomeWidget: Widget {
    init() {}

    var body: some WidgetConfiguration {
        EmptyWidgetConfiguration()
    }
}

И проблема заключалась в том, что на самом деле вам нужно иметьimport WidgetKitтакже. mainфункция должна быть определена как расширение в этом модуле.

Другие вопросы по тегам