iOS 18 Siri Shortcut with a phrase does not appear in Shortcuts App any more

I was able to add shortcuts with parameters and use them from the Shprtcuts app in iOS 17, nevertheless Siri intent did never work. I upgraded to iOS 18 my app and my mobile.

Now, the shortcut only appears in shortcuts app if no parameter is added to it. When I try to set a parameter, the shortcut does not appear any mora in Shortcuts app.

struct ShortcutsProvider: AppShortcutsProvider { static var appShortcuts: [AppShortcut] { AppShortcut( intent: OpenAppIntent(), phrases: [ "Show (.$screen) in (.applicationName)" ], shortTitle: "Open", systemImageName: "iphone.badge.play" ) } }

struct OpenAppIntent: AppIntent { static var title: LocalizedStringResource = "Show" static let description = IntentDescription("Shows a screen.") static var openAppWhenRun: Bool = true static var authenticationPolicy = IntentAuthenticationPolicy.alwaysAllowed

@Parameter(title: "screen")
var screen: String

@MainActor
func perform() async throws -> some IntentResult {
    return .result()
}

}

extension ScreenOption: AppEntity { struct OpenAppQuery: EntityQuery {

    @IntentParameterDependency<OpenAppIntent>( \.$screen )
    var openAppIntent

    func entities(for: [ScreenOption.ID]) async throws -> [ScreenOption] {
        return []
    }

    func suggestedEntities() async throws -> [ScreenOption] {
        return []
    }
}

var displayRepresentation: DisplayRepresentation {
    .init(stringLiteral: "\(title)")
}

static var defaultQuery: OpenAppQuery = OpenAppQuery()

static var typeDisplayRepresentation: TypeDisplayRepresentation = .init(name: "Screen")

}

extension ScreenOption: EntityIdentifierConvertible { static func entityIdentifier(for entityIdentifierString: String) -> ScreenOption? { allCases.filter { $0.rawValue == entityIdentifierString }.first }

public var entityIdentifierString: String {
    rawValue
}


public init?(entityIdentifierString: String) {
    guard let screenOption = ScreenOption.entityIdentifier(for: entityIdentifierString)
    else { return nil }
    
    self = screenOption
}

}

Answered by Engineer in 814141022

I think the problem may be that suggestedEntities() is returning an empty array. Your suggestedEntities() function needs to return an entity for each screen a person may want to open.

I think the problem may be that suggestedEntities() is returning an empty array. Your suggestedEntities() function needs to return an entity for each screen a person may want to open.

iOS 18 Siri Shortcut with a phrase does not appear in Shortcuts App any more
 
 
Q