问题合集

添加Widget到项目中

问题

  • 是否需要勾选Include Configuration Intent
    • 如果勾选了会自动创建Intent的定义文件,并在Widget文件中使用的是IntentConfiguration

Reference

Making a Configurable Widget

Adding Configuration to an Existing iOS Widget

WidgetKit for iOS - Getting Started

Building a Widget for iOS with SwiftUI and WidgetKit

How to create Widgets in iOS 14 in Swift

Widget访问CoreData + iCloud的数据

应用本身的数据存储使用了CoreData + iCloud,本身是在一个PersistenceController中初始化了一个NSPersistentCloudKitContainer,与网上看到的一些方案不一样
解决:

  1. 构建App Group
  2. 修改PersistenceController中的配置
  3. WidgetTarget中使用PersistenceController.shared.container.viewContext.xxxMethod()进行获取数据,或者使用应用中获取数据的方法。能正常获取到数据了。

2022-03-20 变更
后来发现上面截图的方式可能会导致icloud同步出现问题,调整成了

Reference

WidgetKit and CoreData/CloudKit

构建Intent Extension

背景

在Intent定义文件中已经创建了CUSTOM INTENTS,并在Parameters中创建了一个自定义类型。

并且创建了一个IntentHandlerxxxxWidget的target中,

调试过程中,编辑小程序,已经展示出了选项,但是点击选择时,提示未提供此参数的选项

原因

IntentHandler需要通过新建Target的方式进行创建到项目中

解决



同时Starting Point选择None,也不勾选Include UI Extension。并确认激活。
此时会创建一个IntentHandler文件,在此文件中添加IntentClassHandling
然后将需要在这个target使用的文件的Target Membership都勾上这个Target。
然后在IntentHandler中完成选项的创建逻辑,就可以了。

Reference

Making a Configurable Widget

Intent 添加完后未配置支持的Intent

出现”This app or an app that it contains has a Siri Intents app extension that is missing the IntentsSupported array in the NSExtensionAttributes dictionary in the NSExtension dictionary in its Info.plist.“

原因

在【Intent Target】中的Info配置文件中的NSExtension -> NSExtensionAttributes -> IntentsSupported 中没有添加需要支持的Intent类

解决

Reference

【stackoverflow】SiriKit app getting "App installation failed" error while installing app
里面提到了关于需要给Siri Intent添加一些配置到配置文件中

Configuring Your Intents UI App Extension Target
里面有两个部分:

  1. 添加Intent UI到项目中
  2. 添加完Intent UI后,需要修改Info.plist文件来使得Intent扩展得到支持

如何从Widget打开特定页面

背景

根据大部分的教程,都需要通过使用AppDelegateScenceDelegate的方式处理请求进来的URL,均不起作用。

解决方式

但是现在使用的版本的SwiftUI应该对这个URL Types做了支持,在View下使用onOpenURL方法,并在方法中对URL做一些处理和过滤就可以了。
还有一个问题是如何通过URL跳转到对应的页面,视频中都给了解决方案。

Reference

Defining a Custom URL Scheme for Your App

Custom URL Scheme | Deep-Link iOS 13 and later Swift 5

Launching iOS Apps with a Custom URL Scheme
在测试过程中,可以将URL写到备忘录中,这样,点击就可以跳转

WidgetKit: How to add deep link on iOS Widget?

【youtube】SwiftUI 3.0 Deep Links in iOS - Deep Linking App - Xcode 13 - SwiftUI Tutorials 推荐

应用上传后收到邮件 ITMS-90626: Invalid Siri Support


通过下面文章中的方式解决,后来经过尝试
在Widget.intentdefinition文件中,修改描述,再次上传没有收到邮件了。

Reference

iOS开发日记-Widget后续篇(完成上篇作业与问题ITMS-90626)
推荐,里面记录的问题其实在开发过程中有碰到过

Reference

Video

Apple Developer

Build SwiftUI views for widgets

Principles of great widgets

Widgets Code-along, part 1: The adventure begins

Youtube

Build SwiftUI News Widget for iOS 15, iPadOS 15, macOS 12 - Intent Configurable Parameter

Article

Making a Configurable Widget
how to add a configurable property to a widget that displays information about a character in a game

Configuring Your Intents UI App Extension Target