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

App Intents再入門

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”, ) } }