
рдРрдк рдПрдХреНрд╕рдЯреЗрдВрд╢рдВрд╕ 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 рдРрдк рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдбреЗрд╡рд▓рдкрдореЗрдВрдЯ рдЯрд┐рдкреНрд╕