标签: widgetkit

iOS 14 的 iOS 应用程序和小部件之间的通信

我目前正在为我的应用程序创建第一个小部件。数据是通过 API 调用获取的。我想知道是否可以从应用程序发出此请求,然后将该请求的结果发送到小部件?(有点像 WatchConnectivity 对手表的作用)

感谢您的帮助 :-)

widgetkit swiftui

6
推荐指数
1
解决办法
4273
查看次数

在 iOS 14 小部件中显示 Core Data 数据的合理方式是什么?

我有一个使用 Core Data + CloudKit 堆栈的应用程序。(核心数据在设备之间同步。)。现在我想在 iOS 14 小部件中显示来自 Core Data 的数据(在 WidgetKit 目标中查看)。

\n

我的目标是让小部件中的数据也是来自核心数据的实际数据:即 \xe2\x80\x94 用户更改了设备 A 上的记录,稍后在设备 B(带有小部件)上更改了小部件中表示的记录。

\n

我应该怎么做:

\n

a)为主应用程序目标和小部件目标添加应用程序组功能;并在小部件目标中获取核心数据。
\nb) 在主应用程序目标中获取核心数据,保存到文件(plist?、JSON?),然后在小部件中使用该文件。
\nc)在主应用程序目标中获取核心数据,从小部件目标中获取该数据。(是否可以?)

\n

什么才是最合理的方式呢?感谢您的任何建议。

\n

core-data ios swift cloudkit widgetkit

6
推荐指数
0
解决办法
1218
查看次数

如何在 iOS 14 Home Widget 中显示当前时间(实时)

我正在为 ios 14 Home Widget 开发一个应用程序,在显示当前时间(数字时钟)时遇到一个问题,即该小部件没有每秒更新。众所周知,苹果不允许每秒触发时间线,有没有其他方法可以实时更新显示当前时间?

我尝试了这些方法,但没有按预期工作

class NetworkManager: ObservableObject {
    @Published var dateIs = Date()
    
    init() {
        startTimer() // fetch data must be called at least once
    }
    private  func startTimer() { 
        let t = RepeatingTimer(timeInterval: 3)
                t.eventHandler = {
                    DispatchQueue.main.async() {
                        // your UI update code
                        print("Timer Fired")
                     self.dateIs = Date()
                        WidgetCenter.shared.reloadAllTimelines() // reload timelines
                    }
                    if(false){   //I know this makes no sense, but it works. Go figure...
                        t.suspend()
                    }
                }
                t.resume()

    }
}


struct Provider: TimelineProvider { …
Run Code Online (Sandbox Code Playgroud)

widget swift widgetkit swiftui ios14

6
推荐指数
1
解决办法
5798
查看次数

在 SwiftUI 中应用cornerRadius或clipShape时,iOS Widget崩溃

当我将cornerRadius修改器添加到 SwiftUI 布局中的视图或clipShape剪辑视图时,我的 iOS Widget 就会崩溃。

有人经历过同样的行为并找到解决方案吗?

我用 Xcode 12.1 和 iOS 14.1 模拟器尝试过,也用 Xcode 12.2 和 iOS 14.2 模拟器尝试过,得到了相同的结果。

导致小部件崩溃的示例代码:

Image("sampleimage")
.background(Color.blue)
.cornerRadius(20)
Run Code Online (Sandbox Code Playgroud)

crash ios widgetkit swiftui

6
推荐指数
0
解决办法
324
查看次数

iOS 添加按钮到小部件扩展

我目前正在为我的应用程序设计一个小部件,基本上,该小部件应由三个按钮组成。到目前为止,我还没有找到任何关于如何向 iOS Widget 扩展添加按钮的教程。我看到例如谷歌地图在其小部件中使用按钮。

如何才能做到这一点?

widget button ios widgetkit

6
推荐指数
2
解决办法
6498
查看次数

iOS 在 WidgetKit 小部件扩展中动态加载的自定义字体在真实设备上不起作用?(模拟器没问题)

<TLDR;> ; 尝试在小部件中通过 CTFontManagerRegisterFontsForURL 使用下载的字体在真实设备上不起作用。(适用于模拟器)。看起来注册字体可以,但是加载字体时出现权限问题

error   14:39:07.672799-0800    chronod [com.x.y.widgetx:widgetx:small:1536744920620481560@148.0/148.0/20.2] reload: could not decode view
error   14:39:07.674984-0800    kernel  Sandbox: chronod(2128) deny(1) file-read-metadata /private/var/mobile/Containers/Shared/AppGroup/9B524570-1765-4C24-9E0C-15BC3982F0DC/downloadedFonts/Chewy/Chewy-Regular.ttf
error   14:39:07.675762-0800    kernel  Sandbox: chronod(2128) deny(1) file-read-data /private/var/mobile/Containers/Shared/AppGroup/9B524570-1765-4C24-9E0C-15BC3982F0DC/downloadedFonts/Chewy/Chewy-Regular.ttf
Run Code Online (Sandbox Code Playgroud)

</TLDR;>

项目结构是:App目标+小部件扩展+小部件意图扩展

所有共享一个公共应用程序组 group.com.xyz并且所有文件处理都是使用

FileManager.default.containerURL(forSecurityApplicationGroupIdentifier: "group.com.x.y.z")
Run Code Online (Sandbox Code Playgroud)

这样就只使用共享容器。

使用主应用程序目标,下载字体“Chewy-Regular.ttf”并将其保存到共享 AppGroup 容器中。

现在可以通过以下方式加载字体:

CTFontManagerRegisterFontsForURL()
Run Code Online (Sandbox Code Playgroud)

并显示在主应用程序文本视图中:

Text("Testing...").font(Font.custom("Chewy-Regular", size: 20))
Run Code Online (Sandbox Code Playgroud)

现在添加一个使用此字体的 Widgetkit 小部件实例。

在 IntentTimelineProvider 的 getTimeLine() 和 getSnapShot() 中,我们通过 CTFontManagerRegisterFontsForURL 再次加载字体(这可能需要再次发生,因为小部件在与主应用程序不同的进程中运行?)。

在模拟器上,小部件将显示正确的字体。但在 iPhone7 真实设备上,小部件将显示“编辑的占位符视图”。

我在设备控制台中看到:

error   14:39:07.567120-0800    chronod No configuration found for configured widget identifier: D9BF75EE-4A04-441A-8C85-1507F7ECE379
fault   14:39:07.625600-0800    widgetxExtension    -[EXSwiftUI_Subsystem beginUsing:withBundle:] unexpectedly …
Run Code Online (Sandbox Code Playgroud)

ios swift widgetkit

6
推荐指数
0
解决办法
1219
查看次数

SwiftUI Widget:“main”属性只能应用于模块中的一种类型

我创建了一个小部件,并将其添加@main到声明的顶部。

但是,当我切换到 Widget 扩展目标并运行它时,我收到错误,'main' attribute can only apply to one type in a module因为@main我的主应用程序文件(入口点)中也有一个。我需要根据我是否要运行应用程序或小部件目标,@main从我不想运行的目标中删除,运行它,然后添加它。

我做错了什么吗?我试图查找这一点,但没有发现任何提及它的内容。

提前致谢!

widgetkit swiftui

6
推荐指数
1
解决办法
2230
查看次数

设备锁定时,具有相对日期文本的小部件不会更新

我有一个带有 SwiftUIText计时器日期的小部件。它按预期倒计时。但是,当设备锁定时,计时器将被冻结。

要重现它,请将 SwiftUIText(_:style:)视图添加到小部件并将小部件放置在“今日视图”上。倒计时应该按预期进行。但是,请锁定手机,然后在锁定状态下查看“今日视图”。计时器被冻结。

以下是完整的工作示例代码:

import WidgetKit
import SwiftUI

struct Provider: TimelineProvider {
    func placeholder(in context: Context) -> SimpleEntry {
        SimpleEntry(date: Date())
    }

    func getSnapshot(in context: Context, completion: @escaping (SimpleEntry) -> ()) {
        let entry = SimpleEntry(date: Date())
        completion(entry)
    }

    func getTimeline(in context: Context, completion: @escaping (Timeline<Entry>) -> ()) {
        var entries: [SimpleEntry] = []

        // Generate a timeline consisting of five entries an hour apart, starting from the current date.
        let currentDate = Date()
        for …
Run Code Online (Sandbox Code Playgroud)

ios widgetkit swiftui

6
推荐指数
0
解决办法
596
查看次数

WidgetKit:如何使打印语句出现在控制台中?

我试图找出为什么我的小部件没有重新加载。我想entries从内部打印数组func getTimeline到控制台。
但是打印语句不会出现在控制台中。

如何让打印语句出现在控制台中?

xcode swift widgetkit swiftui

6
推荐指数
1
解决办法
524
查看次数

尝试使用框架中声明的 AppEnum 时无法确定类型 &lt;AppEnum&gt; 的值类型

这是在 iOS 17 Beta 8 和 Xcode 15 Beta 8 上

在我的应用程序中,我有一个在主应用程序和扩展之间共享的代码框架。在此框架中,我声明了 AppEntities 和 AppEnums。我可以从任何地方(主应用程序和扩展)完美地使用它们来处理按钮之类的事情,以及框架中声明的意图参数。它们也按预期出现在快捷方式中。问题是,当我尝试将它们用于 WidgetConfigurationIntent 的参数时,我收到Unable to determine value type for type <AppEnum>编译器错误。

框架已导入,我的 AppEnum 已公开。我还尝试使用 AppIntentsPackage API,但据我所知,这没有任何作用。到目前为止,我发现的唯一解决方法是基本上复制代码并使用不同的名称在扩展中重新声明 AppEnum,将其用作参数,然后初始化框架的 AppEnum 版本(这是我使用的标准意图)按钮和快捷方式期望)。这并不完全优雅且不易维护,因此我们将不胜感激适当的解决方案。有任何想法吗?

ios swift widgetkit appintents

6
推荐指数
0
解决办法
303
查看次数

标签 统计

widgetkit ×10

ios ×6

swiftui ×6

swift ×5

widget ×2

appintents ×1

button ×1

cloudkit ×1

core-data ×1

crash ×1

ios14 ×1

xcode ×1