在开发小组件时遇到获取是否存在桌面的相关需求,通过时间戳记录对比的方式进行判断依赖于小组件的刷新,时效性比较差。
于是乎发现了这个方法,可以比较及时的获取到是否在桌面上的方式。
@objc static func getWidgetConfigrations(widgetName: String, completion: @escaping (_ isInDeskTop: Bool) -> Void){
guard #available(iOS 14, *) else {
completion(false)
return //iOS 14 以下系统就直接返回
}
let operationQueue = OperationQueue.current ?? OperationQueue.main
#if arch(arm64) || arch(i386) || arch(x86_64)
WidgetCenter.shared.getCurrentConfigurations { result in
var isInDeskTop = false
defer { operationQueue.addOperation { completion(isInDeskTop) } }
guard case.success(let widgets) = result else { return }
for info:WidgetInfo in widgets {
if info.kind == widgetName {//判断当前存在的widgets 的kind与想要获取的widgetName是否是同一个widget kind
isInDeskTop = true
break
}
}
}
#endif
}