问题标签 [widgetkit]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
ios - iOS 14 小部件:如何为每个小部件尺寸系列创建不同的布局?
我想为每个小部件尺寸(即小、中、大)创建不同的布局。如何根据小部件的大小分支我的代码?
swiftui - TimelineProvider 中的小部件大小和@Environment 值不匹配
大家早上好,
我正在使用 API 开发一个小部件,该 API 根据小部件的大小发送不同大小的数组(小:3 个新闻,中:6 个新闻,大:9 个新闻)。
我的印象是@Environment(\.widgetFamily) var family
TimelineProvider的时间线函数(我调用API的地方)之间存在问题。
实际上,在这个函数中,环境变量总是等于 systemMedium 大小,尽管小部件的“真实”大小。
你身边是否也有同样的问题?这是来自 Apple 的已知错误吗?我该如何解决这个错误?
谢谢你的帮助 :]
swift - WidgetKit 小部件不允许每三秒刷新一次时间线
我创建了一个小部件,我想每三秒更新一次。
我有以下代码:
但是,这三秒将被忽略。模拟器总是显示下一次刷新将在五分钟后。我也尝试使用 .after 而不是 .atEnd,但这没有任何效果。五分钟是最小值还是与模拟器有关?
ios - 多次调用自定义意图的小部件 getTimeline 方法
在具有单个自定义意图的 iOS 14 小部件中,当用户选择一个意图,然后更改为另一个时,我的getTimeline
方法会在每次刷新时为每个意图调用多次 - 包括先前选择的意图。
我希望getTimeline
仅以当前选择的意图调用。有没有办法检查意图是否是当前选择的意图?我在该方法中发出网络请求,getTimeline
当小部件仅显示一个意图时,我不想发出多个请求。
例如,我下载了Emoji Ranger示例代码,并在 getTimeline 方法中添加了打印语句。我然后:
- 运行应用程序并打开一次。
- 将小部件添加到主屏幕。
- 在模拟器上运行小部件扩展目标。
- 选择角色蛋头。
- 选择角色蛋糕。
这是下一次小部件刷新时打印的内容(通常约 15 分钟):
非常感谢任何帮助,谢谢!
ios - 如果正在使用我的小部件,如何查询 WidgetKit?
我想检查用户是否将我的小部件添加到主屏幕,是否有用于此的 API?我找不到一个。WidgetCenter.getCurrentConfigurations
返回应用程序提供的所有可用小部件,而不是使用过的小部件。
我寻找这样一个 API 的原因是:
- 我想报告小部件的使用情况。
- 我想决定是否应该通过
WidgetCenter
应用程序中发生状态更改时触发时间线重新加载。
swift - 为什么在测试新的 iOS 14 小部件时会弹出 siri?
正如标题所说,我正在模拟器上本地测试小部件。我有 xcode 12,种子 6。在 iPhone 8 模拟器上。
全新安装后,在小部件安装到主屏幕之前,Siri 会弹出,尽管我没有故意触发它。我也不知道有任何代码可以触发它。关于为什么会发生这种情况的任何建议?
xcode - 无法使用 SwiftUI Preview 在 Xcode 中预览 Widget
我正在尝试使用小部件上下文预览一些视图,例如:
但是,在尝试运行预览时出现此错误。而且,我不确定为什么会这样。
RemoteHumanReadableError:未知预览提供程序“MyTasksView_Previews” MyApp 不包含名为“MyTasksView_Previews”的预览提供程序。检查您的构建设置以确保将预览提供程序编译到您的产品中。
我也尝试使用简单的Text(text).previewContext(WidgetPreviewContext(family: .systemMedium))
,但它也不起作用。我正在使用 Xcode beta 5。
在 Apple Emoji Rangers Demo App for WWDC 2020 中。我们可以看到这段代码进行预览:
macos - 如何正确设置小部件以在 macOS 上进行后台更新?
我正在为 macOS 构建一个小部件,它仅适用于 macOS。并且,它在尝试重新创建另一个timeline
(从getTimeline
函数)后不断崩溃它抛出以下错误:
由于未捕获的异常“NSFileHandleOperationException”而终止应用程序,原因:“*** - [NSConcreteFileHandle fileDescriptor]:无效参数”以未捕获的 NSException 类型异常终止
我相信它是由于缺少方法的实现而产生的onBackgroundURLSessionEvents(matching:_:)
,这引起了我的注意以下文档⬇️
来自苹果文档:
当您的小部件扩展处于活动状态时,例如提供快照或时间线时,它可以启动后台网络请求。该过程类似于应用程序处理此类请求的方式,在后台下载文件中进行了描述。WidgetKit 不会恢复您的应用程序,而是直接激活您的小部件的扩展。要处理网络请求的结果,请在小部件的配置中使用 onBackgroundURLSessionEvents(matching:_:) 修饰符,并执行以下操作:
存储对完成参数的引用。在处理完所有网络事件后调用完成处理程序。
使用标识符参数查找您在发起后台请求时使用的 URLSession 对象。如果您的小部件扩展已终止,请使用标识符重新创建 URLSession。
调用 onBackgroundURLSessionEvents() 后,系统调用您提供给 URLSession 的 URLSessionDelegate 的 urlSession(_:downloadTask:didFinishDownloadingTo:) 方法。当所有事件都已交付后,系统会调用委托的 urlSessionDidFinishEvents(forBackgroundURLSession:) 方法。
要在网络请求完成后刷新小部件的时间线,请从代理的 urlSessionDidFinishEvents 实现中调用 WidgetCenter 方法。完成事件处理后,调用之前存储在 onBackgroundURLSessionEvents() 中的完成处理程序。
问题是urlSessionDidFinishEvents(forBackgroundURLSession:)
仅适用于:
macOS 目标似乎没有等效的想法。那么,我们应该如何设置呢?
ios - 我已将 Widgetkit 添加到我的应用程序中,但现在当应用程序在 Xcode 12 beta 上启动时在 iOS 13 上崩溃
我已将 WidgetKit 添加到我的应用程序中,但在 iOS 13 设备上,当应用程序启动时出现此错误时它会崩溃: dyld`__abort_with_payload
导致崩溃的代码部分是这样的:
我尝试过其他不成功的变体,例如:
该项目在objective-c中,我迅速导入了该类。
但是如果没有在任何地方添加 #import "myApp-Swift-h" 或使用该类,它就会不断崩溃。
有人可以告诉我我做错了什么或发生了什么吗?
提前致谢。
编辑:我在 Xcode 11 上尝试此代码并工作!
但它在 Xcode 12 beta 4 上崩溃了
编辑 2:它也在 Xcode 12 beta 6 上崩溃