💨

iOS 14 WidgetKit からアプリが起動されたかどうか知る

2020/10/07に公開

動作環境

  • 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]")

ウィジェットのサイズ(小中大)なんかも取れます。

参考リンク

Discussion