My intents and entities show up in Shortcuts, and my tests that use App Intents Framework pass. But I can't for the life of me figure out why Siri won't work.
I'm trying phrases like "Add <item> to my list in <app name>". All I ever get from Siri is variations of "I can't add items directly to <app name>" or "I can't add items to your lists in <app name>".
Does anyone see any issues with the following? ( I've left out some of the AppEnum and Entity types for brevity, but these are the main ones)
@AppIntent(schema: .reminders.createReminder)
struct AddToListIntent {
var title: String
var list: ListEntity?
var note: AttributedString?
var isFlagged: Bool?
var images: [IntentFile]
var tags: Set<String>
var urls: [URL]
var dueDate: DateComponents?
var recurrence: Calendar.RecurrenceRule?
var locationTrigger: LocationTriggerEntity?
var section: SectionEntity?
func perform() async throws -> some ReturnsValue<ReminderEntity> {
let newReminder = ReminderEntity(id: "foo", reminder: .init(name: title))
return .result(value: newReminder)
}
}
struct Reminder {
var name: String
}
@AppEntity(schema: .reminders.reminder)
struct ReminderEntity {
// MARK: Static
static let defaultQuery = ReminderEntityQuery()
// MARK: Properties
let id: String
let reminder: Reminder
@ComputedProperty(title: "Title")
var title: String { reminder.name }
var note: AttributedString? { nil }
var tags: Set<String> { Set() }
var urls: [URL] { [] }
var dueDate: DateComponents? { nil }
var recurrence: Calendar.RecurrenceRule? { nil }
var isCompleted: Bool { false }
var isFlagged: Bool? { nil }
var creationDate: Date? { nil }
var completionDate: Date? { nil }
var list: ListEntity
var locationTrigger: LocationTriggerEntity? { nil }
var displayRepresentation: DisplayRepresentation {
.init(title: "\(title)")
}
// MARK: Query
struct ReminderEntityQuery: EntityQuery, EnumerableEntityQuery {
func entities(for identifiers: [ReminderEntity.ID]) async throws -> [ReminderEntity] {
identifiers.map { .init(id: $0, reminder: .init(name: "Foo")) }
}
func allEntities() async throws -> [ReminderEntity] {
["foo", "bar", "baz"].map { ReminderEntity(id: $0, reminder: .init(name: $0)) }
}
}
}
@AppEntity(schema: .reminders.list)
struct ListEntity: AppEntity, IndexedEntity {
let id: String
let myName: String
var name: String { myName }
// 3. Define how this entity is displayed to the user in shortcuts/Siri
var displayRepresentation: DisplayRepresentation {
DisplayRepresentation(title: "\(myName)")
}
@Property
var type: MyListType
// 4. Provide a query so the system can resolve specific lists
static var defaultQuery = ListEntityQuery()
}