🤖

WidgetKit実装時のメモ(Core Data, macOS対応)

2022/02/26に公開

Core Dataとの同期

  1. App Groupsを各Targetでcheckする。
    XcodeのTargets > Signing & CapabilitiesからApp Groups追加する。

  2. setQueryGenerationFromを忘れずに実行する。
    *これをしないとアプリ側で保存してもすぐに反映されないので注意。

try viewContext.setQueryGenerationFrom(.current)

https://developer.apple.com/forums/thread/668144

macOS対応

Widgetsの編集(Intentsでダイナミックに設定)

IntentsのTargetにApp Sandboxを追加する。
XcodeのTargets > Signing & CapabilitiesからApp Sandbox追加する。
*これをしないと右クリックした時の編集ができないので注意
https://stackoverflow.com/q/64598227/14970235

Widgetの更新

scenePhaseを使って更新しようとしたけど、現状macOSではうまく動かない。(Xcode13.2.1)iOSはこの方法で動く。
https://developer.apple.com/documentation/swiftui/scenephase

なのでNSApplicationDelegateAdaptorを使って、applicationWillResignActiveの中で更新するとできる。
https://developer.apple.com/documentation/swiftui/nsapplicationdelegateadaptor

(ちなみにonReceiveでNOtificationを受け取る方法も無理だった)

// これでは無理だった。
Text("").onReceive(NotificationCenter.default.publisher(for: NSWorkspace.sessionDidResignActiveNotification)) { _ in }

Discussion