💨
iOS 14 WidgetKit からアプリが起動されたかどうか知る
動作環境
- Xcode 12.0 (12A7208)
- iOS 14.0
やりかた
いくつかありますが、今回は application(_:continue:restorationHandler:)
で判別する方法を紹介します。
本体アプリの AppDelegate.swift で次のように判定できます。
func application(_ application: UIApplication, continue userActivity: NSUserActivity, restorationHandler: @escaping ([UIUserActivityRestoring]?) -> Void) -> Bool {
if userActivity.activityType == "WidgetExtension" {
print("Launched from WidgetKit!")
}
return true
}
※WidgetExtension
のところはアプリによって異なるかも。テストできていないので、ご存じの方がいましたら教えてください
また、起動元ウィジェットの情報は userInfo の WidgetCenter.UserInfoKey
で取り出せます。
Optional("[AnyHashable(\"WGWidgetUserInfoKeyKind\"): WidgetExtension, AnyHashable(\"WGWidgetUserInfoKeyFamily\"): systemMedium]")
ウィジェットのサイズ(小中大)なんかも取れます。
参考リンク
- Detect app launch from WidgetKit widget extension - 他の判別方法も載っています。
Discussion