Upgrade to Pro — share decks privately, control downloads, hide ads and more …

App Intents再入門

Sponsored · Your Podcast. Everywhere. Effortlessly. Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.

App Intents再入門

Avatar for 野瀬田 裕樹

野瀬田 裕樹

July 19, 2025
Tweet

More Decks by 野瀬田 裕樹

Other Decks in Technology

Transcript

  1. "QQ*OUFOUTͷ࣮૷ w "QQ*OUFOUϓϩτίϧͰඞཁͳ෼Λ࣮૷͢Δ͚ͩ protocol AppIntent : … { associatedtype PerformResult

    : IntentResult static var title: LocalizedStringResource { get } static var openAppWhenRun: Bool { get } static var supportedModes: IntentModes { get } static var authenticationPolicy: IntentAuthenticationPolicy { get } static var isDiscoverable: Bool { get } associatedtype SummaryContent : ParameterSummary static var parameterSummary: Self.SummaryContent { get } static var description: IntentDescription? { get } func perform() async throws -> Self.PerformResult
  2. "QQ*OUFOUͷϓϩύςΟ !BWBJMBCMF NBD04J04XBUDI04UW04WJTJPO04 EFQSFDBUFE  TUBUJDWBSPQFO"QQ8IFO3VO#PPM !BWBJMBCMF NBD04 J04 XBUDI04

    UW04   TUBUJDWBSTVQQPSUFE.PEFT*OUFOU.PEFT\HFU^ ɾ"QQ*OUFOUTͷ࣮ߦ࣌ʹΞϓϦΛىಈ͢Δඞཁ͕͋Δ͔Ͳ͏͔ w 04͔Β͸ΑΓࡉ͔͘ىಈΛ੍ޚͰ͖ΔΑ͏ʹͳͬͨ
  3. "QQ*OUFOUͷϓϩύςΟ !BWBJMBCMF NBD04 J04 XBUDI04 UW04   TUBUJDWBSJT%JTDPWFSBCMF#PPM w

    4IPSUDVUTͳͲͷγεςϜͷػೳ͕"QQ*OUFOUTΛݟ͚ͭΒΕΔ ͔Ͳ͏͔ w GBMTFʹ͢ΔͱΞϓϦ಺ͷϘλϯ΍8JEHFUͷϘλϯͷΑ͏ʹ໌ࣔ తͳ"QQ*OUFOUTݺͼग़͔͠͠Ͱ͖ͳ͘ͳΔ
  4. "QQ*OUFOUTͷ࣮૷ྫ struct SampleAppIntent: AppIntent { static let title: LocalizedStringResource =

    “ShortcutsΞϓϦͳͲͰλΠτϧͱͯ͠දࣔ͞ΕΔ" @Parameter(title: "ςετ༻ύϥϝʔλ", description: "ద౰ͳจࣈྻΛೖྗ") var text: String static var parameterSummary: some ParameterSummary { Summary("\(\.$text) ͕App Intentsʹ౉͞Ε·͢") } static var description: IntentDescription? { .init("આ໌༻ςΩετ", categoryName: "ΧςΰϦ໊", searchKeywords: ["ݕࡧ༻Ωʔϫʔυ"]) } @MainActor func perform() async throws -> some IntentResult { print("\(text) ͕౉͞Ε·ͨ͠") return .result() } }
  5. "QQ*OUFOUTͷ࣮૷ྫ struct SampleAppIntent: AppIntent { static let title: LocalizedStringResource =

    “ShortcutsΞϓϦͳͲͰλΠτϧͱͯ͠දࣔ͞ΕΔ" @Parameter(title: "ςετ༻ύϥϝʔλ", description: "ద౰ͳจࣈྻΛೖྗ") var text: String static var parameterSummary: some ParameterSummary { Summary("\(\.$text) ͕App Intentsʹ౉͞Ε·͢") } static var description: IntentDescription? { .init("આ໌༻ςΩετ", categoryName: "ΧςΰϦ໊", searchKeywords: ["ݕࡧ༻Ωʔϫʔυ"]) } @MainActor func perform() async throws -> some IntentResult { print("\(text) ͕౉͞Ε·ͨ͠") return .result() } }
  6. ࠷ۙͷΞοϓσʔτ ೥݄ w 4OJQQFU*OUFOUͷ௥Ճ ˠը໘্ʹ4OJQQFUͱ͍͏ܗͰදࣔ΋Մೳʹͳͬͨ w *OEFYFE"QQ&OUJUZͷ௥Ճ ˠ4QPUMJHIUͷΠϯσοΫε͕؆୯ʹͳͬͨ w *OUFOU7BMVF2VFSZ

    ˠ7JTVBM*OUFMMJHFODF౷߹ͷͨΊʹγεςϜ΁"QQ&OUJUZఏڙΛߦ͑ΔΑ͏ʹͳͬͨ w "QQ&OUJUZͷ/46TFS"DUJWJUZ΁ͷؔ࿈෇͚͕Մೳʹ ˠը໘্ͷίϯςϯπΛ4JSJ͔Βར༻͢Δࡍʹ"TTJTUBOU4DFNB͕ෆཁʹͳͬͨ
  7. "QQ*OUFOUT1BDLBHFͷ࣮૷ํ๏ // ΞϓϦ΍WidgetͷTargetͰ͜ͷΑ͏ͳstructΛ༻ҙ͢Δͱɺ // Framework಺ͷApp Intents͕औΓࠐ·ΕΔ struct SampleAppIntentsPackage: AppIntentsPackage {

    static var includedPackages: [any AppIntentsPackage.Type] { [SampleFrameworkAppIntentsPackage.self] } } // ΞϓϦ΍WidgetͳͲ͔Βར༻͞ΕΔFrameworkͱͯ͠ͷTarget಺Ͱ // ͜ΕͱAppIntentʹద߹ͨ͠structΛ࣮૷͢Δ // *OS26Ҏ্Ͱ͋Ε͹Swift Package಺Ͱͷఆٛʹ΋ରԠ public struct SampleFrameworkAppIntentsPackage: AppIntentsPackage {}
  8. "QQ4IPSUDVUT1SPWJEFSͷ࣮૷ํ๏ // SiriͷϑϨʔζͱ͔ΞϓϦ΍WidgetͷTargetͰ͜ͷΑ͏ͳstructΛ༻ҙ͢Δͱɺ // Framework಺ͷApp Intents͕औΓࠐ·ΕΔ nonisolated struct SampleAppShortcutsProvider: AppShortcutsProvider

    { @AppShortcutsBuilder static var appShortcuts: [AppShortcut] { AppShortcut( intent: SampleAppIntent(), phrases: [“\(.applicationName)ͰAppIntentΛ࣮ߦ͢Δ”], shortTitle: “γϣʔτΧοτΞϓϦͰλΠτϧͱͯ͠දࣔ͞ΕΔ”, systemImageName: “swift”, ) } }