背景#
Xcode15 にアップグレードすると、ウィジェットを実行する際に WIDGET_BACKGROUND_API_ADOPTION_PROMPT
のプロンプトが表示されます。以下の画像を参照してください。
解決方法#
View_Extensions.swift
を作成し、以下のコードを追加します:
import SwiftUI
extension View {
@ViewBuilder func adoptableWidgetBackground(_ color: Color) -> some View {
if #available(iOS 17.0, *) {
containerBackground(for: .widget) { color }
} else {
background(color)
}
}
}
次に、XXXLineProvider
内の ZZZ_WidgetEntryView: View
を以下のように変更します:
struct ZZZ_WidgetEntryView: View {
var body: some View {
...
// 以下のコードを追加
.adoptableWidgetBackground(Color.clear)
}
}
再度実行すると、このプロンプトが消え、ウィジェットが表示されることが確認できます。ただし、もう 1 つの問題があります - ウィジェットの背景が画像の場合、周囲に白い枠が追加されます。解決方法は以下の通りです。WidgetConfiguration_Extensions.swift
を作成します:
import SwiftUI
extension WidgetConfiguration {
func adoptableWidgetContentMargin() -> some WidgetConfiguration {
if #available(iOSApplicationExtension 15.0, *) {
return contentMarginsDisabled()
} else {
return self
}
}
}
次に、XXXLineProvider
内の ZZZWidget: Widget
を以下のように変更します:
struct ZZZWidget: Widget {
public var body: some WidgetConfiguration {
IntentConfiguration(...) { entry in
...
}
.configurationDisplayName("displayName")
.supportedFamilies([WidgetFamily.systemMedium])
// 以下のプロパティを追加するだけで解決します
.adoptableWidgetContentMargin()
}
}
再度実行すると、問題が解決します。