Реализованные AppIntents iOS не отображаются в ярлыках

Я пытаюсь протестировать новый API AppIntents, который в настоящее время находится в бета-версии iOS16. Глядя на документацию, реализация кажется довольно простой, но после ее реализации я не вижу свой AppIntent в приложении «Ярлыки». Устройство работает под управлением iOS 16.0.

Вот как я реализовал AppIntent:

      
import AppIntents

struct DoSomethingIntent: AppIntent {
    
    static var title: LocalizedStringResource = "This will do something"
    
    static var description = IntentDescription("Does something")
    
    func perform() async throws -> some PerformResult {
        return .finished(value: "Done")
    }
}

Согласно документации, приложение «Ярлыки» должно найти мой AppIntent после установки моего приложения, но я вижу, что это не так. Кто-нибудь знает, чего не хватает в моей реализации?

3 ответа

API-интерфейсы AppIntents немного новы и имеют странное поведение, а документация очень плохая.

В моем случае я смог заставить их работать, добавив\(.applicationName)параметр фразы. Попробуй это:

      struct LibraryAppShorcuts: AppShortcutsProvider {
    @AppShortcutsBuilder static var appShortcuts: [AppShortcut] {
        AppShortcut(intent: DoSomethingIntent(), phrases: ["Do something with \(.applicationName)"])
    }
}
  • Сначала вам нужно выбрать Xcode-beta.app через xcode-select

  • Чистые производные данные

  • Убейте свое приложение и ярлык приложения

  • Добавьте библиотеку ярлыков в свой код

      struct LibraryAppShorcuts: AppShortcutsProvider {
    @AppShortcutsBuilder static var appShortcuts: [AppShortcut] {
        AppShortcut(intent: DoSomethingIntent(), phrases: ["My something phrase"])
    }
}
  • Строить

API очень глючный. Используйте старый SiriKitIntents.intentdefinitionфайл (CMD+N для его создания), чтобы настроить свои намерения с помощью специального пользовательского интерфейса, затем выберите опциюConvert to App Intentгенерировать намерения приложения с помощью реализации, которая действительно работает, и настраивать ее в соответствии с вашими потребностями.

Затем в поставщике ярлыков используйте эти намерения и не забудьте интерполировать фразы с помощью.applicationNameв противном случае он не появится в приложении «Ярлыки».

      struct Shortcuts: AppShortcutsProvider {

static var shortcutTileColor: ShortcutTileColor = .navy

static var appShortcuts: [AppShortcut] {
    AppShortcut(intent: SomeIntent(),
                phrases: ["Do something with \(.applicationName)"],
                shortTitle: "Just do it",
                systemImageName: "magnifyingglass")
}

}

Другие вопросы по тегам