我已将 iOS 应用程序从 UIKit/ViewController 迁移到 SwiftApp/SwiftUI 生命周期。
我已将 UserActivity 标识符放入 plist.info NSActivityTypes 数组:
<key>NSUserActivityTypes</key>
<array>
<string>OpenMyApp</string>
</array>
在我的主视图上我放了这个:
.onContinueUserActivity("OpenMyApp", perform: { activity in
print(#fileID, #function, "Executing: OpenMyApp")
})
但是,在我启动应用程序后,UserActivity 没有显示在快捷方式中。
我缺少什么?
我发现在 SwiftApp 中提供以下内容就足够了:
import Foundation
import CoreSpotlight
import CoreServices
import AppIntents
struct OpenAppIntent: AppIntent {
static var title: LocalizedStringResource = "Open App"
static var openAppWhenRun: Bool = true
static var isDiscoverable: Bool = true
@MainActor
func perform() async throws -> some IntentResult {
return .result()
}
}
并通过以下方式公开:
struct AppShortCuts: AppShortcutsProvider {
static var appShortcuts: [AppShortcut] {
AppShortcut(intent: OpenAppIntent(), phrases: ["Open \(.applicationName)"])
}
}
主要的“技巧”是为短语提供 (.applicationName)。否则在安装过程中它不会暴露于快捷方式!
您需要在活动上将
isEligibleForPrediction
设置为 true
。
代码示例:
.userActivity("viewing-photo", { activity in
activity.title = "View photo"
activity.isEligibleForSearch = true
}