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
функция должна быть определена как расширение в этом модуле.