I’m creating a simple AppIntents Shortcut that requires UIKit to open a URL in my app. Though, once I add the import UIKit
to my file, Xcode shows me the following warning at the caseDisplayRepresentations
, because I use an image for the display repreentations. Without importing UIKit (or without the image for the DisplayRepresentations) everything works fine! Any ideas how to fix that?
Expected a direct call to the
Image
initializer, gotSwift.Optional<AppIntents.DisplayRepresentation.Image>
instead
import AppIntents
import UIKit
enum AppView: Int, AppEnum {
case tab1
case tab2
static var typeDisplayRepresentation = TypeDisplayRepresentation(name: "View")
static var caseDisplayRepresentations: [AppView : DisplayRepresentation] = [
.tab1: DisplayRepresentation(title: "Tab 1",
image: .init(systemName: "1.circle")),
.tab2: DisplayRepresentation(title: "Tab 2",
image: .init(systemName: "2.circle"))
]
}
// MARK: - Intent
struct OpenAppIntent: AppIntent {
static let title: LocalizedStringResource = "Open App"
static let description: IntentDescription = "Opens the app in the given view."
// Launches app when action is triggered
static let openAppWhenRun: Bool = true
// App View Parameter
@Parameter(title: "View",
description: "The view inside the app.",
default: .tab1,
requestValueDialog: "Where would you like to navigate to?")
var view: AppView
// Shortcuts Action Text
static var parameterSummary: some ParameterSummary {
Summary("Open \(\.$view)")
}
@MainActor
func perform() async throws -> some IntentResult {
if let url = URL(string: "myapp://\(view)") {
await UIApplication.shared.open(url)
}
return .result()
}
}
As I can see, when UIKit was imported, it changed the Image default initializer from returning Image to Optional<Image>.
Please focus on the Quick Help.
You can solve this issue by force unwrapping the image (not recommended)
.init(systemName: "1.circle")!
or by helping Xcode specify your selected initializer.
.init(systemName: "1.circle", isTemplate: false)