рд╕рд┐рд░реА рдХреНрд╡рд┐рдХ рдХрдорд╛рдВрдбреНрд╕


WWDC 2018 рдореЗрдВ рдкреЗрд╢ рдХрд┐рдП рдЧрдП рдЙрдкрдпреЛрдЧреА (рдореЗрд░реА рд░рд╛рдп рдореЗрдВ) iOS 12 рдореЗрдВ рд╕реЗ рдПрдХ рд╕рд┐рд░реА рд╢реЙрд░реНрдЯрдХрдЯ рд╣реИ ред


рд╢реЙрд░реНрдЯрдХрдЯ ( рд╢реЙрд░реНрдЯрдХрдЯ ) - рдПрдХ рддреНрд╡рд░рд┐рдд рдХрдорд╛рдВрдб, рдорд╛рдирдХ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рджрд░рдХрд┐рдирд╛рд░ рдХрд░рдХреЗ рдХрд┐рд╕реА рднреА рдХрд╛рд░реНрдп рдХреЛ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рддрд░реАрдХрд╛ред


рдЕрдкрдиреЗ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдореЗрдВ, рдЖрдк рдХреБрдЫ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рд╢реЙрд░реНрдЯрдХрдЯ рд╕реНрдиреИрдк рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ рд╕реАрдЦрдирд╛ рдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХрдм рдФрд░ рдХреИрд╕реЗ рдЙрдиреНрд╣реЗрдВ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд░рддрд╛ рд╣реИ, рд╕рд┐рд░реА рд╕реНрдорд╛рд░реНрдЯ рддрд░реАрдХреЗ рд╕реЗ, рд╕рд╣реА рд╕рдордп рдФрд░ рд╕реНрдерд╛рди рдкрд░ рд╢реБрд░реВ рдХрд░рддрд╛ рд╣реИ, рдЙрд╕реЗ рдпреЗ рд╢реЙрд░реНрдЯрдХрдЯ рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдФрд░, рд╕рдмрд╕реЗ рдЕрдЪреНрдЫреА рдмрд╛рдд, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЙрдиреНрд╣реЗрдВ рд╡рд╛рдХреНрдпрд╛рдВрд╢реЛрдВ рдХреЗ рд╕рд╛рде рдХреЙрд▓ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдЧрд╛ рдЬреЛ рд╡рд╣ рдЙрдирд╕реЗ рд╕рдВрд▓рдЧреНрди рдХрд░реЗрдЧрд╛! рдмрд┐рд▓реНрд▓реА рдХреЗ рдиреАрдЪреЗ рдЕрдзрд┐рдХред


рдпрд╣ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ


рд╣рдо рдЙрди рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдЬреЛ рдХреБрдЫ рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЗ рд╕рд╛рде, рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рд╢реЙрд░реНрдЯрдХрдЯ рдмрдирд╛рддреЗ рдФрд░ рд╡рд┐рддрд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВред


рдЖрдк рдЗрди рд╢реЙрд░реНрдЯрдХрдЯ рдХреЛ рд╕реЗрдЯрд┐рдВрдЧ тЖТ рд╕рд┐рд░реА рдФрд░ рд╕рд░реНрдЪ рдореЗрдВ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВред

рдКрдкрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╕реНрдХреНрд░реАрдирд╢реЙрдЯ рдЕрдВрддрд┐рдо рддреАрди рд╢реЙрд░реНрдЯрдХрдЯ рджрд┐рдЦрд╛рддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рд╕рд┐рд╕реНрдЯрдо рдиреЗ рд╡рд┐рднрд┐рдиреНрди рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рд╕реЗ рдкрдХрдбрд╝рд╛ рд╣реИред рдпрджрд┐ рд╣рдо "рдЕрдзрд┐рдХ рд╢реЙрд░реНрдЯрдХрдЯ" рдмрдЯрди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рдкреНрд░рддреНрдпреЗрдХ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рджреНрд╡рд╛рд░рд╛ рд╕рд┐рд╕реНрдЯрдо рдХреЛ рджрд┐рдП рдЧрдП рд╕рднреА рд╢реЙрд░реНрдЯрдХрдЯ рджреЗрдЦреЗрдВрдЧреЗред


рд╢реЙрд░реНрдЯрдХрдЯ рдирд┐рд░реНрдорд╛рдг рдХреЛрдб рдореЗрдВ рдХреБрдЫ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреЗ рд╕рд╛рде, рд╕рд┐рд░реА рдЗрди рд╢реЙрд░реНрдЯрдХрдЯ рдХреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдПрдХ рд▓реЙрдХ рд╕реНрдХреНрд░реАрди рдкрд░, рд╕реВрдЪрдирд╛ рдХреЗрдВрджреНрд░ рдФрд░ рдЦреЛрдЬ рдореЗрдВ рдкреЗрд╢ рдХрд░реЗрдЧрд╛, рдЗрд╕ рдкрд░ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдХрд░рддреЗ рд╣реБрдП рдХрд┐ рд╣рдо рдЗрди рдХреНрд░рд┐рдпрд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рддрдиреА рдмрд╛рд░, рд╕рдкреНрддрд╛рд╣ рдХреЗ рдХрд┐рд╕ рджрд┐рди, рдХрд╣рд╛рдБ рдФрд░ рдЕрдиреНрдп рдХрд╛рд░рдХреЛрдВ рдХреЗ рд▓рд┐рдП рдХрд░рддреЗ рд╣реИрдВред


рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрджрд┐ рд╢реБрдХреНрд░рд╡рд╛рд░ рдХреА рд░рд╛рдд рдЖрдк рдЖрдорддреМрд░ рдкрд░ рдПрдЯреАрдПрдо рдХреА рддрд▓рд╛рд╢ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдкреНрд░рд╢рд┐рдХреНрд╖рд┐рдд рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж, рд╕рд┐рд░реА рдЖрдкрдХреЛ рд╢реБрдХреНрд░рд╡рд╛рд░ рдХреА рд╢рд╛рдо рдХреЛ рдЗрд╕ рдХреНрд░рд┐рдпрд╛ рдХреЗ рд╕рд╛рде рдПрдХ рд╢реЙрд░реНрдЯрдХрдЯ рдкреНрд░рджрд╛рди рдХрд░реЗрдЧрд╛ред



рдпрджрд┐ рд╣рдо " + " рдЖрдЗрдХрди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рдкреНрд░рддреНрдпреЗрдХ рд╢реЙрд░реНрдЯрдХрдЯ рдореЗрдВ рдЕрдкрдиреА рдЖрд╡рд╛рдЬ рдХрдорд╛рдВрдб рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред


рд╣рдо рдПрдХ рд╡реЙрдЗрд╕ рдХрдорд╛рдВрдб рдХрд╣рддреЗ рд╣реИрдВ, "рдбрди" рджрдмрд╛рдПрдВ, рдФрд░ рдЕрдм рд╣рдо рд╕рд┐рд░реА рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╡реЙрдпрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╢реЙрд░реНрдЯрдХрдЯ рдХреЗ рдкреАрдЫреЗ рдХреА рдХреНрд░рд┐рдпрд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рд╣реИ рдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕рд┐рд░реА рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЖрдкрдХреЗ рдЖрд╡реЗрджрди рдХреА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЛ рд╕реНрд╡рдпрдВ рд╣реА рдЦреЛрд▓ рджреЗрдЧрд╛ред рд╡рд╛рдХреНрдпрд╛рдВрд╢ рдХреЗ рд╕рд╛рде рд╢реЙрд░реНрдЯрдХрдЯ "рдореЗрд░реЗ рд╢реЙрд░реНрдЯрдХрдЯ" рдореЗрдВ рд╕рдВрд░рдХреНрд╖рд┐рдд рд╣реИред


рд╢реЙрд░реНрдЯрдХрдЯ рдмрдирд╛рдирд╛


рд╡рд┐рдХрд╛рд╕ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ Xcode 10 рдФрд░ iOS 12 рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред рд▓реЗрдЦрди рдХреЗ рд╕рдордп, рджреЛрдиреЛрдВ рдмреАрдЯрд╛ рдЪрд░рдг рдореЗрдВ рд╣реИрдВред


рдПрдХ рд╢реЙрд░реНрдЯрдХрдЯ NSUserActivity рдорд╛рдзреНрдпрдо рд╕реЗ рдпрд╛ Intent рдорд╛рдзреНрдпрдо рд╕реЗ рдмрдирд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред


рдкрд╣рд▓рд╛ рдорд╛рдорд▓рд╛:


рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╢реЙрд░реНрдЯрдХрдЯ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рд╣рдорд╛рд░реЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рдорд╛рдкрджрдВрдбреЛрдВ ( NSUserActivity ) рдХреЗ рд╕рд╛рде рдХрдорд╛рдВрдб рдХреЛ рдкрд╛рд╕ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдпрд╣ рддрдп рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдЗрд╕ рдХрдорд╛рдВрдб рдХреЛ рдХреИрд╕реЗ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдП (рд╡рд░реНрддрдорд╛рди USD рджрд░ рдХреА рд╡рд┐рдВрдбреЛ рдЦреЛрд▓реЗрдВ, рдпрд╛ рд╣рдорд╛рд░реЗ рдкрд╕рдВрджреАрджрд╛ рдкрд┐рдЬреНрдЬрд╛ рдХреА рдСрд░реНрдбрд░ рд╡рд┐рдВрдбреЛ)ред рдпрд╣ рдЕрдЪреНрдЫрд╛ рдкреБрд░рд╛рдирд╛ рд╕реНрдкреЙрдЯрд▓рд╛рдЗрдЯ рд╢реЙрд░реНрдЯрдХрдЯ рд╣реИ рдЬрд┐рд╕реЗ рд╣рдо рд╕рднреА рдЬрд╛рдирддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╕реНрдорд╛рд░реНрдЯрд▓реА рд╕рд┐рд░реА рджреНрд╡рд╛рд░рд╛ рдкреЗрд╢ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред


рджреВрд╕рд░рд╛ рдорд╛рдорд▓рд╛:


Intent рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдмрдирд╛рдП рдЧрдП рд╢реЙрд░реНрдЯрдХрдЯ рдЕрдзрд┐рдХ рджрд┐рд▓рдЪрд╕реНрдк рд╣реИрдВ - рд╡реЗ рдЖрдкрдХреЛ рдЕрдкрдиреЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рд▓реЙрдиреНрдЪ рдХрд┐рдП рдмрд┐рдирд╛ рд╕рд┐рд░реА рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдореЗрдВ рддреБрд░рдВрдд рдПрдХ рдХрдорд╛рдВрдб рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреЗ рд╣реИрдВред рдкрд╣рд▓реЗ, Intent рдХрд╛ рд╕реЗрдЯ Apple рдХреЗ рд▓рд┐рдП рдХрдард┐рди рдерд╛: рдзрди рд╣рд╕реНрддрд╛рдВрддрд░рд┐рдд рдХрд░рдирд╛, рд╕рдВрджреЗрд╢ рднреЗрдЬрдирд╛ рдФрд░ рдЕрдиреНрдп ред рдЕрдм, рд╣рдо рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЗ рд▓рд┐рдП рд╣рдорд╛рд░реЗ Intent рдмрдирд╛рдиреЗ рдХрд╛ рдЕрд╡рд╕рд░ рд╣реИ!


рднрд▓реЗ рд╣реА рд╢реЙрд░реНрдЯрдХрдЯ рдХреИрд╕реЗ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рдерд╛, рдпрд╣ рдЬреАрд╡рди рдЪрдХреНрд░ рдХреЗ 3 рдЪрд░рдгреЛрдВ рд╕реЗ рдЧреБрдЬрд░рддрд╛ рд╣реИ:


  1. рдШреЛрд╖рдгрд╛ ( рдкрд░рд┐рднрд╛рд╖рд┐рдд )
  2. рд╕рд┐рд╕реНрдЯрдо рдХреЛ рдбрд┐рд▓реАрд╡рд░реА ( рджрд╛рди )
  3. рдЖрд╡реЗрджрди рджреНрд╡рд╛рд░рд╛ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг ( рд╕рдВрднрд╛рд▓ )


рдореЗрд░реЗ рд╢реЛрдз рд╕реЗ рдкрддрд╛ рдЪрд▓рд╛ рд╣реИ рдХрд┐ рдПрдХ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ 20 рд╕реЗ рдЕрдзрд┐рдХ рд╢реЙрд░реНрдЯрдХрдЯ рдирд╣реАрдВ рджреЗ рд╕рдХрддрд╛ рд╣реИред


рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ рд╣рдо рдЗрд╕ рдмрд╛рдд рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВрдЧреЗ рдХрд┐ рд╣рдорд╛рд░реЗ рдЖрд╡реЗрджрди рдХреЛ рд╢реЙрд░реНрдЯрдХрдЯ рдмрдирд╛рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдХреИрд╕реЗ рджреА рдЬрд╛рдП рдФрд░ рдЗрд╕рдХреЗ рдЕрдВрджрд░ рдЙрдирдХреЗ рд╕рд╛рде рдХреИрд╕реЗ рдХрд╛рдо рдХрд┐рдпрд╛ рдЬрд╛рдПред


NSUserActivity рдорд╛рдзреНрдпрдо рд╕реЗ рд╢реЙрд░реНрдЯрдХрдЯ рдмрдирд╛рдирд╛


рдЖрдЗрдП NSUserActivity рдорд╛рдзреНрдпрдо рд╕реЗ NSUserActivity рд╡рд╛рд▓реЗ рдкрд╣рд▓реЗ, рд╕рд░рд▓ рдкреНрд░рдХрд╛рд░ рдХреЗ рд╢реЙрд░реНрдЯрдХрдЯ рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░реЗрдВред


рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдореЛрдмрд╛рдЗрд▓ рдмреИрдВрдХ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдЯреАрдПрдо рдЦреЛрдЬ рд╕реНрдХреНрд░реАрди рд╣реИ рдФрд░ рдореИрдВ рдЕрдХреНрд╕рд░ рдЙрдирдХреЗ рд▓рд┐рдП рджреЗрдЦрддрд╛ рд╣реВрдВред рдПрдЯреАрдПрдо рдХрд╛рд░реНрдб рдХреЗ рд╕рд╛рде рд╕реНрдХреНрд░реАрди рдкрд░ рдЖрдиреЗ рдХреЗ рд▓рд┐рдП, рдореБрдЭреЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд▓реЙрдиреНрдЪ рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рдЯреИрдм рдореЗрдВ "рдЕрдзрд┐рдХ" рдЯреИрдм рдкрд░ рдЬрд╛рдПрдВ, "рдЬрд╛рдирдХрд╛рд░реА" рдЕрдиреБрднрд╛рдЧ рдЪреБрдиреЗрдВ рдФрд░ рд╡рд╣рд╛рдВ "рдПрдЯреАрдПрдо" рдмрдЯрди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВред
рдпрджрд┐ рд╣рдо рдПрдХ рд╢реЙрд░реНрдЯрдХрдЯ рдмрдирд╛рддреЗ рд╣реИрдВ рдЬреЛ рддреБрд░рдВрдд рдЗрд╕ рд╕реНрдХреНрд░реАрди рдкрд░ рд▓реЗ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЗрд╕реЗ рдПрдХ рд╕реНрдкрд░реНрд╢ рдХреЗ рд╕рд╛рде рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХреЗрдЧрд╛, рдЬрдм рд╕рд┐рд░реА рдЙрд╕реЗ рдЗрд╕реЗ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд▓реЙрдХ рд╕реНрдХреНрд░реАрди рдкрд░ред


рд╢реЙрд░реНрдЯрдХрдЯ рдШреЛрд╖рд┐рдд рдХрд░реЗрдВ


рдкрд╣рд▓рд╛ рдХрджрдо рд╣рдорд╛рд░реА NSUserActivity рддрд░рд╣ рдПрдХ рдкреНрд░рдХрд╛рд░ рдХреА рдШреЛрд╖рдгрд╛ рдХрд░рдирд╛ рд╣реИ (рд╣рдо рдХрд╣ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рдЗрд╕рдХреА рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рд╣реИ) info.playlist рдореЗрдВ :


 <key>NSUserActivityTypes</key> <array> <string>ru.tinkoff.demo.show-cashMachine</string> </array> 

рдХреА рдШреЛрд╖рдгрд╛ рдХреАред


рд╢реЙрд░реНрдЯрдХрдЯ рдХреЛ рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рд╡рд┐рддрд░рд┐рдд рдХрд░реЗрдВ (рджрд╛рди рдХрд░реЗрдВ)


рдШреЛрд╖рдгрд╛ рдХреЗ рдмрд╛рдж, рд╣рдо рдЕрдкрдиреЗ рдЖрд╡реЗрджрди рдХреЗ рдХреЛрдб рдореЗрдВ NSUserActivity рдХреЛ рдЙрд╕ рдкреНрд░рдХрд╛рд░ рд╕реЗ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрд┐рд╕реЗ рд╣рдо рд╕реВрдЪрдирд╛ рдкрдЯ рдореЗрдВ рдКрдкрд░ рд╕реЗрдЯ рдХрд░рддреЗ рд╣реИрдВ :


 let activity = NSUserActivity(activityType: "ru.tinkoff.demo.show-cashMachine") 

рдЧрддрд┐рд╡рд┐рдзрд┐ рдХреЛ рд╕рд┐рд╕реНрдЯрдо рдХреЗ рд╢реЙрд░реНрдЯрдХрдЯ рдХреА рд╕реВрдЪреА рдореЗрдВ рд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдЗрд╕реЗ title рд╕реЗрдЯ рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рдФрд░ isEligibleForSearch рдкреНрд░реЙрдкрд░реНрдЯреА рдХреЛ true рд╕реЗрдЯ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рд╢реЙрд░реНрдЯрдХрдЯ рдореЗрдВ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдиреНрдп рдЧреБрдг рдЖрд╡рд╢реНрдпрдХ рдирд╣реАрдВ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЙрдирдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рд╢реЙрд░реНрдЯрдХрдЯ рдХреЛ рдЕрдзрд┐рдХ рдкрдардиреАрдп рдФрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рдЕрдиреБрдХреВрд▓ рдмрдирд╛рддреА рд╣реИред


  //   (     ,   ) activity.title = " " if #available(iOS 12.0, *) { // ,             activity.suggestedInvocationPhrase = "  " //           activity.isEligibleForPrediction = true // (     ,   ) activity.isEligibleForSearch = true } //       let attributes = CSSearchableItemAttributeSet(itemContentType: "NSUserActivity.searchableItemContentType") ///    if let image = UIImage(named: "siriAtmIcon") { attributes.thumbnailData = UIImagePNGRepresentation(image) } ///   attributes.contentDescription = "     " ///     activity.contentAttributeSet = attributes 

рдЖрдЧ! NSUserActivity рд╣реИ, рдЗрд╕реЗ рд╕рд┐рд╕реНрдЯрдо рддрдХ рдкрд╣реБрдВрдЪрд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдпрд╣ рдЖрдЦрд┐рд░реА рдХрджрдо рдЙрдард╛рдирд╛ рдмрд╛рдХреА рд╣реИред


ViewConroller рдкрд╛рд╕ рдПрдХ userActivity рд╕рдВрдкрддреНрддрд┐ рдЧреБрдг рд╣реИ, рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рд╣рдореЗрдВ рдКрдкрд░ рдмрдирд╛рдИ рдЧрдИ activity рдХреЛ рдЕрд╕рд╛рдЗрди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:


 self.userActivity = activity 

рдЬреИрд╕реЗ рд╣реА рдЗрд╕ рд▓рд╛рдЗрди рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕ рдЧрддрд┐рд╡рд┐рдзрд┐ рд╕реЗ рдПрдХ рд╢реЙрд░реНрдЯрдХрдЯ рдмрдирд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдЗрд╕реЗ рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдФрд░ рд╕рд┐рд░реА рд╕реЗрдЯрд┐рдВрдЧреНрд╕ ( рд╕реЗрдЯрд┐рдВрдЧреНрд╕ тЖТ рд╕рд┐рд░реА рдПрдВрдб рд╕рд░реНрдЪ ) рдореЗрдВ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдлрд┐рд░ рд╕рд┐рд░реА рдЗрд╕реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдкреЗрд╢ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдЧрд╛, рдФрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЙрд╕реЗ рдЕрдкрдирд╛ рд╡реЙрдЗрд╕ рдХрдорд╛рдВрдб рдЕрд╕рд╛рдЗрди рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдЧрд╛ред


рдиреЛрдЯ : Apple рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг рдХрд╣рддрд╛ рд╣реИ рдХрд┐ рджреГрд╢реНрдп рдирд┐рдпрдВрддреНрд░рдХ рдХреЛ рдЧрддрд┐рд╡рд┐рдзрд┐ рдЕрд╕рд╛рдЗрди рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп, рдпрд╣ becomeCurrent() рдкрд░ becomeCurrent() рд╡рд┐рдзрд┐ рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдЗрд╕ рдХреНрд░рд┐рдпрд╛ рдиреЗ рдореЗрд░реЗ рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рдЧрддрд┐рд╡рд┐рдзрд┐ рдирд╣реАрдВ рджреА рдФрд░ рд╢реЙрд░реНрдЯрдХрдЯ рд╕реВрдЪреА рдореЗрдВ рджрд┐рдЦрд╛рдИ рдирд╣реАрдВ рджрд┐рдпрд╛


рдЗрд╕рдХреЗ рдмрд╛рдж, рдпреВрдЬрд░ рдПрдХреНрдЯрд┐рд╡рд┐рдЯреА рдСрдмреНрдЬреЗрдХреНрдЯ рдкрд░ рдореМрдЬреВрдж becomeCurrent() рд╡рд┐рдзрд┐ рдХреЛ рд╡рд░реНрддрдорд╛рди рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд┐рд╣реНрдирд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЙрд▓ рдХрд░реЗрдВ, рдЬреЛ рдЧрддрд┐рд╡рд┐рдзрд┐ рдХреЛ рд╕рд┐рд░реА рдХреЛ рджрд╛рди рдХрд░рддрд╛ рд╣реИред рд╡реИрдХрд▓реНрдкрд┐рдХ рд░реВрдк рд╕реЗ, рдЖрдк рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдПрдХ UIViewController рдпрд╛ UIResponder рдСрдмреНрдЬреЗрдХреНрдЯ рд╕реЗ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреЛ рдЧрддрд┐рд╡рд┐рдзрд┐ рдХреЛ рд╡рд░реНрддрдорд╛рди рдХреЗ рд░реВрдк рдореЗрдВ рднреА рдЪрд┐рд╣реНрдирд┐рдд рдХрд░рддрд╛ рд╣реИред

рдпрд╣ рдЬрд╛рдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рд╕рдм рдХреБрдЫ рдХрд╛рдо рдХрд┐рдпрд╛ рд╣реИ, рд╕реЗрдЯрд┐рдВрдЧреНрд╕> рд╕рд┐рд░реА рдЦреЛрд▓реЗрдВ рдФрд░ рдЦреЛрдЬреЗрдВ - рд╣рдорд╛рд░реА рдЧрддрд┐рд╡рд┐рдзрд┐ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рд╢реЙрд░реНрдЯрдХрдЯ рд╕реВрдЪреА рдореЗрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред


рдЕрдиреБрдкреНрд░рдпреЛрдЧ (рд╕рдВрднрд╛рд▓) рджреНрд╡рд╛рд░рд╛ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рд╢реЙрд░реНрдЯрдХрдЯ


рдЬрдм рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЕрдзрд┐рд╕реВрдЪрдирд╛ рдХреЗрдВрджреНрд░ рд╕реЗ рд╢реЙрд░реНрдЯрдХрдЯ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдиреЗрд╡рд┐рдЧреЗрдЯ рдХрд░рддрд╛ рд╣реИ рдпрд╛ рдЖрд╡рд╛рдЬ рд╕реЗ рдЗрд╕реЗ рд╕рдХреНрд░рд┐рдп рдХрд░рддрд╛ рд╣реИ, рддреЛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ, рдФрд░ рд╣рдореЗрдВ рдЗрд╕ рд╢реЙрд░реНрдЯрдХрдЯ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред


AppDelegate рдПрдХ рд╡рд┐рдзрд┐ рд╕реЗ рд╣рдорд╛рд░реЗ рд▓рд┐рдП activity рдбрд╛рд▓реА activity :


 func application(_ application: UIApplication, continue userActivity: NSUserActivity, restorationHandler: @escaping ([UIUserActivityRestoring]?) -> Void) -> Bool { if userActivity.activityType == "ru.tinkoff.demo.show-cashMachine" { //   ,     handleShowCashMachineActivity() return true } return false } 

рдХреБрд▓ рдорд┐рд▓рд╛рдХрд░


рдПрдХ NSUserActivity NSUserActivity рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ:


  1. NSUserActivity рдореЗрдВ NSUserActivity рдХрд╛ рдкреНрд░рдХрд╛рд░ (рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛) рдШреЛрд╖рд┐рдд рдХрд░реЗрдВред
  2. рд╣рдо рдХреЛрдб рдореЗрдВ NSUserActivity рдмрдирд╛рддреЗ рд╣реИрдВ рдФрд░ рд╣рдо рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рддреЗ рд╣реИрдВ
  3. viewController' ред

рдХрд┐рд╕реА рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╕реЗ рд╡реЙрдЗрд╕ рдХрдорд╛рдВрдб рдмрдирд╛рдирд╛


рдЗрд╕рд▓рд┐рдП, рдпрджрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕реЗрдЯрд┐рдВрдЧреНрд╕> рд╕рд┐рд░реА рдЦреЛрд▓рддрд╛ рд╣реИ рдФрд░ рдЦреЛрдЬ рдХрд░рддрд╛ рд╣реИ , рддреЛ рд╡рд╣ рдЕрдкрдиреЗ рд╢реЙрд░реНрдЯрдХрдЯ рдХреА рдПрдХ рд╕реВрдЪреА рджреЗрдЦреЗрдЧрд╛, рдЬреЛ рдХрд┐ рд╣рдорд╛рд░реЗ рд╕рд╣рд┐рдд рд╡рд┐рднрд┐рдиреНрди рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рджреНрд╡рд╛рд░рд╛ рдмрдирд╛рдИ рдЧрдИ рдереАред " + " рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рдХреЗ, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХрд┐рд╕реА рднреА рд╡реЙрдпрд╕ рдХрдорд╛рдВрдб рдХреЛ рдмрдирд╛ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ рдЪрдпрдирд┐рдд рд╢реЙрд░реНрдЯрдХрдЯ рдХреЗ рд╕рд╛рде рдЬреЛрдбрд╝ рд╕рдХрддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рд╣рд░ рдмрд╛рд░ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдореЗрдВ рдкреНрд░рд╡реЗрд╢ рдХрд░рдирд╛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рд▓рд┐рдП рдЕрд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИ, рдХрдИ рдХреЛ рдЗрд╕ рд╕рдВрднрд╛рд╡рдирд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рднреА рдкрддрд╛ рдирд╣реАрдВ рд╣реИред


рдпрд╣ рдЕрдЪреНрдЫрд╛ рд╣реИ рдХрд┐ рдЖрдк рд╕реАрдзреЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рдЕрдВрджрд░ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡реЙрдЗрд╕ рдХрдорд╛рдВрдб рд╕рдВрд▓рдЧреНрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред


рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рдХреЛрдИ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреБрдЫ рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХрд░рддрд╛ рд╣реИ, рддреЛ рдЙрд╕реЗ рд╕рд┐рд╕реНрдЯрдо рдкрд░ рдкрд╣реБрдВрдЪрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд╡рд╣ рдЙрд╕реЗ рдмрдЪрд╛рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реИред рд╣рдо рдЕрдкрдиреЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреА рд╕реНрдХреНрд░реАрди рдкрд░ рдмрдЯрди " рдПрдб рдПрдХреНрд╢рди рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ" (рдЖрдк рдирд╛рдо рдФрд░ рдмрдЯрди рдХреЛ рдЕрдкрдиреА рдЗрдЪреНрдЫрд╛рдиреБрд╕рд╛рд░ рдЦреАрдВрдЪ рд╕рдХрддреЗ рд╣реИрдВ) рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ, рдлрд┐рд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЙрд╕ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рдХреЗ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреЗ рдмрд┐рдирд╛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рднреАрддрд░ рд╕реЗ рдЗрд╕ рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХреЛ рд╡реЙрдпрд╕ рдХрдорд╛рдВрдб рд╕реЗ рдЬреЛрдбрд╝ рд╕рдХреЗрдВрдЧреЗред


рдмрдЯрди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рдХреЗ, рдЖрдкрдХреЛ рд╕рд┐рд░реА INUIAddVoiceShortcutViewController рдореЗрдВ рд╢реЙрд░реНрдЯрдХрдЯ рдХреЗ рд▓рд┐рдП рд╡реЙрдпрд╕ рдХрдорд╛рдВрдб рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрдХреНрд░реАрди рдХреЛ INUIAddVoiceShortcutViewController , рдпрд╛ рдпрджрд┐ рдХреЛрдИ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реЛ рддреЛ рд╡реЙрдпрд╕ рдХрдорд╛рдВрдб INUIEditVoiceShortcutViewController рд╕рдВрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрдХреНрд░реАрдиред рдЗрд╕ рддрд░рд╣ рдХреЗ рдПрдХ рдмрдЯрди рдХреА рдЕрдкреНрд░рд╛рдкреНрдп action рд▓рдЧрднрдЧ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реЛрдЧреА:


  @IBAction func addToSiriAction() { // 1.   ,       INVoiceShortcutCenter.shared.getAllVoiceShortcuts { (shortcuts, error) in guard error == nil, let shortcuts = shortcuts else { // TODO: Handle error return } // 2.     ,      let donatedShortcut: INVoiceShortcut? = shortcuts.first(where: { (shorcut) -> Bool in return shorcut.__shortcut.userActivity?.activityType == "com.ba" }) if let shortcut = donatedShortcut { // 3.     -     . //         let editVoiceShortcutViewController = INUIEditVoiceShortcutViewController(voiceShortcut: shortcut) editVoiceShortcutViewController.delegate = self self.present(editVoiceShortcutViewController, animated: true, completion: nil) } else { // 4.         let shortcut = INShortcut(userActivity: self.userActivity!) let addVoiceShortcutViewController = INUIAddVoiceShortcutViewController(shortcut: shortcut) addVoiceShortcutViewController.delegate = self } } } 

рдЗрд╕рд▓рд┐рдП, рд╕рд┐рд░реА рд╢реЙрд░реНрдЯрдХрдЯ рд▓реБрдХ рдХреЗ рд▓рд┐рдП рд╡реЙрдпрд╕ рдХрдорд╛рдВрдб рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдФрд░ рд╕рдВрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрдХреНрд░реАрди:



рд╣рдореЗрдВ рдЗрди viewControllers рдХреЗ рдкреНрд░рддрд┐рдирд┐рдзрд┐ рддрд░реАрдХреЛрдВ рдХреЛ рднреА рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЬрд┐рд╕рдореЗрдВ рдЙрдиреНрд╣реЗрдВ dismiss(animated: true, completion: nil) рдХреЛ рдЫрд┐рдкрд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ dismiss(animated: true, completion: nil) рдФрд░, рдпрджрд┐ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ, рддреЛ рд╡рд░реНрддрдорд╛рди рд╕реНрдХреНрд░реАрди рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░реЗрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрджрд┐ рд╕реНрдХреНрд░реАрди рдкрд░ рдкрд╣рд▓реЗ "рд╡реЙрдпрд╕ рдХрдорд╛рдВрдб рдЬреЛрдбрд╝реЗрдВ" рдмрдЯрди рдерд╛, рддреЛ рд╡реЙрдпрд╕ рдХрдорд╛рдВрдб рдЬреЛрдбрд╝рдиреЗ рдХреЗ рдмрд╛рдж рдпрд╣ рдмрдЯрди рдпрд╛ рддреЛ рдЧрд╛рдпрдм рд╣реЛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдпрд╛ "рд╡реЙрдпрд╕ рдХрдорд╛рдВрдб рдХреЛ рдПрдбрд┐рдЯ" рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред


рдЖрд╢рдп рд╢реЙрд░реНрдЯрдХрдЯ


рдЕрдм рддрдХ, рд╣рдордиреЗ рдХреЗрд╡рд▓ рд╢реЙрд░реНрдЯрдХрдЯреНрд╕ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХреА рд╣реИ рдЬреЛ рдПрдХ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдЦреЛрд▓рддреЗ рд╣реИрдВ рдФрд░ NSUserActivity рдХреЛ рд╡рд╣рд╛рдВ NSUserActivity рдбреЗрдЯрд╛ рдкрд╛рд╕ NSUserActivity ред


рд▓реЗрдХрд┐рди Intent рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдмрдирд╛рдП рдЧрдП рд╢реЙрд░реНрдЯрдХрдЯреНрд╕ рдкрд░ рд╡рд╛рдкрд╕ рдЬрд╛рдПрдВ, рдЬреЛ рдЖрдкрдХреЛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдЦреЛрд▓реЗ рдмрд┐рдирд╛ рдХреБрдЫ рдХрд╛рд░реНрдп рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреЗ рд╣реИрдВред рдпрд╣рд╛рдВ рдорд╕реНрддреА рд╢реБрд░реВ рд╣реЛрддреА рд╣реИред


рдХрд▓реНрдкрдирд╛ рдХреАрдЬрд┐рдП рдХрд┐ рдПрдХ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЕрдкрдиреЗ рдкрд╕рдВрджреАрджрд╛ рдкрд┐рдЬреНрдЬрд╛ рдХрд╛ рдЖрджреЗрд╢ рджреЗрддрд╛ рд╣реИред рд╡рд╣ рдЬрдм рдЪрд╛рд╣реЗ, рдХрдИ рдмрд╛рд░ рдпрд╣ рдЖрджреЗрд╢ рджреЗрдЧрд╛ рдФрд░ рдЙрд╕рдиреЗ рдЗрд╕ рдкрд┐рдЬреНрдЬрд╛ рдХреЗ рд╢реЙрд░реНрдЯрдХрдЯ рдореЗрдВ рдПрдХ рдЖрд╡рд╛рдЬ рдХрдорд╛рдВрдб рднреА рдЬреЛрдбрд╝ рджреА - рдФрд░ рдпрд╣ рдЙрд╕рдХреЗ рдЬреАрд╡рди рдХреЛ рд╕рд░рд▓ рдмрдирд╛рддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рд╣рдо рдЙрд╕рдХреЗ рд▓рд┐рдП рдФрд░ рдЕрдзрд┐рдХ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ - рд╣рдо рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рд╕рд┐рд░реА рд╡реЙрдпрд╕ рдХрдорд╛рдВрдб рджреЗрдХрд░, рд╕рд┐рд╕реНрдЯрдо рдЗрд╕реЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рдирд╣реАрдВ рдлреЗрдВрдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╕рд┐рд░реА рдЗрдВрдЯрд░рдлреЗрд╕ рдореЗрдВ рддреБрд░рдВрдд рдСрд░реНрдбрд░ рдХреА рдЬрд╛рдирдХрд╛рд░реА рдФрд░ рдСрд░реНрдбрд░ рдкрд┐рдЬреНрдЬрд╛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИ! рдпрд╣ рдХреЗрд╡рд▓ рдорд╛рдорд▓рд╛ рд╣реИ рдЬрдм рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдХреБрдЫ рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рд╕реНрд╡рдпрдВ рдЦреЛрд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИред


рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдкрд░ рдЬрд╛рдПрдВ, рдореБрдЦреНрдп рд▓рдХреНрд╖реНрдп, Capabilities рдЯреИрдм рдХрд╛ рдЪрдпрди рдХрд░реЗрдВ рдФрд░ рд╕рд┐рд░реА рддрдХ рдкрд╣реБрдВрдЪ рд╕рдХреНрд╖рдо рдХрд░реЗрдВред


рд╣рдорд╛рд░рд╛ рдЖрд╡реЗрджрди рд╕рд┐рд░реА рдХреЗ рд╕рд╛рде рдмрд╛рддрдЪреАрдд рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдЖрд╡реЗрджрди рдХреЗ рдореБрдЦреНрдп рдХреЛрдб рдореЗрдВ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдПрдХ рдЕрд▓рдЧ рд▓рдХреНрд╖реНрдп-рд╡рд┐рд╕реНрддрд╛рд░ рдореЗрдВ рдЕрдВрддрд░ рд╣реИ


рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдпрд╣ рд▓рдХреНрд╖реНрдп рдмрдирд╛рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП: рдлрд╝рд╛рдЗрд▓ тЖТ рдирдпрд╛ тЖТ рд▓рдХреНрд╖реНрдп , рдЪрдпрди рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХрд╛ рдЪрдпрди рдХрд░реЗрдВред Xcode, рд╕рд┐рд░реА рдореЗрдВ рдЖрдкрдХреЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рд╡рд╛рд▓реА рдЦрд┐рдбрд╝рдХреА рдХреЗ рд▓рд┐рдП рдПрдХ рдФрд░ рд▓рдХреНрд╖реНрдп рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдмрдирд╛рдиреЗ рдХреА рдкреЗрд╢рдХрд╢ рдХрд░реЗрдЧрд╛, рдЕрдЧрд░ рдЗрд╕рдХреЗ рд▓рд┐рдП рдХреЛрдИ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рд╣рдо рд╕рд╣рдордд рд╣реИрдВред



рд╢реЙрд░реНрдЯрдХрдЯ рдШреЛрд╖рд┐рдд рдХрд░реЗрдВ


IOS 12 рдореЗрдВ рд╕рд┐рд░реАрдХреАрдЯ рдХрд╛ рдореБрдЦреНрдп рдирд╡рд╛рдЪрд╛рд░ рдЖрдкрдХреЗ Inetnts рдХреЛ рдмрдирд╛рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рд╣реИ, рдЬреЛ рдкрд╣рд▓реЗ рдереЗред



рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдПрдХ рдирдИ рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдПрдБ: рдлрд╝рд╛рдЗрд▓ тЖТ рдирдпрд╛ тЖТ рдлрд╝рд╛рдЗрд▓ , рд╕рдВрд╕рд╛рдзрди рдЕрдиреБрднрд╛рдЧ рд╕реЗ рд╕рд┐рд░реАрдХрд┐рдЯ рдЗрдВрдЯреНрд░реЗрдВрдЯ рдбреЗрдлрд┐рдирд┐рд╢рди рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдЪрдпрди рдХрд░реЗрдВ ред



рдирддреАрдЬрддрди, рдПрдХреНрд╕рдЯреЗрдВрд╢рди .intentdefinition рдХреЗ рд╕рд╛рде рдПрдХ рдлрд╛рдЗрд▓ рджрд┐рдЦрд╛рдИ рджреЗрддреА рд╣реИ , рдЬрд┐рд╕рдореЗрдВ рдЖрдк рдЕрдкрдирд╛ рдЦреБрдж рдХрд╛ рдЗрдВрдЯреЗрдВрдЯ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВред рд╣рдо рдлрд╝рд╛рдЗрд▓ рдЦреЛрд▓рддреЗ рд╣реИрдВ, рдФрд░ рдЬрд╣рд╛рдВ рдпрд╣ рдХрд╣рддрд╛ рд╣реИ рдХрд┐ " рдиреЛ рдЗрдВрдЯреЗрдВрдЯреНрд╕ " рдиреАрдЪреЗ рдПрдХ " + " рдЖрдЗрдХрди рд╣реИ - рдЙрд╕ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВред " рдирдИ рдордВрд╢рд╛ "ред рд╕реВрдЪреА рдореЗрдВ рдПрдХ рдЖрд╢рдп рджрд┐рдЦрд╛рдИ рджреЗрдЧрд╛ рдЬрд┐рд╕рдореЗрдВ рдЖрдк рдкреИрд░рд╛рдореАрдЯрд░ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред рдкрд┐рдЬреНрдЬрд╛ рдСрд░реНрдбрд░ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЖрдк рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд┐рдЬреНрдЬрд╛ рдФрд░ рдкрд┐рдЬреНрдЬрд╛ рдХреЗ рдкреНрд░рдХрд╛рд░ рдХреА рд╕рдВрдЦреНрдпрд╛ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред рдорд╛рддреНрд░рд╛ рдХреЗ рд▓рд┐рдП рд╣рдо Integer рдХрд╛ рдкреНрд░рдХрд╛рд░ рдЪреБрдирддреЗ рд╣реИрдВ, рдФрд░ рдкрд┐рдЬреНрдЬрд╛ рдХреЗ рдкреНрд░рдХрд╛рд░ рдХреЗ рд▓рд┐рдП рд╣рдо Custom рдЪрдпрди рдХрд░рддреЗ рд╣реИрдВ, рдЬрд┐рд╕реЗ рдХреЛрдб рдореЗрдВ INObject рджреНрд╡рд╛рд░рд╛ INObject ред


рдЕрдм рд╣рддрд╛рд╢рд╛ рдХреА рдХреБрдЫ рдкрдВрдХреНрддрд┐рдпрд╛рдБ:


рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдПрдХ рд╣реА рд╕рд╣реЗрдЬреЗ рдЧрдП рд╡реЙрдпрд╕ рдХрдорд╛рдВрдб рдореЗрдВ рд╡рд┐рднрд┐рдиреНрди рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рдкреНрд░рд╕рд╛рд░рд┐рдд рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдирд╣реАрдВ рд╣реЛрдЧрд╛ред рдЕрдлрд╕реЛрд╕!



рдЗрд╕рдХреЗ рд▓рд┐рдП рдкреИрд░рд╛рдореАрдЯрд░ рдХреНрдпрд╛ рд╣реИрдВ:


рдорд╛рди рд▓реАрдЬрд┐рдП рдЖрдк рдПрдХ рдЗрдХрд╛рдИ "рд╢реЛ рд░реЗрдЯ %currency " рдмрдирд╛рддреЗ рд╣реИрдВ, рдЬрд╣рд╛рдБ currency рдПрдХ рдЗрдХрд╛рдИ рдкреИрд░рд╛рдореАрдЯрд░ рд╣реИред рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╡рд╛рдХреНрдпрд╛рдВрд╢ "рдбреЙрд▓рд░ рд╡рд┐рдирд┐рдордп рджрд░ рджрд┐рдЦрд╛рдПрдВ", "рдмрд┐рдЯрдХреЙрдЗрди рд╡рд┐рдирд┐рдордп рджрд░ рджрд┐рдЦрд╛рдПрдВ", рдЖрджрд┐ рдХрд╣ рд╕рдХрддреЗ рд╣реИрдВред рдмреЙрдХреНрд╕ рд╕реЗ рдмрд╛рд╣рд░, рдпрд╣ рдЙрд╕ рддрд░рд╣ рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ред рд▓реЗрдХрд┐рди рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рд╣реИ рдХрд┐ рдЕрдЧрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдиреЗ рдбреЙрд▓рд░ рд╡рд┐рдирд┐рдордп рджрд░ рдХреЛ рджреЗрдЦрд╛, рддреЛ "рд╢реЛ рдпреВрдПрд╕рдбреА рджрд░" рд╢реЙрд░реНрдЯрдХрдЯ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рдерд╛, рддрдм рдЬрдм рдЙрд╕рдиреЗ рдмрд┐рдЯрдХреЙрдЗрди рд╡рд┐рдирд┐рдордп рджрд░ рдХреЛ рджреЗрдЦрд╛, рддреЛ "рд╢реЛ рдмреАрдЯреАрд╕реА рджрд░" рд╢реЙрд░реНрдЯрдХрдЯ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рдерд╛, рдЖрджрд┐ред рджреВрд╕рд░реЗ рд╢рдмреНрджреЛрдВ рдореЗрдВ, рдЙрд╕рдХреЗ рдкрд╛рд╕ рдХрдИ рд╢реВрд░реНрдкрдгрдЦрд╛рдПрдВ рд╣реЛ рд╕рдХрддреА рд╣реИрдВ рдЬреЛ рдПрдХ рд╣реА рдЗрд░рд╛рджреЗ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реЛрдВ, рд▓реЗрдХрд┐рди рд╡рд┐рднрд┐рдиреНрди рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд╕рд╛рдеред рдкреНрд░рддреНрдпреЗрдХ рд╢реЙрд░реНрдЯрдХрдЯ, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЕрдкрдиреА рдЖрд╡рд╛рдЬ рдХрдорд╛рдВрдб рд╕реЗ рдкреВрдЫ рд╕рдХреЗрдЧрд╛ред


рдЦреИрд░, .intentdefinition рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдПрдХ рдЗрд░рд╛рджрд╛ рдмрдирд╛рдХрд░, Xcode рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдЙрд╕ рдЗрд░рд╛рджреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд░реНрдЧ рдЙрддреНрдкрдиреНрди рдХрд░реЗрдЧрд╛ (рдзреНрдпрд╛рди рджреЗрдВ: рдпрд╣ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдлрд╝рд╛рдЗрд▓реЛрдВ рдореЗрдВ рджрд┐рдЦрд╛рдИ рдирд╣реАрдВ рджреЗрдЧрд╛, рд▓реЗрдХрд┐рди рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рдЙрдкрд▓рдмреНрдз рд╣реЛрдЧрд╛) рдпрд╣ рд╕реНрд╡рддрдГ-рдЬрдирд░реЗрдЯ рдХреА рдЧрдИ рдлрд╝рд╛рдЗрд▓ рдХреЗрд╡рд▓ рдЙрдиреНрд╣реАрдВ рдореЗрдВ рд╣реЛрдЧреА рдЬреЛ рд╕реНрд╡рдпрдВ .intentdefinition рдлрд╝рд╛рдЗрд▓ рд╣реИред


.Intentdefinition рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдЗрд░рд╛рджрд╛ рдмрдирд╛рдиреЗ рдХреЗ рдмрд╛рдж , рд╣рдо рдХреЛрдб рдореЗрдВ рдЕрдкрдиреЗ рдЗрд░рд╛рджреЗ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВред


 let intent = OrderPizzaIntent() 

рд╢реЙрд░реНрдЯрдХрдЯ рдХреЛ рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рд╡рд┐рддрд░рд┐рдд рдХрд░реЗрдВ (рджрд╛рди рдХрд░реЗрдВ)


рдЖрджреЗрд╢ рд╣реИ рдХрд┐ рдЗрд╕ рдЗрдХрд╛рдИ рд╢реЙрд░реНрдЯрдХрдЯ рдХреА рд╕реВрдЪреА рдкрд░ рдорд╛рд░рддреЗ рдереЗ рдореЗрдВ - рдЖрдк рдЗрд╕реЗ zadonatit рдХреА рдЬрд░реВрд░рдд рд╣реИред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, INInteraction рдСрдмреНрдЬреЗрдХреНрдЯ рдЖрдкрдХреЗ рдЗрд░рд╛рджреЗ рдХреЗ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд╕рд╛рде рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ .donate рд╡рд┐рдзрд┐ рдХреЛ рдЕрдкрдиреЗ рд░рд╛рдЬреНрдп рдкрд░ рдХреЙрд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ


 let intent = OrderPizzaIntentf() // ...   let interaction = INInteraction(intent: intent, response: nil) interaction.donate { (error) in // ...   /  } 

рдЗрд╕ рдХреЛрдб рдХреЛ рдЕрдВрдЬрд╛рдо рджреЗрдиреЗ рдХреЗ рдмрд╛рдж, рдЖрд╢рдп-рдЖрдзрд╛рд░рд┐рдд рд╢реЙрд░реНрдЯрдХрдЯ рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдФрд░ рд╕рд┐рд░реА рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдореЗрдВ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред


рд╣рдо рд╢реЙрд░реНрдЯрдХрдЯ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рддреЗ рд╣реИрдВ (рд╣реИрдВрдбрд▓)


рдЕрдЧрд▓рд╛ рдХрджрдо рдЗрд░рд╛рджреЗ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдирд╛ рд╣реИ рдЬрдм рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕рд┐рд░реА рдХреЗ рд╕рд┐рд░рд╛рдЬ рдореЗрдВ рдЙрд╕ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рддрд╛ рд╣реИ рдпрд╛ рд╡реЙрдЗрд╕ рдХрдорд╛рдВрдб рд╕реЗ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИред


рд╣рдордиреЗ рд╕рд┐рд░реА рдХреЗ рд▓рд┐рдП рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдПрдХ рдЯрд╛рд░рдЧреЗрдЯ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдмрдирд╛ рд▓рд┐рдпрд╛ рд╣реИ рдФрд░ рдЗрд╕рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рдмрдирд╛рдпрд╛ рд╣реБрдЖ рдЗрдВрдЯреЗрдВрдЯрд╣реИрдВрдбрд▓рд░ рдХреНрд▓рд╛рд╕ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдПрдХ рд╣реА рддрд░реАрдХрд╛ рд╣реИ - `` рд╣реИрдВрдбрд▓ (рдЗрд░рд╛рджреЗ рдХреЗ рд▓рд┐рдП) ``


  class IntentHandler: INExtension { override func handler(for intent: INIntent) -> Any { guard intent is OrderPizzaIntent else { fatalError("Unhandled intent type: \(intent)") } return OrderPizzaIntentHandler() } } 

рдиреЛрдЯ: рдпрджрд┐ рдХрдВрдкрд╛рдЗрд▓рд░ рдЖрдкрдХреЗ рдЗрд░рд╛рджреЗ рдХреА рдХрдХреНрд╖рд╛ рдирд╣реАрдВ рджреЗрдЦрддрд╛ рд╣реИ, рддреЛ рдЖрдкрдиреЗ рд╕рд┐рд░реА рдХреЗ рд▓рд┐рдП .intentdefinition target рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдлрд╝рд╛рдЗрд▓ рдирд╣реАрдВ рдЬреЛрдбрд╝реА рд╣реИред

рдЗрд╕ рдкрджреНрдзрддрд┐ рдореЗрдВ, рд╣рдо рдЖрдиреЗ рд╡рд╛рд▓реЗ рдЗрд░рд╛рджреЗ рдХреЗ рдкреНрд░рдХрд╛рд░ рдХреЛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдкреНрд░рддреНрдпреЗрдХ рдкреНрд░рдХрд╛рд░ рдХреЗ рд▓рд┐рдП рд╣рдо рдПрдХ рд╣реИрдВрдбрд▓рд░ рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдирд╛рддреЗ рд╣реИрдВ рдЬреЛ рдЗрд╕ рдЗрд░рд╛рджреЗ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░реЗрдЧрд╛ред рд╣рдорд╛рд░реЗ OrderPizzaIntent рд▓рд┐рдП рдПрдХ рд╣реИрдВрдбрд▓рд░ рдмрдирд╛рдПрдБ, рдФрд░ рдЗрд╕рдореЗрдВ OrderPizzaIntentHandling рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЛ рд▓рд╛рдЧреВ рдХрд░реЗрдВ, рдЬреЛ рдЖрдкрдХреЗ рдЗрд░рд╛рджреЗ рдХреЛ рдЕрдирдЬрд╛рдиреЗ рдореЗрдВ рдмрдирд╛рдиреЗ рдХреЗ рдмрд╛рдж рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдСрдЯреЛ-рдЬреЗрдирд░реЗрдЯ рд╣реЛрддрд╛ рд╣реИред


рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдореЗрдВ рджреЛ рддрд░реАрдХреЛрдВ рдХреА confirm рдФрд░ handle ред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, confirm рдХреЛ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрд╣рд╛рдВ рд╕рднреА рдбреЗрдЯрд╛ рдХреА рдЬрд╛рдВрдЪ рдХреА рдЬрд╛рддреА рд╣реИ рдФрд░ рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХреА рдЙрдкрд▓рдмреНрдзрддрд╛ рдХреА рдЬрд╛рдВрдЪ рдХреА рдЬрд╛рддреА рд╣реИред рдлрд┐рд░ handle рдПрдХ рдЫреЛрдЯреА рдХрд╛рд░реНрд░рд╡рд╛рдИ рдореЗрдВ рдХрд╛рдо рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред


 public class OrderPizzaIntentHandler: NSObject, OrderPizzaIntentHandling { public func confirm(intent: OrderPizzaIntent, completion: @escaping (OrderPizzaIntentResponse) -> Void) { //      // ... completion(OrderPizzaIntentResponse(code: OrderPizzaIntentResponseCode.ready, userActivity: nil)) } public func handle(intent: OrderPizzaIntent, completion: @escaping (OrderPizzaIntentResponse) -> Void) { //     // ... completion(OrderPizzaIntentResponse(code: OrderPizzaIntentResponseCode.success, userActivity: nil)) } } 

рдЗрди рджреЛрдиреЛрдВ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЗ рд╕рд╛рде completion OrderPizzaIntentResponse рджреЗрдирд╛ рдЪрд╛рд╣рд┐рдП OrderPizzaIntentResponse (рдпрд╣ рднреА рдСрдЯреЛ-рдЬреЗрдирд░реЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ), рдЕрдиреНрдпрдерд╛ рд╕рд┐рд░реА рдмрд╕ рдПрдХ рд▓рдВрдмреЗ рд╕рдордп рддрдХ рдЗрдВрддрдЬрд╛рд░ рдХрд░реЗрдЧрд╛ рдФрд░ рдлрд┐рд░ рдПрдХ рддреНрд░реБрдЯрд┐ рджреЗрдЧрд╛ред


рд╕рд┐рд░реА рд╕реЗ рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддреГрдд рдЬрд╡рд╛рдм


рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЛрдб рдХреЗ рдПрдХ рдорд╛рдирдХ, рдСрдЯреЛ-рдЬрдирд░реЗрдЯ рд╕реЗрдЯ - enum OrderPizzaIntentResponseCode , рд▓реЗрдХрд┐рди рд╡реЗ рдПрдХ рдЕрдиреБрдХреВрд▓ рдЗрдВрдЯрд░рдлреЗрд╕ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рдирд╣реАрдВ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, confirm рдЪрд░рдг рдореЗрдВ, рдХрдИ рдЕрд▓рдЧ-рдЕрд▓рдЧ рддреНрд░реБрдЯрд┐рдпрд╛рдВ рд╣реЛ рд╕рдХрддреА рд╣реИрдВ - рдкрд┐рдЬреНрдЬрд╛ рдмрд╛рд╣рд░ рдЪрд▓рд╛ рдЧрдпрд╛ рд╣реИ, рдкрд┐рдЬрд╝реНрдЬрд╝реЗрд░рд┐рдпрд╛ рдЗрд╕ рд╕рдордп рдХрд╛рдо рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реИ, рдЖрджрд┐ред рдФрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдорд╛рдирдХ рд╕рдВрджреЗрд╢ "рдПрдкреНрд▓рд┐рдХреЗрд╢рди рддреНрд░реБрдЯрд┐" рдХреЗ рдмрдЬрд╛рдп рдЗрди рддрдереНрдпреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реАрдЦрдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрд╛рдж рд░рдЦреЗрдВ рдХрд┐ рд╣рдордиреЗ .intentdefinition рдлрд╝рд╛рдЗрд▓ рдореЗрдВ Intent рдмрдирд╛рдпрд╛ рд╣реИ? рдЗрд░рд╛рджреЗ рдХреЗ рд╕рд╛рде рд╣реА, рдЗрд╕рдХрд╛ Response рдЬрд┐рд╕рдореЗрдВ рдЖрдк рддреНрд░реБрдЯрд┐рдпреЛрдВ рдФрд░ рд╕рдлрд▓ рдЙрддреНрддрд░реЛрдВ рдХреЗ рд▓рд┐рдП рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рд╡рд┐рдХрд▓реНрдк рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдЙрдиреНрд╣реЗрдВ рдорд╛рдирдХреЛрдВ рдХреЗ рд╕рд╛рде рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:



рдЕрдм рд╣рдо рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реАрдкреВрд░реНрдг рддреНрд░реБрдЯрд┐рдпрд╛рдБ рдФрд░ рдЙрддреНрддрд░ рдмрддрд╛ рд╕рдХрддреЗ рд╣реИрдВ:


 public func confirm(intent: OrderPizzaIntent, completion: @escaping (OrderPizzaIntentResponse) -> Void) { guard let pizzaKindId = intent.kind?.identifier else { //         -     completion(OrderPizzaIntentResponse(code: .failure, userActivity: nil)) return } if pizzeriaManager.isPizzeriaClosed == true { ///     -     completion(OrderPizzaIntentResponse(code: .failurePizzeriaClosed, userActivity: nil)) return } else if pizzeriaManager.menu.isPizzaUnavailable(identifier: pizzaKindId) { ///      -     completion(OrderPizzaIntentResponse(code: .failurePizzaUnavailable(kind: intent.kind), userActivity: nil)) return } //     -    completion(OrderPizzaIntentResponse(code: .ready, userActivity: nil)) } 

Intent рдкреНрд░рддрд┐рдкрд╛рджрди


рдпрджрд┐ рд╣рдордиреЗ рдПрдХ рдЗрдВрдЯреЗрдВрдЯ рдПрдХреНрд╕рдЯреЗрдВрд╢рди UI рд▓рдХреНрд╖реНрдп рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдмрдирд╛рдпрд╛ рд╣реИ, рддреЛ рд╣рдо рд╕рд┐рд░реА рдореЗрдВ рдЕрдкрдиреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдХрд╕реНрдЯрдо рджреГрд╢реНрдп рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВред рд╣рдорд╛рд░реЗ рдкрд╛рд╕ MainInterface.storyboard рдФрд░ IntentViewController рд╣реИ рдЬрд┐рд╕рдореЗрдВ рд╣рдо рдЙрдирдХреЗ рдбрд┐рдЬрд╝рд╛рдЗрди рдХреЛ рд╕реНрдХреЗрдЪ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ рджреГрд╢реНрдп рдирд┐рдпрдВрддреНрд░рдХ INUIHostedViewControlling рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд░рддрд╛ рд╣реИ рдФрд░ рджреГрд╢реНрдп configureView рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╡рд┐рдзрд┐ рдореЗрдВ configureView рдХрд┐рдпрд╛ рдЧрдпрд╛ configureView


 // Prepare your view controller for the interaction to handle. func configureView(for parameters: Set<INParameter>, of interaction: INInteraction, interactiveBehavior: INUIInteractiveBehavior, context: INUIHostedViewContext, completion: @escaping (Bool, Set<INParameter>, CGSize) -> Void) { // Do configuration here, including preparing views and calculating a desired size for presentation. completion(true, parameters, self.desiredSize) } var desiredSize: CGSize { return self.extensionContext!.hostedViewMaximumAllowedSize } рд╕рдВрднрд╛рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред // Prepare your view controller for the interaction to handle. func configureView(for parameters: Set<INParameter>, of interaction: INInteraction, interactiveBehavior: INUIInteractiveBehavior, context: INUIHostedViewContext, completion: @escaping (Bool, Set<INParameter>, CGSize) -> Void) { // Do configuration here, including preparing views and calculating a desired size for presentation. completion(true, parameters, self.desiredSize) } var desiredSize: CGSize { return self.extensionContext!.hostedViewMaximumAllowedSize } 

рдЗрд╕ рдкрджреНрдзрддрд┐ рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рд╣рдорд╛рд░реЗ рдЗрд░рд╛рджреЗ рдХрд╛ рдирд╛рдо рдЬреЛрдбрд╝рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ NSExtension -> NSExtensionAttributes -> IntentsSupported , рдЬреЛ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдЯрд╛рд░рдЧреЗрдЯ UI рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рддрд╛ рд╣реИ


 <key>NSExtension</key> <dict> <key>NSExtensionAttributes</key> <dict> <key>IntentsSupported</key> <array> <string>OrderPizzaIntent</string> </array> </dict> 

рд╕рд┐рд░реА рдореЗрдВ рдЖрдкрдХреЗ рд╡рд┐рдЪрд╛рд░ рдХреЗ рдбрд┐рдЬрд╝рд╛рдЗрди рдФрд░ interaction.intent рдЖрдзрд╛рд░ рдкрд░ред рд╡рд┐рдзрд┐ рдореЗрдВ рдорд┐рд▓рд╛, рдЖрдк рдЗрд╕ рджреГрд╢реНрдп рдХреЛ рдЕрдкрдиреА рдЗрдЪреНрдЫрд╛рдиреБрд╕рд╛рд░ рдЖрдХрд░реНрд╖рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдиреАрдЪреЗ рд╕реНрдХреНрд░реАрдирд╢реЙрдЯ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрддрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ рдХрд┐ рд╕рд┐рд░реА рдореЗрдВ рд╣рдорд╛рд░рд╛ рдЗрд░рд╛рджрд╛ рдХреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИ, рдЦреЛрдЬ рдореЗрдВ рдФрд░ рд▓реЙрдХ рд╕реНрдХреНрд░реАрди рдкрд░ред



рдпрд╣ рд╡рд┐рдЪрд╛рд░ рдХрд░рдиреЗ рдпреЛрдЧреНрдп рд╣реИ рдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЖрдкрдХреЗ рджреГрд╢реНрдп рдкрд░ рдмрдЯрди, рд╕реНрдХреНрд░реЙрд▓рд┐рдВрдЧ рдФрд░ рдЕрдиреНрдп рдирд┐рдпрдВрддреНрд░рдгреЛрдВ рдХреЗ рд╕рд╛рде рдмрд╛рддрдЪреАрдд рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдирд╣реАрдВ рд╣реЛрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рд╡рд┐рдзрд┐ рдХреЛ interactiveBehavior = .none рд╕рд╛рде рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдпрд╣ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдХрдИ рд╕реАрдорд╛рдПрдВ рд▓рдЧрд╛рддрд╛ рд╣реИред


рдХреБрд▓ рдорд┐рд▓рд╛рдХрд░


рдПрдХ Intent рдЖрдзрд╛рд░рд┐рдд рд╢реЙрд░реНрдЯрдХрдЯ Intent рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдпрд╛ рд╕реВрдЪрдирд╛ рдХреЗрдВрджреНрд░ рдореЗрдВ рдкреНрд░рд╕реНрддреБрдд рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдЦреЛрд▓реЗ рдмрд┐рдирд╛ рдПрдХ рдХреНрд░рд┐рдпрд╛ рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕реЗ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рдЪрд╛рд╣рд┐рдП:


  1. рд╕рд┐рд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреНрд╖рдорддрд╛рдУрдВ рдХреЛ рд╕рдХреНрд╖рдо рдХрд░реЗрдВ
  2. Intents рдПрдХреНрд╕рдЯреЗрдВрд╢рдиреНрд╕ рдФрд░ Intents рдПрдХреНрд╕рдЯреЗрдВрд╢рдиреНрд╕ UI рдмрдирд╛рдПрдБ
  3. SiriKit рдЖрд╢рдп рдкрд░рд┐рднрд╛рд╖рд╛ рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдПрдБ
  4. рд╣рдо рдЗрд╕ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдЕрдкрдирд╛ Intent рдмрдирд╛рддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ рдкреИрд░рд╛рдореАрдЯрд░ рдЕрд╕рд╛рдЗрди рдХрд░рддреЗ рд╣реИрдВред
  5. рдПрдХ IntentHandler рдмрдирд╛рдПрдВ рдЬрд┐рд╕рдореЗрдВ рд╣рдо confirm рдФрд░ hanlde рд▓рд╛рдЧреВ рдХрд░рддреЗ confirm

рд╕рд┐рдлрд╛рд░рд┐рд╢реЗрдВ


рд╕рд┐рд░реА рд╡рд┐рд╕реНрддрд╛рд░ рд▓рдХреНрд╖реНрдп рдФрд░ рдореБрдЦреНрдп рдЖрд╡реЗрджрди рдореЗрдВ рд╕рд╛рдорд╛рдиреНрдп рдХреЛрдб


рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдХреЛрдб рд╣реИ рдЬреЛ рд╕рд┐рд░реА рдХреЗ рд▓рд┐рдП рдФрд░ рдореБрдЦреНрдп рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рд▓рдХреНрд╖реНрдп рджреЛрдиреЛрдВ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ - рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ 2 рддрд░реАрдХреЗ рд╣реИрдВ:


  1. рд╕рд╛рдорд╛рдиреНрдп рдХрдХреНрд╖рд╛рдУрдВ рдХреЛ рд╣рд╛рдЗрд▓рд╛рдЗрдЯ рдХрд░рдирд╛ рджреЛрдиреЛрдВ рд▓рдХреНрд╖реНрдпреЛрдВ рдХреЛ рдЬреЛрдбрд╝рддрд╛ рд╣реИред ( рджреЗрдЦреЗрдВ тЖТ рдпреВрдЯрд┐рд▓рд┐рдЯреАрдЬ тЖТ рдЯрд╛рд░реНрдЧреЗрдЯ рдореЗрдореНрдмрд░рд╢рд┐рдк рд╕реЗрдХреНрд╢рди рдореЗрдВ рдлрд╛рдЗрд▓ рдЗрдВрд╕реНрдкреЗрдХреНрдЯрд░ рдХрд╛ рдИ рджреЗрдЦреЗрдВ, рдЪрдпрдирд┐рдд рдлрд╛рдЗрд▓ рддрдХ рдкрд╣реБрдБрдЪ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╡рд╛рд▓реЗ рд▓рдХреНрд╖реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдЪреЗрдХрдорд╛рд░реНрдХ рдЬреЛрдбрд╝реЗрдВ)
  2. рдПрдХ рдпрд╛ рдЕрдзрд┐рдХ рд▓рдХреНрд╖реНрдп рд░реВрдкрд░реЗрдЦрд╛рдПрдБ рдмрдирд╛рдПрдБ рдФрд░ рд╡рд╣рд╛рдБ рд╕рд╛рдорд╛рдиреНрдп рдХреЛрдб рд▓реЗрдВред

рдЙрддреНрддрд░рд╛рд░реНрджреНрдз рд╡рд┐рдзрд┐ рдмреЗрд╣рддрд░ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЖрдк рдЗрди рдлреНрд░реЗрдорд╡рд░реНрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдЕрдиреНрдп рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдФрд░ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ рднреА рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реИ рдХрд┐ рдЗрди рдЪреМрдЦрдЯреЛрдВ рдХреЗ рд▓рд┐рдП Allow app extension API only рдХреА Allow app extension API only рдлреНрд▓реИрдЧ рд╕реЗрдЯ рдХрд░рдирд╛ рдЙрдЪрд┐рдд рд╣реИ, рдлрд┐рд░, рдлреНрд░реЗрдорд╡рд░реНрдХ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рддреЗ рд╕рдордп, рдХрдВрдкрд╛рдЗрд▓рд░ рд╢рдкрде рд▓реЗрдЧрд╛ рдпрджрд┐ рдЖрдк рдПрдХ рдПрдкреАрдЖрдИ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рд╡рд┐рдХрд╛рд╕рд╢реАрд▓ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдореЗрдВ рдЕрд╡реИрдз рд╣реИ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, UIApplication )ред


рд╕рд╛рдЭрд╛ рд╕рдореВрд╣реЛрдВ рдХреЛ рдРрдк рд╕рдореВрд╣реЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд▓рдХреНрд╖реНрдп рдХреЗ рдмреАрдЪ рд░рдорд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ


рдбрд┐рдмрдЧрд┐рдВрдЧ


рдкрд░реАрдХреНрд╖рдг рд╢реЙрд░реНрдЯрдХрдЯ рдорджрдж рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░реЗрдЧрд╛:


  1. рдлреЛрди рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рд╕реЗрдЯрд┐рдВрдЧ тЖТ рдбреЗрд╡рд▓рдкрд░ : рд▓реЙрдХ рд╕реНрдХреНрд░реАрди рд╕реНрд╡рд┐рдЪ рдкрд░ рд╣рд╛рд▓ рдХреЗ рд╢реЙрд░реНрдЯрдХрдЯ рдФрд░ рдкреНрд░рджрд░реНрд╢рди рджрд╛рди рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░реЗрдВ :


  1. Intens рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдк рддреБрд░рдВрдд Xcode рдХрд╛ рд╡рд╛рдХреНрдпрд╛рдВрд╢ рдЬреЛ рд╕рд┐рд░реА рдХреЗ рд╕рд╛рде рдЦреБрд▓рддрд╛ рд╣реИ, рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдХреЗ рд▓рдХреНрд╖реНрдп рдПрдХреНрд╕рдЯреЗрдВрд╢рди рд▓реЙрдиреНрдЪ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд▓рдХреНрд╖реНрдп рд╡рд┐рд╕реНрддрд╛рд░ рд╕рд┐рд░реА рдХреЗ рд▓рд┐рдП рдпреЛрдЬрдирд╛ рдХрд╛ рдЪрдпрди рдХрд░реЗрдВ


рдЗрд╕ рд▓рдХреНрд╖реНрдп рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ, рд╕рдВрдкрд╛рджрди рдпреЛрдЬрдирд╛ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ ...



рд╕рд┐рд░реА рдЗрдВрдЯреЗрдВрдЯ рдХреНрд╡реЗрд░реА рдХреНрд╖реЗрддреНрд░ рдореЗрдВ, рдПрдХ рд╡рд╛рдХреНрдпрд╛рдВрд╢ рджрд░реНрдЬ рдХрд░реЗрдВ рдЬрд┐рд╕рдХреЗ рд╕рд╛рде рд╕рд┐рд░реА рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╢реБрд░реВ рд╣реЛ рдЬрд╛рдПрдЧрд╛, рдЬреИрд╕реЗ рдХрд┐ рдЖрдкрдиреЗ рдкрд╣рд▓реЗ рд╣реА рдХрд╣рд╛ рдерд╛ред


рдХреБрд▓ рдорд┐рд▓рд╛рдХрд░


рдореИрдВрдиреЗ рдЬреЛ рдХрд┐рдпрд╛ рдЙрд╕реЗ рд░реЛрдХрдиреЗ рдФрд░ рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рд╕реНрддрд╛рд╡ рд╣реИ:


  1. рд╢реЙрд░реНрдЯрдХрдЯ NSUserActivity рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ, рдпрд╛ NSUserActivity рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдмрдирд╛рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ
  2. рд╢реЙрд░реНрдЯрдХрдЯ рдХреЛ рдШреЛрд╖рд┐рдд (рдШреЛрд╖рд┐рдд) рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рд╕рд┐рд╕реНрдЯрдо (рджрд╛рди), рдФрд░ рд╕рдВрд╕рд╛рдзрд┐рдд (рд╣реИрдВрдбрд▓) рдХреЛ рд╕реВрдЪрдирд╛ рджреА рдЧрдИ рд╣реИред
  3. рдЖрдк рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ " рдПрдб рдЯреВ рд╕рд┐рд░реА " рдмрдЯрди рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрд┐рд╕ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рдХреЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд╛рдХреНрдпрд╛рдВрд╢ рдЬреЛрдбрд╝ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдмрд╛рдж рдореЗрдВ рдЙрд╕реЗ рдЕрдкрдиреА рдЖрд╡рд╛рдЬ рдХреЗ рд╕рд╛рде рдХреЙрд▓ рдХрд░ рд╕рдХрддрд╛ рд╣реИред
  4. рдЖрдк рдмрд┐рд▓реНрдЯ-рдЗрди рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдЕрдкрдирд╛ рдЦреБрдж рдХрд╛ Intents рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВред
  5. рдЗрдВрдЯреЗрдВрдЯреНрд╕-рдЖрдзрд╛рд░рд┐рдд Intents рдорд╛рдзреНрдпрдо рд╕реЗ Intents рдЖрдк рдЙрди рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рд╕рд┐рд░реА рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ (рдпрд╛ рддреЛ рд▓реЙрдХ рд╕реНрдХреНрд░реАрди рдкрд░ рдпрд╛ рдЦреЛрдЬ рдореЗрдВ) рдЖрд╡реЗрджрди рдХреЛ рдЦреЛрд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЗ рдмрд┐рдирд╛ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

Apple рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг рдореЗрдВ рдбреЗрдореЛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреА рдПрдХ рдХрдбрд╝реА рд╣реИ, рдЬреЛ рд╡рд┐рдХрд╛рд╕ рдХреЗ рджреМрд░рд╛рди рдЗрд╕реЗ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдиреЗ рдФрд░ рдЙрд╕ рдкрд░ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реИред


рдореИрдВ рдЗрд╕ рдмрд╛рдд рдкрд░ рдЬреЛрд░ рджреЗрдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ рдХрд┐ рдЗрд╕ рд▓реЗрдЦ рдХреЛ рд▓рд┐рдЦрдиреЗ рдХреЗ рд╕рдордп beta рд╕реНрдЯреЗрдЬ рдкрд░ рдПрдХ рдПрдкреАрдЖрдИ рд╣реИред рдФрд░ рдореИрдВ рдЕрдХреНрд╕рд░ рд╕рдорд╕реНрдпрд╛рдУрдВ рдФрд░ рдмрдЧреЛрдВ рдХреЛ рдкрдХрдбрд╝рддрд╛ рд╣реВрдВред рдХрд╛рдо рдХреЗ рджреМрд░рд╛рди, рдореИрдВ рд╕рдордп-рд╕рдордп рдкрд░ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрд╛рдо рдХрд░рддрд╛ рд░рд╣рд╛:


  • , Intent Siri, .
  • Siri .
  • Siri.

рд╕рдВрджрд░реНрдн


  1. WWDC 2018, session 211: Introduction to Siri Shortcuts
  2. WWDC 2018, session 214: Building for Voice with Siri Shortcuts
  3. Apple Developer: SiriKit
  4. Apple Developer: INUIHostedViewControlling
  5. Demo Soup Chef Apple

Source: https://habr.com/ru/post/hi414677/


All Articles