IOS рдРрдк рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЖрдкрдХреЛ рдЬреЛ рдХреБрдЫ рднреА рдЬрд╛рдирдирд╛ рд╣реИ



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

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

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

рдЬреАрд╡рди рд╡рд┐рд╕реНрддрд╛рд░ рдРрдк рдПрдХреНрд╕рдЯреЗрдВрд╢рди


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



  • рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╣реЛрд╕реНрдЯ рдРрдк рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдРрдк рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХрд╛ рдЪрдпрди рдХрд░рддрд╛ рд╣реИред
  • рд╣реЛрд╕реНрдЯ рдРрдк рдПрдХ рдРрдк рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдЕрдиреБрд░реЛрдз рднреЗрдЬрддрд╛ рд╣реИред
  • iOS рд╣реЛрд╕реНрдЯ рдРрдк рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рдРрдк рдПрдХреНрд╕рдЯреЗрдВрд╢рди рд▓реЙрдиреНрдЪ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЙрдирдХреЗ рдмреАрдЪ рдПрдХ рд╕рдВрдЪрд╛рд░ рдЪреИрдирд▓ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рддрд╛ рд╣реИред
  • рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдРрдк рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдореЗрдВ рдПрдХ рдХреНрд░рд┐рдпрд╛ рдХрд░рддрд╛ рд╣реИред
  • рдРрдк рдПрдХреНрд╕рдЯреЗрдВрд╢рди рд╣реЛрд╕реНрдЯ рдРрдк рд╕реЗ рдЕрдиреБрд░реЛрдз рдкреВрд░рд╛ рдХрд░рддрд╛ рд╣реИ, рдПрдХ рдХрд╛рд░реНрдп рдХрд░рддрд╛ рд╣реИ, рдпрд╛ рдЗрд╕реЗ рдкреВрд░рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреГрд╖реНрдарднреВрдорд┐ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╢реБрд░реВ рдХрд░рддрд╛ рд╣реИ; рдХрд╛рд░реНрдп рдкреВрд░рд╛ рд╣реЛрдиреЗ рдкрд░, рдкрд░рд┐рдгрд╛рдо рд╣реЛрд╕реНрдЯ рдРрдк рдореЗрдВ рд╡рд╛рдкрд╕ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
  • рдПрдХ рдмрд╛рд░ рдРрдк рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдЕрдкрдирд╛ рдХреЛрдб рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░ рджреЗрддрд╛ рд╣реИ, рд╕рд┐рд╕реНрдЯрдо рдЗрд╕ рдРрдк рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреЛ рд╕рдорд╛рдкреНрдд рдХрд░ рджреЗрддрд╛ рд╣реИред

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдлреЗрд╕рдмреБрдХ рд╢реЗрдпрд░ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рдлреЛрдЯреЛ рд╕реЗ рдПрдХ рдлреЛрдЯреЛ рд╕рд╛рдЭрд╛ рдХрд░рддреЗ рд╕рдордп, рдлреЗрд╕рдмреБрдХ рдХрдВрдЯреЗрдВрдЯрд┐рдВрдЧ рдРрдк рд╣реИ рдФрд░ рдлрд╝реЛрдЯреЛ рд╣реЛрд╕реНрдЯ рдРрдк рд╣реИред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЬрдм рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЗрд╕реЗ рд╢реЗрдпрд░ рдореЗрдиреВ рдореЗрдВ рдЪреБрдирддрд╛ рд╣реИ рддреЛ рдлрд╝реЗрд╕рдмреБрдХ рд╢реЗрдпрд░ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рд▓рд╛рдЗрдл рдЪрдХреНрд░ рд╢реБрд░реВ рдХрд░рддрд╛ рд╣реИ:



рдРрдк рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреЗ рд╕рд╛рде рд╕рд╣рднрд╛рдЧрд┐рддрд╛




  • рдпреБрдХреНрдд рдРрдк - рд╣реЛрд╕реНрдЯ рдРрдк
    рдЖрдкрд╕ рдореЗрдВ рдмрд╛рддрдЪреАрдд рди рдХрд░реЗрдВред
  • рдРрдк рдПрдХреНрд╕рдЯреЗрдВрд╢рди - рд╣реЛрд╕реНрдЯ рдРрдк
    IPC рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕рд╣рднрд╛рдЧрд┐рддрд╛ рдХрд░реЗрдВред
  • рдРрдк рдПрдХреНрд╕рдЯреЗрдВрд╢рди - рдпреБрдХреНрдд рдРрдк
    рдЕрдкреНрд░рддреНрдпрдХреНрд╖ рдмрд╛рддрдЪреАрддред рдРрдк рд╕рдореВрд╣реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдбреЗрдЯрд╛ рдПрдХреНрд╕рдЪреЗрдВрдЬ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдПрдВрдмреЗрдбреЗрдб рдлреНрд░реЗрдорд╡рд░реНрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рд╕рд╛рдорд╛рдиреНрдп рдХреЛрдб рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЖрдк URL рд╕реНрдХреАрдореНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдРрдк рдПрдХреНрд╕рдЯреЗрдВрд╢рди рд╕реЗ рдХреЙрдиреНрдЯрд┐рдВрдЧ рдРрдк рд▓реЙрдиреНрдЪ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдЬреЗрдиреЗрд░рд┐рдХ рдХреЛрдб: рдбрд╛рдпрдиреЗрдорд┐рдХ рдлреНрд░реЗрдорд╡рд░реНрдХ


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

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

рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдПрдХ рдирдпрд╛ рд▓рдХреНрд╖реНрдп рдЬреЛрдбрд╝реЗрдВ рдФрд░ рдХреЛрдХреЛ рдЯрдЪ рдлреНрд░реЗрдорд╡рд░реНрдХ рдЪреБрдиреЗрдВ :



рдПрдХ рдирд╛рдо рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░реЗрдВ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, ImageFilters ), рдФрд░ рдиреЗрд╡рд┐рдЧреЗрдЯрд░ рдкреИрдирд▓ рдореЗрдВ рдЖрдк рдмрдирд╛рдП рдЧрдП рдврд╛рдВрдЪреЗ рдХреЗ рдирд╛рдо рдХреЗ рд╕рд╛рде рдПрдХ рдирдпрд╛ рдлрд╝реЛрд▓реНрдбрд░ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ:

рдЖрдкрдХреЛ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ рдлреНрд░реЗрдорд╡рд░реНрдХ API рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдРрдк рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреЗ рд▓рд┐рдП рдЙрдкрд▓рдмреНрдз рдирд╣реАрдВ рд╣реИрдВ:

  • UIApplication рд╕реЗ рд╕рд╛рдЭрд╛ рдХрд┐рдпрд╛ рдЧрдпрд╛ред
  • рдПрдкреАрдЖрдИ рдХреЛ рджреБрд░реНрдЧрдорддрд╛ рдХреЗ рд╕рд╛рде рдЪрд┐рд╣реНрдирд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
  • рдХреИрдорд░рд╛ рдФрд░ рдорд╛рдЗрдХреНрд░реЛрдлреЛрди (iMessage рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреЛ рдЫреЛрдбрд╝рдХрд░)ред
  • рд▓рдВрдмреА рдкреГрд╖реНрдарднреВрдорд┐ рдХреЗ рдХрд╛рд░реНрдп рдХрд░рдирд╛ (рдЗрд╕ рдкреНрд░рддрд┐рдмрдВрдз рдХреА рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ рдРрдк рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреЗ рдкреНрд░рдХрд╛рд░ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рднрд┐рдиреНрди рд╣реЛрддреА рд╣реИрдВ)ред
  • AirDrop рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВред

рдРрдк рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдореЗрдВ рдЗрд╕ рд╕реВрдЪреА рдореЗрдВ рд╕реЗ рдХрд┐рд╕реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдкрд░ рдРрдк рд╕реНрдЯреЛрд░ рдореЗрдВ рдкреНрд░рдХрд╛рд╢рд┐рдд рд╣реЛрдиреЗ рдкрд░ рдЗрд╕рдХреА рдЕрд╕реНрд╡реАрдХреГрддрд┐ рд╣реЛ рдЬрд╛рдПрдЧреАред

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



рдлреНрд░реЗрдорд╡рд░реНрдХ рдХреЛрдб рдореЗрдВ, рдХрдиреНрдЯреЗрдирд┐рдВрдЧ рдРрдк рдФрд░ рдРрдк рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХреА рдЬрд╛рдиреЗ рд╡рд╛рд▓реА рд╕рднреА рдХрдХреНрд╖рд╛рдПрдВ, рд╡рд┐рдзрд┐рдпрд╛рдБ рдФрд░ рдЧреБрдг public рд╣реЛрдиреЗ рдЪрд╛рд╣рд┐рдПред рдЬрд╣рд╛рдВ рднреА рдЖрдкрдХреЛ рдврд╛рдВрдЪреЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, import :

 import ImageFilters 

рдбреЗрдЯрд╛ рдПрдХреНрд╕рдЪреЗрдВрдЬ: рдРрдк рд╕рдореВрд╣


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

рдРрдк рдбреЗрд╡рд▓рдкрд░ рдРрдкреНрдкрд▓ рдбреЗрд╡рд▓рдкрд░ рд╕рдореВрд╣ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ:



рдКрдкрд░реА рджрд╛рдПрдВ рдХреЛрдиреЗ рдореЗрдВ, рджрд┐рдЦрд╛рдИ рджреЗрдиреЗ рд╡рд╛рд▓реА рд╡рд┐рдВрдбреЛ рдореЗрдВ "+" рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ, рдЖрд╡рд╢реНрдпрдХ рдбреЗрдЯрд╛ рджрд░реНрдЬ рдХрд░реЗрдВ:



рдЕрдЧрд▓рд╛ рдЬрд╛рд░реА -> рд░рдЬрд┐рд╕реНрдЯрд░ -> рдкреВрд░рд╛ рд╣реБрдЖ ред

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



рдЗрд╕реА рддрд░рд╣ рдРрдк рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреЗ рд▓рд┐рдП:



рдЕрдм рдпреБрдХреНрдд рдРрдк рдФрд░ рдРрдк рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдПрдХ рдХрдВрдЯреЗрдирд░ рд╕рд╛рдЭрд╛ рдХрд░рддреЗ рд╣реИрдВред рдЗрд╕рдХреЗ рдмрд╛рдж, рд╣рдо рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░реЗрдВрдЧреЗ рдХрд┐ рдЗрд╕реЗ рдХреИрд╕реЗ рдкрдврд╝рдирд╛ рдФрд░ рд▓рд┐рдЦрдирд╛ рд╣реИред

UserDefaults


рдбреЗрдЯрд╛ рдХреА рдПрдХ рдЫреЛрдЯреА рд░рд╛рд╢рд┐ рдХрд╛ рдЖрджрд╛рди-рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, UserDefaults рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИ, рдЖрдкрдХреЛ рдмрд╕ рдРрдк рд╕рдореВрд╣ рдХрд╛ рдирд╛рдо рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:

 let sharedDefaults = UserDefaults(suiteName: "group.com.maxial.onemoreapp") 

NSFileCoordinator рдФрд░ NSFilePresenter


рдмрдбрд╝реЗ рдбреЗрдЯрд╛ рдХреЗ рд▓рд┐рдП, NSFileCoordinator рдирд┐рд░рдВрддрд░рддрд╛ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдиреБрдХреВрд▓ рд╣реИ / рдкрдврд╝рдирд╛ рд▓рд┐рдЦрдирд╛ред рдЗрд╕рд╕реЗ рдбреЗрдЯрд╛ рднреНрд░рд╖реНрдЯрд╛рдЪрд╛рд░ рд╕реЗ рдмрдЪрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕ рдмрд╛рдд рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ рдХрд┐ рдХрдИ рдкреНрд░рдХреНрд░рд┐рдпрд╛рдПрдВ рдПрдХ рд╕рд╛рде рдЙрдиреНрд╣реЗрдВ рдПрдХреНрд╕реЗрд╕ рдХрд░ рд╕рдХрддреА рд╣реИрдВред

рд╕рд╛рдЭрд╛ рдХрдВрдЯреЗрдирд░ рдХрд╛ URL рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:

 let sharedUrl = FileManager.default.containerURL(forSecurityApplicationGroupIdentifier: "group.com.maxial.onemoreapp") 

рд░рд┐рдХреЙрд░реНрдб:

 fileCoordinator.coordinate(writingItemAt: sharedUrl, options: [], error: nil) { [unowned self] newUrl in do { let data = try NSKeyedArchiver.archivedData(withRootObject: self.object, requiringSecureCoding: false) try data.write(to: newUrl, options: .atomic) } catch { print(error) } } 

рдкрдврд╝рдиреЗ:

 fileCoordinator.coordinate(readingItemAt: sharedUrl, options: [], error: nil) { newUrl in do { let data = try Data(contentsOf: newUrl) if let object = try NSKeyedUnarchiver.unarchivedObject(ofClass: NSString.self, from: data) as String? { self.object = object } } catch { print(error) } } 

рдпрд╣ рд╡рд┐рдЪрд╛рд░ рдХрд░рдиреЗ рдпреЛрдЧреНрдп рд╣реИ рдХрд┐ NSFileCoordinator рддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рд░реВрдк рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдЬрдмрдХрд┐ рдХреБрдЫ рдлрд╛рдЗрд▓ рдкрд░ рдХрд┐рд╕реА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд╛ рдХрдмреНрдЬрд╛ рд╣реЛрдЧрд╛, рдЕрдиреНрдп рдХреЛ рдЗрд╕рдХреЗ рдЬрд╛рд░реА рд╣реЛрдиреЗ рдХрд╛ рдЗрдВрддрдЬрд╛рд░ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред

рдпрджрд┐ рдЖрдк рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдпрд╣ рдЬрд╛рдирдирд╛ рдЪрд╛рд╣реЗ рдХрд┐ NSFilePresenter рдРрдк рдбреЗрдЯрд╛ рд╕реНрдерд┐рддрд┐ рдХреЛ NSFilePresenter , рддреЛ NSFilePresenter рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рдПрдХ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рд╣реИ рдЬрд┐рд╕рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрд╛рдИ рджреЗ рд╕рдХрддрд╛ рд╣реИ:

 extension TodayViewController: NSFilePresenter { var presentedItemURL: URL? { let sharedUrl = FileManager.default.containerURL(forSecurityApplicationGroupIdentifier: "group.com.maxial.onemoreapp") return sharedUrl?.appendingPathComponent("Items") } var presentedItemOperationQueue: OperationQueue { return .main } func presentedItemDidChange() { } } 

presentedItemOperationQueue рдЧреБрдг рдПрдХ рдХрддрд╛рд░ рджреЗрддрд╛ рд╣реИ рдЬреЛ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдмрджрд▓рддреЗ рд╕рдордп рдХреЙрд▓рдмреИрдХ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред presentedItemDidChange() рд╡рд┐рдзрд┐ рдХреЛ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрдм рдПрдХ рдкреНрд░рдХреНрд░рд┐рдпрд╛, рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдпреБрдХреНрдд рдПрдкреНрд▓рд┐рдХреЗрд╢рди, рдбреЗрдЯрд╛ рдХреА рд╕рд╛рдордЧреНрд░реА рдХреЛ рдмрджрд▓рддрд╛ рд╣реИред рдпрджрд┐ рдирд┐рдореНрди-рд╕реНрддрд░реАрдп рд▓реЗрдЦрди рдХреЙрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕реАрдзреЗ рдкрд░рд┐рд╡рд░реНрддрди рдХрд┐рдП рдЧрдП рд╣реИрдВ, рддреЛ presentedItemDidChange() рдирд╣реАрдВ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рдХреЗрд╡рд▓ NSFileCoordinator рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкрд░рд┐рд╡рд░реНрддрди NSFileCoordinator ред

NSFileCoordinator рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдкреНрд░рд╛рд░рдВрдн рдХрд░рддреЗ NSFileCoordinator , NSFileCoordinator рдЕрдиреБрд╢рдВрд╕рд╛ NSFileCoordinator рдЬрд╛рддреА рд╣реИ рдХрд┐ рдЖрдк NSFilePresenter рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдкрд╛рд╕ рдХрд░реЗрдВ, рдЦрд╛рд╕рдХрд░ рдпрджрд┐ рдпрд╣ рдХрд┐рд╕реА рднреА рдлрд╝рд╛рдЗрд▓ рдСрдкрд░реЗрд╢рди рдХреЛ рд╢реБрд░реВ рдХрд░рддрд╛ рд╣реИ:

 let fileCoordinator = NSFileCoordinator(filePresenter: self) 

рдЕрдиреНрдпрдерд╛, NSFilePresenter рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдЗрди рдСрдкрд░реЗрд╢рдиреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реВрдЪрдирд╛рдПрдВ рдкреНрд░рд╛рдкреНрдд рд╣реЛрдВрдЧреА, рдЬреЛ рдПрдХ рд╣реА рдереНрд░реЗрдб рдореЗрдВ рдХрд╛рдо рдХрд░рдиреЗ рдкрд░ рдЧрддрд┐рд░реЛрдз рдкреИрджрд╛ рдХрд░ рд╕рдХрддреА рд╣реИрдВред

рдбреЗрдЯрд╛ рдХреА рд╕реНрдерд┐рддрд┐ рдХреА рдирд┐рдЧрд░рд╛рдиреА рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдЗрд╕реА рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд╕рд╛рде addFilePresenter(_:) рд╡рд┐рдзрд┐ рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:

 NSFileCoordinator.addFilePresenter(self) 

рдХреЛрдИ рднреА рдмрд╛рдж рдореЗрдВ рдмрдирд╛рдИ рдЧрдИ NSFileCoordinator рдСрдмреНрдЬреЗрдХреНрдЯ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдЗрд╕ NSFilePresenter рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рди NSFileCoordinator рдФрд░ рдЗрд╕рдХреА рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реВрдЪрд┐рдд рдХрд░реЗрдЧреАред

рдбреЗрдЯрд╛ рд╕реНрдерд┐рддрд┐ рдХреА рдирд┐рдЧрд░рд╛рдиреА рд░реЛрдХрдиреЗ рдХреЗ рд▓рд┐рдП, removeFilePresenter(_:) рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ:

 NSFileCoordinator.removeFilePresenter(self) 

рдХреЛрд░ рдбреЗрдЯрд╛


рдбреЗрдЯрд╛ рд╢реЗрдпрд░рд┐рдВрдЧ рдХреЗ рд▓рд┐рдП, рдЖрдк SQLite рдФрд░, рддрджрдиреБрд╕рд╛рд░, рдХреЛрд░ рдбреЗрдЯрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд╡реЗ рд╕рд╛рдЭрд╛ рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рд╡рд╛рд▓реА рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХрд╛ рдкреНрд░рдмрдВрдзрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред NSPersistentContainer рдРрдк рдФрд░ рдРрдк рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреЗ рдмреАрдЪ рд╕рд╛рдЭрд╛ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдХреЛрд░ рдбреЗрдЯрд╛ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, NSPersistentContainer рдХрд╛ рдПрдХ рдЙрдкрд╡рд░реНрдЧ NSPersistentContainer рдФрд░ NSPersistentContainer рд╡рд┐рдзрд┐ рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░реЗрдВ, рдЬрд┐рд╕реЗ рдбреЗрдЯрд╛ рд╕реНрдЯреЛрд░ рдХрд╛ рдкрддрд╛ рд╡рд╛рдкрд╕ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП:

 class SharedPersistentContainer: NSPersistentContainer { override open class func defaultDirectoryURL() -> URL { var storeURL = FileManager.default.containerURL(forSecurityApplicationGroupIdentifier: "group.com.maxial.onemoreapp") storeURL = storeURL?.appendingPathComponent("OneMoreApp.sqlite") return storeURL! } } 

AppDelegate persistentContainer рд╕рдВрдкрддреНрддрд┐ рдореЗрдВ рдмрджрд▓рд╛рд╡ рдХрд░реЗрдВред рдпрд╣ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдпрджрд┐, рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдмрдирд╛рддреЗ рд╕рдордп, рдЙрдкрдпреЛрдЧ рдХреЛрд░ рдбреЗрдЯрд╛ рдЪреЗрдХрдмреЙрдХреНрд╕ рдХреА рдЬрд╛рдБрдЪ рдХрд░реЗрдВ ред рдЕрдм рд╣рдо SharedPersistentContainer рд╡рд░реНрдЧ рдХреА рдПрдХ рд╡рд╕реНрддреБ рд╡рд╛рдкрд╕ рдХрд░реЗрдВрдЧреЗ:

 lazy var persistentContainer: NSPersistentContainer = { let container = SharedPersistentContainer(name: "OneMoreApp") container.loadPersistentStores(completionHandler: { (storeDescription, error) in if let error = error as NSError? { fatalError("Unresolved error \(error), \(error.userInfo)") } }) return container }() 

рдЬреЛ рдХреБрдЫ рдмрдЪрд╛ рд╣реБрдЖ рд╣реИ, рдЙрд╕реЗ .xcdatamodeld рдХреЛ App рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдореЗрдВ рдЬреЛрдбрд╝рдирд╛ рд╣реИред рдиреЗрд╡рд┐рдЧреЗрдЯрд░ рдкреИрдирд▓ рдореЗрдВ .xcdatamodeld рдлрд╝рд╛рдЗрд▓ рдЪреБрдиреЗрдВред рдлрд╝рд╛рдЗрд▓ рдЗрдВрд╕реНрдкреЗрдХреНрдЯрд░ рдореЗрдВ , рд▓рдХреНрд╖реНрдп рд╕рджрд╕реНрдпрддрд╛ рдЕрдиреБрднрд╛рдЧ рдХреЗ рддрд╣рдд, рдРрдк рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреЗ рдЖрдЧреЗ рд╕реНрдерд┐рдд рдмреЙрдХреНрд╕ рдХреЛ рдЪреЗрдХ рдХрд░реЗрдВ:



рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдпреБрдХреНрдд рдРрдк рдФрд░ рдРрдк рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдПрдХ рд╣реА рд╕реНрдЯреЛрд░реЗрдЬ рдореЗрдВ рдбреЗрдЯрд╛ рдХреЛ рдкрдврд╝рдиреЗ рдФрд░ рд▓рд┐рдЦрдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдВрдЧреЗ рдФрд░ рдПрдХ рд╣реА рдореЙрдбрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред

рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдПрдХреНрд╕рдЯреЗрдВрд╢рди рд╕реЗ рдпреБрдХреНрдд рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд▓реЙрдиреНрдЪ рдХрд░рдирд╛


рдЬрдм рд╣реЛрд╕реНрдЯ рдРрдк рдПрдХ рдРрдк рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдЕрдиреБрд░реЛрдз рднреЗрдЬрддрд╛ рд╣реИ, рддреЛ рдпрд╣ рдПрдХ extensionContext рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рдЗрд╕ рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдВ рдПрдХ open(_:completionHandler:) рд╡рд┐рдзрд┐ рд╣реИ, рдЬрд┐рд╕рдХреЗ рд╕рд╛рде рдЖрдк рдХрдиреНрдЯреЗрдирд┐рдВрдЧ рдРрдк рдЦреЛрд▓ рд╕рдХрддреЗ рд╣реИрдВред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдпрд╣ рд╡рд┐рдзрд┐ рд╕рднреА рдкреНрд░рдХрд╛рд░ рдХреЗ рдРрдк рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреЗ рд▓рд┐рдП рдЙрдкрд▓рдмреНрдз рдирд╣реАрдВ рд╣реИред IOS рдкрд░, рдпрд╣ рдЯреБрдбреЗ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдФрд░ iMessage рдПрдХреНрд╕рдЯреЗрдВрд╢рди рджреНрд╡рд╛рд░рд╛ рд╕рдорд░реНрдерд┐рдд рд╣реИред iMessage Extension рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреЗрд╡рд▓ Containing App рдХреЛ рдЦреЛрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдЕрдЧрд░ рдЯреБрдбреЗ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдЗрд╕рдХреЗ рд╕рд╛рде рдПрдХ рдФрд░ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЦреЛрд▓рддрд╛ рд╣реИ, рддреЛ рдРрдк рд╕реНрдЯреЛрд░ рдореЗрдВ рдЬрдорд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрддрд┐рд░рд┐рдХреНрдд рд╕рддреНрдпрд╛рдкрди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИред

рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдПрдХреНрд╕рдЯреЗрдВрд╢рди рд╕реЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдЦреЛрд▓рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ URL рд╕реНрдХреАрдо рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛:



рдЗрд╕рдХреЗ рдмрд╛рдж, рдРрдк рдПрдХреНрд╕рдЯреЗрдВрд╢рди рд╕реЗ рдЗрд╕ рдЖрд░реЗрдЦ рдХреЗ рд╕рд╛рде open(_:completionHandler:) рд╡рд┐рдзрд┐ рдХреЛ рдХреЙрд▓ рдХрд░реЗрдВ:

 guard let url = URL(string: "OneMoreAppUrl://") else { return } extensionContext?.open(url, completionHandler: nil) 

рдЙрди рдкреНрд░рдХрд╛рд░ рдХреЗ рдРрдк рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреЗ рд▓рд┐рдП рдЬреЛ open(_:completionHandler:) рдХрд╣рддреЗ open(_:completionHandler:) рд╡рд┐рдзрд┐ рдЙрдкрд▓рдмреНрдз рдирд╣реАрдВ рд╣реИ, рдПрдХ рддрд░реАрдХрд╛ рднреА рд╣реИред рд▓реЗрдХрд┐рди рдЗрд╕ рдмрд╛рдд рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ рдХрд┐ рдРрдк рд╕реНрдЯреЛрд░ рдореЗрдВ рдЪреЗрдХ рдХрд░рдиреЗ рдкрд░ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд░рд┐рдЬреЗрдХреНрдЯ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рд╡рд┐рдзрд┐ рдХрд╛ рд╕рд╛рд░ UIResponder рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдХреА рд╢реНрд░реГрдВрдЦрд▓рд╛ рд╕реЗ UIResponder рд╣реИ рдЬрдм рддрдХ рдХрд┐ рдПрдХ UIApplication рдирд╣реАрдВ рд╣реИ рдЬреЛ UIResponder рдХреЙрд▓ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реИ:

 guard let url = URL(string: "OneMoreAppUrl://") else { return } let selectorOpenURL = sel_registerName("openURL:") var responder: UIResponder? = self while responder != nil { if responder?.responds(to: selectorOpenURL) == true { responder?.perform(selectorOpenURL, with: url) } responder = responder?.next } 

рднрд╡рд┐рд╖реНрдп рдРрдк рдПрдХреНрд╕рдЯреЗрдВрд╢рди


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

рдЗрд╕ рдкреНрд░рдХрд╛рд░, Apple рдЗрд╕ рдЙрдкрдХрд░рдг рдХреЛ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдирд╛ рдЬрд╛рд░реА рд░рдЦрддрд╛ рд╣реИ, рдЬреЛ рдЗрд╕рдХреЗ рднрд╡рд┐рд╖реНрдп рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЖрд╢рд╛рд╡рд╛рдж рдХреЛ рдкреНрд░реЗрд░рд┐рдд рдХрд░рддрд╛ рд╣реИред

рдЙрдкрдпреЛрдЧреА рд▓рд┐рдВрдХ:

рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рджрд╕реНрддрд╛рд╡реЗрдЬ
IOS рдРрдк рдФрд░ рдРрдк рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреЗ рдмреАрдЪ рдбреЗрдЯрд╛ рд╕рд╛рдЭрд╛ рдХрд░рдирд╛
iOS 8 рдРрдк рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдбреЗрд╡рд▓рдкрдореЗрдВрдЯ рдЯрд┐рдкреНрд╕

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


All Articles