рдЖрдИрдУрдПрд╕ред рдЬрдм рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдирд╣реАрдВ рдЪрд▓ рд░рд╣рд╛ рд╣реЛ рддреЛ рдиреЗрдЯрд╡рд░реНрдХрд┐рдВрдЧ

рдЫрд╡рд┐


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


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


рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдЗрдП рд╢рдмреНрджрд╛рд╡рд▓реА рд╕реЗ рдирд┐рдкрдЯреЗрдВред


рдбреЗрдЯрд╛ рдЯреНрд░рд╛рдВрд╕рдлрд░ рджреЛ рджрд┐рд╢рд╛рдУрдВ рдореЗрдВ рд╣реЛрддрд╛ рд╣реИ:


  • рдбрд╛рдЙрдирд▓реЛрдб (рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдирд╛, рд╕рд░реНрд╡рд░ рд╕реЗ рдбреЗрдЯрд╛ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдирд╛),
  • рдЕрдкрд▓реЛрдб (рд╕рд░реНрд╡рд░ рдкрд░ рдбреЗрдЯрд╛ рднреЗрдЬрдирд╛)ред

рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╕рдХреНрд░рд┐рдп рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдкреГрд╖реНрдарднреВрдорд┐ рдореЗрдВ рдХрд╛рдо рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдФрдкрдЪрд╛рд░рд┐рдХ рд░реВрдк рд╕реЗ, рдЙрдирдХреЗ рдкрд╛рд╕ рдЕрдиреНрдп рд░рд╛рдЬреНрдп рд╣реИрдВ , рд▓реЗрдХрд┐рди рд╣рдо рдХреЗрд╡рд▓ рдЗрди рдореЗрдВ рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВ:


  • рдкреГрд╖реНрдарднреВрдорд┐ (рдЬрдм рдЖрд╡реЗрджрди рдХрдо рд╕реЗ рдХрдо рд╣реЛ),
  • рд╕рдХреНрд░рд┐рдп (рдЬрдм рдЕрдиреБрдкреНрд░рдпреЛрдЧ рд╕реНрдХреНрд░реАрди рдкрд░ рд╕рдХреНрд░рд┐рдп рд╣реИ)ред

рдЙрдкрдпреЛрдЧреА рдкреИрдЯрд░реНрди: рдХреЙрд▓рдмреИрдХ , рдкреНрд░рддрд┐рдирд┐рдзрд┐ ( рдХреЛрдХреЛ рдбрд┐рдЬрд╛рдЗрди рдкреИрдЯрд░реНрди , рд╡рд┐рдХрд┐рдкреАрдбрд┐рдпрд╛ рдкрд░ рдХреЙрд▓рдмреИрдХ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ )ред рдЖрдкрдХреЛ рдпрд╣ рднреА рдЬрд╛рдирдирд╛ рд╣реЛрдЧрд╛ URLSession (рд▓реЗрдЦ рдореЗрдВ, рд▓рд┐рдВрдХ рдореЗрдВ рдиреЗрдЯрд╡рд░реНрдХ рдХреЗ рд╕рд╛рде рдкреГрд╖реНрдарднреВрдорд┐ рдХреЗ рдХрд╛рдо рдХрд╛ рднреА рдЙрд▓реНрд▓реЗрдЦ рд╣реИ, рд▓реЗрдХрд┐рди рдкрд╛рд░рд┐рдд рд╣реЛрдиреЗ рдореЗрдВ)ред


рд╕рднреА рдЙрджрд╛рд╣рд░рдг рд╕реНрд╡рд┐рдлреНрдЯ 5 рдореЗрдВ рд▓рд┐рдЦреЗ рдЧрдП рд╣реИрдВ, iOS 11 рдФрд░ рдирдП (iOS 11 рдФрд░ 12 рдкрд░ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдП рдЧрдП) рдкрд░ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдирд┐рдпрдорд┐рдд HTTP рдЕрдиреБрд░реЛрдзреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рдЕрдзрд┐рдХрд╛рдВрд╢ рднрд╛рдЧ рдХреЗ рд▓рд┐рдП, рдпрд╣ рд╕рдм рдХрд╛рдо рдХрд░реЗрдЧрд╛, iOS 9 рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди "рдмрд╛рд░реАрдХрд┐рдпреЛрдВ" рд╣реИрдВред


рдиреЗрдЯрд╡рд░реНрдХ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреА рд╕рд╛рдорд╛рдиреНрдп рдпреЛрдЬрдирд╛ред URLSession


рдиреЗрдЯрд╡рд░реНрдХ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдХрдард┐рди рдирд╣реАрдВ рд╣реИ:


  • URLSessionConfiguration рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдмрдирд╛рдПрдВ;
  • URLSession рдХрд╛ рдПрдХ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдЙрджрд╛рд╣рд░рдг URLSession ;
  • рдПрдХ рдХрд╛рд░реНрдп рдмрдирд╛рдПрдВ ( session.dataTask(тАж) рдФрд░ рдЗрд╕реА рддрд░рд╣ рдХреЗ рддрд░реАрдХреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ;
  • рдХрд╛рд░реНрдп рдЕрдкрдбреЗрдЯ рдХреЗ рд▓рд┐рдП рд╕рджрд╕реНрдпрддрд╛ рд▓реЗрдВред рдЕрджреНрдпрддрди рдЕрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рд░реВрдк рд╕реЗ рдЖрддреЗ рд╣реИрдВ, рд╡реЗ рдкреНрд░рддрд┐рдирд┐рдзрд┐ рдХреЗ рдкрд╛рд╕ рдЖ рд╕рдХрддреЗ рд╣реИрдВ , рдЬреЛ рддрдм рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрдм рд╕рддреНрд░ рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдпрд╛ рд╡реЗ рдХреЙрд▓рдмреИрдХ рдореЗрдВ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ , рдЬреЛ рддрдм рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрдм рдХрд╛рд░реНрдп рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ;
  • рдЬрдм рд╣рдордиреЗ рджреЗрдЦрд╛ рдХрд┐ рдХрд╛рд░реНрдп рдкреВрд░рд╛ рд╣реЛ рдЧрдпрд╛ рд╣реИ, рддреЛ рд╣рдо рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд▓реЙрдЬрд┐рдХ рдкрд░ рд▓реМрдЯ рдЖрддреЗ рд╣реИрдВред

рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдЙрджрд╛рд╣рд░рдг рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:


 let session = URLSession(configuration: .default) let url = URL(...) let dataTask = session.dataTask(with: url) { data, response, error in ... //     //  callback,    } 

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


рдореИрдВ рддреБрд░рдВрдд рдзреНрдпрд╛рди рджреЗрддрд╛ рд╣реВрдВ рдХрд┐ рдЗрд╕ рдкрд░рд┐рджреГрд╢реНрдп рдореЗрдВ рднреА рдмрд╣реБрдд рд╕рд╛рд░реА рджрд┐рд▓рдЪрд╕реНрдк рдЪреАрдЬреЗрдВ рд╣реИрдВред рдХрднреА-рдХрднреА рдЖрдкрдХреЛ рдореБрд╢реНрдХрд┐рд▓ рдкреБрдирд░реНрдирд┐рд░реНрджреЗрд╢рди рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдХрднреА-рдХрднреА рдЖрдкрдХреЛ рдкреНрд░рд╛рдзрд┐рдХрд░рдг, рдПрд╕рдПрд╕рдПрд▓-рдкрд┐рдирд┐рдВрдЧ, рдпрд╛ рдПрдХ рд╕рд╛рде рд╕рднреА рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдЖрдк рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╣реБрдд рдХреБрдЫ рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВред рдХрд┐рд╕реА рдХрд╛рд░рдг рд╕реЗ, рдкреГрд╖реНрдарднреВрдорд┐ рд░рд╛рдЬреНрдп рдореЗрдВ рдиреЗрдЯрд╡рд░реНрдХ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рдмрд╣реБрдд рдХрдо рд╡рд░реНрдгрд┐рдд рд╣реИред

рдкреГрд╖реНрдарднреВрдорд┐ рдореЗрдВ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рддреНрд░ рдмрдирд╛рдирд╛


рдкреГрд╖реНрдарднреВрдорд┐ URLSession рдФрд░ рд╕рд╛рдорд╛рдиреНрдп рдХреЗ рдмреАрдЪ рдЕрдВрддрд░ рдХреНрдпрд╛ рд╣реИ? рдпрд╣ рдЖрд╡реЗрджрди рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рдмрд╛рд╣рд░ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рд╕рд┐рд╕реНрдЯрдо рдХреЗ рдЕрдВрджрд░ рдХрд╣реАрдВред рдЗрд╕рд▓рд┐рдП, рдЖрд╡реЗрджрди рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдкреВрд░реА рд╣реЛрдиреЗ рдкрд░ рдпрд╣ "рдорд░" рдирд╣реАрдВ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕реЗ рдмреИрдХрдЧреНрд░рд╛рдЙрдВрдб рд╕реЗрд╢рди (рд╕рд╛рде рд╣реА рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреА рд╕реНрдерд┐рддрд┐, рдЬреЛ рдереЛрдбрд╝рд╛ рднреНрд░рдорд┐рдд рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рд╣реИ) рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдЗрд╕рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрд╣:


 let configuration = URLSessionConfiguration.background(withIdentifier: "com.my.app") configuration.sessionSendsLaunchEvents = true configuration.isDiscretionary = true configuration.allowsCellularAccess = true configuration.shouldUseExtendedBackgroundIdleMode = true configuration.waitsForConnectivity = true URLSession(configuration: configuration, delegate: self, delegateQueue: nil) 

рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдореЗрдВ рдХрдИ рдЕрдиреНрдп рдкреИрд░рд╛рдореАрдЯрд░ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдпреЗ рд╕реАрдзреЗ рдкреГрд╖реНрдарднреВрдорд┐ рд╕рддреНрд░реЛрдВ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИрдВ:


  • рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ (рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝рд░ рдореЗрдВ рдкрд╛рд░рд┐рдд) рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╣реИ рдЬреЛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рдкреБрдирд░рд╛рд░рдВрдн рд╣реЛрдиреЗ рдкрд░ рдкреГрд╖реНрдарднреВрдорд┐ рд╕рддреНрд░ рд╕реЗ рдореЗрд▓ рдЦрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХреА рдЬрд╛рддреА рд╣реИред рдпрджрд┐ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдкреБрдирд░рд╛рд░рдВрдн рд╣реЛрддрд╛ рд╣реИ рдФрд░ рдЖрдк рдПрдХ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рдХреЗ рд╕рд╛рде рдПрдХ рдкреГрд╖реНрдарднреВрдорд┐ рд╕рддреНрд░ рдмрдирд╛рддреЗ рд╣реИрдВ рдЬреЛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рджреВрд╕рд░реЗ рдкреГрд╖реНрдарднреВрдорд┐ рд╕рддреНрд░ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдирдП рдореЗрдВ рдкрд┐рдЫрд▓реЗ рдПрдХ рдХреЗ рдХрд╛рд░реНрдпреЛрдВ рддрдХ рдкрд╣реБрдВрдЪ рд╣реЛрдЧреАред рдЗрд╕рд╕реЗ рдирд┐рд╖реНрдХрд░реНрд╖ рд╕рд░рд▓ рд╣реИред рд╕рд╣реА рд╕рдВрдЪрд╛рд▓рди рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдЗрд╕ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рдХреЛ рдЕрдкрдиреЗ рдЖрд╡реЗрджрди рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рд╕реНрдерд╛рдпреА (рдЖрдк рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдмрдВрдбрд▓ рдХреЗ рдПрдХ рд╡реНрдпреБрддреНрдкрдиреНрди рдЕрдиреБрдкреНрд░рдпреЛрдЧ);
  • sessionSendsLaunchEvents рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдбреЗрдЯрд╛ рдЯреНрд░рд╛рдВрд╕рдлрд░ рдкреВрд░рд╛ рд╣реЛрдиреЗ рдкрд░ рдкреГрд╖реНрдарднреВрдорд┐ рд╕рддреНрд░ рдХреЛ рдЖрд╡реЗрджрди рд╢реБрд░реВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрджрд┐ рдпрд╣ рдкреИрд░рд╛рдореАрдЯрд░ false, рд╕реЗрдЯ рд╣реИ false, рддреЛ рдЯреНрд░рд┐рдЧрд░ рдирд╣реАрдВ рд╣реЛрдЧрд╛, рдФрд░ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдЕрдЧрд▓реА рдмрд╛рд░ рд▓реЙрдиреНрдЪ рд╣реЛрдиреЗ рдкрд░ рд╕рднреА рдИрд╡реЗрдВрдЯ рдкреНрд░рд╛рдкреНрдд рд╣реЛрдВрдЧреЗред рдпрджрд┐ рдкреИрд░рд╛рдореАрдЯрд░ true , рддреЛ рдбреЗрдЯрд╛ рдЯреНрд░рд╛рдВрд╕рдлрд░ рдкреВрд░рд╛ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж, рд╕рд┐рд╕реНрдЯрдо рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рд▓реЙрдиреНрдЪ рдХрд░реЗрдЧрд╛ рдФрд░ рд╕рдВрдмрдВрдзрд┐рдд AppDelegate: application(_:handleEventsForBackgroundURLSession:completionHandler:) рд╡рд┐рдзрд┐ рдХреЛ рдХреЙрд▓ рдХрд░реЗрдЧрд╛ AppDelegate: application(_:handleEventsForBackgroundURLSession:completionHandler:) ;
  • isDiscretionary рд╕рд┐рд╕реНрдЯрдо рдХреЛ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рд╢рд╛рдпрдж рд╣реА рдХрднреА рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдмрдирд╛рддрд╛ рд╣реИред рдпрд╣, рдПрдХ рдУрд░, рдмреИрдЯрд░реА рдЬреАрд╡рди рдХреЛ рдмреЗрд╣рддрд░ рдмрдирд╛рддрд╛ рд╣реИ, рдФрд░ рджреВрд╕рд░реА рдУрд░, рдпрд╣ рдХрд╛рд░реНрдп рдХреЛ рдзреАрдорд╛ рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдпрд╛ рд╢рд╛рдпрдж рдЗрд╕реЗ рдЧрддрд┐ рджреЗрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрджрд┐ рдмрдбрд╝реА рдорд╛рддреНрд░рд╛ рдореЗрдВ рдбрд╛рдЙрдирд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рд╕рд┐рд╕реНрдЯрдо рд╡рд╛рдИрдлрд╛рдИ рд╕реЗ рдХрдиреЗрдХреНрдЯ рд╣реЛрдиреЗ рддрдХ рдХрд╛рд░реНрдп рдХреЛ рд░реЛрдХ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рдлрд┐рд░ рдзреАрдореА рдореЛрдмрд╛рдЗрд▓ рдЗрдВрдЯрд░рдиреЗрдЯ рдЦрд░реНрдЪ рдХрд┐рдП рдмрд┐рдирд╛ рдЬрд▓реНрджреА рд╕реЗ рд╕рдм рдХреБрдЫ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░ рд╕рдХрддрд╛ рд╣реИ (рдпрджрд┐ рдЗрд╕рдХреА рдЕрдиреБрдорддрд┐ рд╣реИ, рддреЛ рдЖрдЧреЗ рдХреНрдпрд╛ рд╣реИ)ред рдпрджрд┐ рдХрд╛рд░реНрдп рддрдм рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрдм рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдкреГрд╖реНрдарднреВрдорд┐ рдореЗрдВ рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдпрд╣ рдкреИрд░рд╛рдореАрдЯрд░ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ true рд╕реЗрдЯ рд╣реЛ рдЬрд╛рддрд╛ true ;
  • AllowCellularAccess - рдПрдХ рдкреИрд░рд╛рдореАрдЯрд░ рдЬреЛ рджрд┐рдЦрд╛рддрд╛ рд╣реИ рдХрд┐ рдЖрдк рдиреЗрдЯрд╡рд░реНрдХ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реЗрд▓реБрд▓рд░ рд╕рдВрдЪрд╛рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдореИрдВ рдЙрд╕рдХреЗ рд╕рд╛рде рд╕рд╛рд╡рдзрд╛рдиреА рд╕реЗ рдирд╣реАрдВ рдЦреЗрд▓рддрд╛ рдерд╛, рд▓реЗрдХрд┐рди рд╕рдореАрдХреНрд╖рд╛рдУрдВ рдХреЗ рдЕрдиреБрд╕рд╛рд░, рд╡рд╣рд╛рдБ (рдПрдХ рд╕рдорд╛рди рд╕рд┐рд╕реНрдЯрдо рд╕реНрд╡рд┐рдЪ рдХреЗ рд╕рд╛рде) рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рд░реЗрдХ рд░рдЦреА рдЬрд╛рддреА рд╣реИрдВ;
  • shouldUseExtendedBackgroundIdleModeред рдПрдХ рдЙрдкрдпреЛрдЧреА рдкреИрд░рд╛рдореАрдЯрд░ рдЬреЛ рджрд┐рдЦрд╛рддрд╛ рд╣реИ рдХрд┐ рд╕рд┐рд╕реНрдЯрдо рдХреЛ рдмреИрдХрдЧреНрд░рд╛рдЙрдВрдб рдореЗрдВ рдЬрд╛рдиреЗ рдкрд░ рд╕рд░реНрд╡рд░ рд╕реЗ рд▓рдВрдмреЗ рд╕рдордп рддрдХ рд╕рдВрдмрдВрдз рдмрдирд╛рдП рд░рдЦрдирд╛ рдЪрд╛рд╣рд┐рдПред рдирд╣реАрдВ рддреЛ рдХрдиреЗрдХреНрд╢рди рддреЛрдбрд╝ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
  • waitsForConnectivity рдПрдХ рдореЛрдмрд╛рдЗрд▓ рдбрд┐рд╡рд╛рдЗрд╕ рдореЗрдВ, рдХрдо рд╕рдордп рдХреЗ рд▓рд┐рдП рд╕рдВрдЪрд╛рд░ рдЧрд╛рдпрдм рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕ рд╕рдордп рдмрдирд╛рдП рдЧрдП рдХрд╛рд░реНрдп рдпрд╛ рддреЛ рддрдм рддрдХ рдирд┐рд▓рдВрдмрд┐рдд рдХрд┐рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдЬрдм рддрдХ рдХрд┐ рдХреЛрдИ рдХрдиреЗрдХреНрд╢рди рджрд┐рдЦрд╛рдИ рди рджреЗ, рдпрд╛ рддреБрд░рдВрдд "рдХреЛрдИ рдХрдиреЗрдХреНрд╢рди рдирд╣реАрдВ" рддреНрд░реБрдЯрд┐ рд╡рд╛рдкрд╕ рдХрд░ рджреЗрдВред рдкреИрд░рд╛рдореАрдЯрд░ рдЖрдкрдХреЛ рдЗрд╕ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдпрджрд┐ рдпрд╣ false, рддреЛ рд╕рдВрдЪрд╛рд░ рдХреА рдЕрдиреБрдкрд╕реНрдерд┐рддрд┐ рдореЗрдВ рдХрд╛рд░реНрдп рддреБрд░рдВрдд рдПрдХ рддреНрд░реБрдЯрд┐ рдХреЗ рд╕рд╛рде рдЯреВрдЯ рдЬрд╛рдПрдЧрд╛ред рдпрджрд┐ true , рддреЛ рдПрдХ рд▓рд┐рдВрдХ рджрд┐рдЦрд╛рдИ рджреЗрдиреЗ рддрдХ рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░реЗрдВред
  • рдЕрдВрддрд┐рдо рдкрдВрдХреНрддрд┐ (рд╕рддреНрд░ рдЖрд░рдВрднреАрдХрд░рдг) рдореЗрдВ рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдкреИрд░рд╛рдореАрдЯрд░, рдкреНрд░рддрд┐рдирд┐рдзрд┐ рд╣реЛрддрд╛ рд╣реИред рдЙрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ - рдереЛрдбрд╝рд╛ рдФрд░ред

рдбреЗрд▓рд┐рдЧреЗрдЯ рдмрдирд╛рдо рдХреЙрд▓рдмреИрдХ


рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВрдиреЗ рдКрдкрд░ рдХрд╣рд╛ рдерд╛, рдПрдХ рдХрд╛рд░реНрдп / рд╕рддреНрд░ рд╕реЗ рдШрдЯрдирд╛рдУрдВ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рджреЛ рддрд░реАрдХреЗ рд╣реИрдВред рдкрд╣рд▓рд╛ рдХреЙрд▓рдмреИрдХ рд╣реИ:


 session.dataTask(with: request) { data, response, error in ...   } 

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


рдПрдХ рд╕рддреНрд░ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХрд╛ рджреВрд╕рд░рд╛ рд╡рд┐рдХрд▓реНрдк рдкреНрд░рддрд┐рдирд┐рдзрд┐ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╣реИ ред рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рд╣рдореЗрдВ рдПрдХ рд╡рд░реНрдЧ рдмрдирд╛рдирд╛ рд╣реЛрдЧрд╛ рдЬреЛ URLSessionDataDelegate рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдФрд░ (рдпрд╛) рдЕрдиреНрдп рдХреЛ рдкрд╛рд╕ рдореЗрдВ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИ (рд╡рд┐рднрд┐рдиреНрди рдкреНрд░рдХрд╛рд░ рдХреЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдереЛрдбрд╝рд╛ рдЕрд▓рдЧ рд╣реИрдВ)ред рдЗрд╕ рд╡рд░реНрдЧ рдХреЗ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХрд╛ рд╕рдВрджрд░реНрдн рдПрдХ рд╕рддреНрд░ рдореЗрдВ рд░рд╣рддрд╛ рд╣реИ, рдФрд░ рдЗрд╕рдХреЗ рддрд░реАрдХреЛрдВ рдХреЛ рдмреБрд▓рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрдм рдШрдЯрдирд╛рдУрдВ рдХреЛ рдкреНрд░рддрд┐рдирд┐рдзрд┐ рдХреЛ рдкрд╛рд╕ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд▓рд┐рдВрдХ рдХреЛ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝рд░ рджреНрд╡рд╛рд░рд╛ рд╕рддреНрд░ рдореЗрдВ рдкрдВрдЬреАрдХреГрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, self.


 URLSession(configuration: configuration, delegate: self, delegateQueue: nil) 

рдирд┐рдпрдорд┐рдд рд╕рддреНрд░реЛрдВ рдХреЗ рд▓рд┐рдП, рджреЛрдиреЛрдВ рд╡рд┐рдзрд┐рдпрд╛рдБ рдЙрдкрд▓рдмреНрдз рд╣реИрдВред рдкреГрд╖реНрдарднреВрдорд┐ рд╕рддреНрд░ рдХреЗрд╡рд▓ рдПрдХ рдкреНрд░рддрд┐рдирд┐рдзрд┐ рджреНрд╡рд╛рд░рд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред


рддреЛ, рд╣рдордиреЗ рд╕рддреНрд░ рдХреА рд╕реНрдерд╛рдкрдирд╛ рдХреА, рдЗрд╕реЗ рдмрдирд╛рдпрд╛, рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ рдХреБрдЫ рдХреИрд╕реЗ рдбрд╛рдЙрдирд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛рдПред


рдкреГрд╖реНрдарднреВрдорд┐ рдореЗрдВ рдбреЗрдЯрд╛ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдиреЗ рдХреА рд╕рд╛рдорд╛рдиреНрдп рдпреЛрдЬрдирд╛


рдбреЗрдЯрд╛ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдЖрдорддреМрд░ рдкрд░ рдПрдХ (URLRequest) рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдЗрд╕рдореЗрдВ рдЖрд╡рд╢реНрдпрдХ рдкреИрд░рд╛рдореАрдЯрд░ / рд╣реЗрдбрд░ / рдбреЗрдЯрд╛ рджрд░реНрдЬ рдХрд░рддреЗ рд╣реБрдП, URLSessionDownloadTask рдФрд░ рдЗрд╕реЗ рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рд▓рд┐рдП рдЪрд▓рд╛рдПрдВред рдХреБрдЫ рдЗрд╕ рддрд░рд╣:


 var request = URLRequest(...) //  request,   let task = session.downloadTask(with: request) if #available(iOS 11, *) { task.countOfBytesClientExpectsToSend = [approximate size of request] task.countOfBytesClientExpectsToReceive = [approximate size of response] } task.resume() 

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


resume() рдмрд╛рдж resume() рдХрд╛рд░реНрдп рдирд┐рд╖реНрдкрд╛рджрди рдкрд░ рдЬрд╛рдПрдЧрд╛ред рдбреЗрдЯрд╛ рдЯреНрд░рд╛рдВрд╕рдлрд░ рдХреЗ рджреМрд░рд╛рди, рдкреНрд░рдЧрддрд┐ рдкреНрд░рд╕рд╛рд░рд┐рдд рд╣реЛрдЧреА (рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ - рдиреАрдЪреЗ рдкрдврд╝реЗрдВ, рд╡рд╣рд╛рдВ рднреА рд╡рд┐рдХрд▓реНрдк рд╣реИрдВ), рдФрд░ рдкреВрд░рд╛ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж рдХрдИ рдкреНрд░рддрд┐рдирд┐рдзрд┐ рддрд░реАрдХреЛрдВ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдЙрдирдореЗрдВ рд╕реЗ, рдПрдХ рдмрд╣реБрдд рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ:


 urlSession(_:downloadTask:didFinishDownloadingTo:) 

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


рдЗрд╕ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╡рд┐рдзрд┐ рдХреЗ рдмрд╛рдж, рдПрдХ рдФрд░ рд╡рд┐рдзрд┐ рдХреЛ рдмреБрд▓рд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдЬрд╣рд╛рдВ рддреНрд░реБрдЯрд┐ рддрдм рд╣реЛрдЧреА рдЬрдм рдпрд╣ рд╣реЛрддреА рд╣реИред рдпрджрд┐ рдХреЛрдИ error рдирд╣реАрдВ error , рддреЛ error nil. рд╣реЛрдЧреА nil.


 urlSession(_:task:didCompleteWithError:) 

рдФрд░ рдЕрдВрдд рдореЗрдВ рдХреНрдпрд╛ рд╣реЛрддрд╛ рд╣реИ, рдЕрдЧрд░ рдЖрд╡реЗрджрди рдкреГрд╖реНрдарднреВрдорд┐ рдореЗрдВ рдЪрд▓рд╛ рдЧрдпрд╛ рдпрд╛ рдкреВрд░рд╛ рд╣реЛ рдЧрдпрд╛? рдбреЗрд▓рд┐рдЧреЗрдЯ рдХреЗ рддрд░реАрдХреЛрдВ рдХреЛ рдХреИрд╕реЗ рдХрд╣реЗрдВ? рдпрд╣ рдпрд╣рд╛рдБ рдЖрд╕рд╛рди рдирд╣реАрдВ рд╣реИред


рдпрджрд┐ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рджреНрд╡рд╛рд░рд╛ рд▓реЙрдиреНрдЪ рдХреА рдЧрдИ рдХрд┐рд╕реА рдЪреАрдЬрд╝ рдХрд╛ рдбрд╛рдЙрдирд▓реЛрдб рд╕рдорд╛рдкреНрдд рд╣реЛ рдЧрдпрд╛ рд╣реИ рдФрд░ sessionSendsLaunchEvents рдлреНрд▓реИрдЧ рд╕реЗрд╢рди рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдореЗрдВ рд╣реИ, рддреЛ рд╕рд┐рд╕реНрдЯрдо рдПрдкреНрд▓рд┐рдХреЗрд╢рди (рдкреГрд╖реНрдарднреВрдорд┐ рдореЗрдВ) рд▓реЙрдиреНрдЪ рдХрд░реЗрдЧрд╛ рдФрд░ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░реЗрдЧрд╛ (_: handleEventsForBorgroundurLSLSession: completeHandler :) рд╡рд┐рдзрд┐ AppDelegate, ред


рдЗрд╕ рд╡рд┐рдзрд┐ рдореЗрдВ, рдЖрд╡реЗрджрди рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП:


  • рдкреВрд░реНрдгрд╣реИрдВрдбрд▓рд░ рдХреЛ рдмрдЪрд╛рдПрдВ (рдЗрд╕реЗ рдХреБрдЫ рд╕рдордп рдмрд╛рдж, рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдФрд░ рдореБрдЦреНрдп рдзрд╛рдЧреЗ рдореЗрдВ рдХреЙрд▓ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА);
  • рдкрд╣рд▓реЗ рдХреА рддрд░рд╣ рдПрдХ рд╣реА рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рдХреЗ рд╕рд╛рде рдПрдХ рдкреГрд╖реНрдарднреВрдорд┐ рд╕рддреНрд░ рдХреЛ рдлрд┐рд░ рд╕реЗ рдмрдирд╛рдПрдВ (рдФрд░ рдХрдИ рдкреГрд╖реНрдарднреВрдорд┐ рд╕рддреНрд░ рд╣реЛрдиреЗ рдХреА рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдЗрд╕ рдкрджреНрдзрддрд┐ рдХреЛ рдкрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ);
  • рдПрдХ рдирдП рдмрдирд╛рдП рдЧрдП рд╕рддреНрд░ рдореЗрдВ, рдкреНрд░рддрд┐рдирд┐рдзрд┐ (рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рдмрд╣реБрдд рдорд╣рддреНрд╡рдкреВрд░реНрдг urlSession(_:downloadTask:didFinishDownloadingTo:) ) рдореЗрдВ urlSession(_:downloadTask:didFinishDownloadingTo:) , рдЖрдкрдХреЛ рдЙрдиреНрд╣реЗрдВ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдХреА рдЬрд╝рд░реВрд░рдд рд╣реИ, рдЬрд╣рд╛рдБ рдЖрдк рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреА рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдмрдирд╛рдПрдБ;
  • рд╕рднреА рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдПрдХ рдФрд░ рдкреНрд░рддрд┐рдирд┐рдзрд┐ рд╡рд┐рдзрд┐ рдХреЛ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕реЗ urlSessionDidFinishEvents(forBackgroundURLSession:) рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдЬрд┐рд╕рдореЗрдВ рдЖрдкрдХреЛ рдкрд╣рд▓реЗ urlSessionDidFinishEvents(forBackgroundURLSession:) рдХреЛ рдХреЙрд▓ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ completionHandler.

рдпрд╣ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИред DispatchQueue.main.async(...) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдореБрдЦреНрдп рдереНрд░реЗрдб рдореЗрдВ DispatchQueue.main.async(...) рдХреЛ рдХреЙрд▓ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИред

рдЙрд╕реА рд╕рдордп, рдЖрдкрдХреЛ рдпрд╣ рдпрд╛рдж рд░рдЦрдирд╛ рд╣реЛрдЧрд╛ рдХрд┐ рдпрд╣ рд╕рдм рдЙрд╕ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рд╣реЛрддрд╛ рд╣реИ рдЬреЛ рдкреГрд╖реНрдарднреВрдорд┐ рдореЗрдВ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдФрд░ рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рд╣реИ рдХрд┐ рд╕рдВрд╕рд╛рдзрди (рдирд┐рд╖реНрдкрд╛рджрди рд╕рдордп) рд╕реАрдорд┐рдд рд╣реИрдВред рдЙрди рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдЬрд▓реНрджреА рд╕реЗ рд╕рд╣реЗрдЬреЗрдВ рдЬрд╣рд╛рдБ рдЖрдкрдХреЛ рдЬрд╝рд░реВрд░рдд рд╣реИ, рдЖрд╡реЗрджрди рдореЗрдВ рдЖрд╡рд╢реНрдпрдХ рдЕрд╡рд╕реНрдерд╛рдУрдВ рдХреЛ рдмрджрд▓реЗрдВ рдФрд░ рдмрдВрдж рдХрд░реЗрдВ - рдпрд╣ рд╕рдм рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдпрджрд┐ рдЖрдк рдЕрдзрд┐рдХ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк UIApplication.beginBackgroundTask() рдпрд╛ рдирдП рдмреИрдХрдЧреНрд░рд╛рдЙрдВрдб UIApplication.beginBackgroundTask() рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред


рд╕рд╛рдорд╛рдиреНрдп рдкреГрд╖реНрдарднреВрдорд┐ рдбреЗрдЯрд╛ рднреЗрдЬрдиреЗ рдХреА рдпреЛрдЬрдирд╛


рд╕рд░реНрд╡рд░ рдкрд░ рдлрд╛рдЗрд▓реЗрдВ рдЕрдкрд▓реЛрдб рдХрд░рдирд╛ рднреА рдкреНрд░рддрд┐рдмрдВрдзреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдпрд╣ рд╕рднреА рдПрдХ рд╕рдорд╛рди рддрд░реАрдХреЗ рд╕реЗ рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ: рд╣рдо рдПрдХ рдЕрдиреБрд░реЛрдз рдмрдирд╛рддреЗ рд╣реИрдВ, рдПрдХ рдХрд╛рд░реНрдп рдмрдирд╛рддреЗ рд╣реИрдВ (рдЕрдм рдпрд╣ URLSessionUploadTask) рд╣реЛрдЧрд╛ URLSessionUploadTask) , рдХрд╛рд░реНрдп рдЪрд▓рд╛рдПрдБред рдХреНрдпрд╛ рд╕рдорд╕реНрдпрд╛ рд╣реИ?


рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рд╣рдо рдЕрдиреБрд░реЛрдз рдХреИрд╕реЗ рдмрдирд╛рддреЗ рд╣реИрдВред рдЖрдорддреМрд░ рдкрд░ рд╣рдо рднреЗрдЬреЗ рдЧрдП рдбреЗрдЯрд╛ рдХреЛ рдбреЗрдЯрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдмрдирд╛рддреЗ рд╣реИрдВред рдкреГрд╖реНрдарднреВрдорд┐ URLSession, рдпрд╣ рдирд╣реАрдВ рдЬрд╛рдирддрд╛ рдХрд┐ рдЗрд╕рдХреЗ рд╕рд╛рде рдХреИрд╕реЗ рдХрд╛рдо рдХрд┐рдпрд╛ рдЬрд╛рдПред рдФрд░ рдПрдХ рд╕реНрдЯреНрд░реАрдорд┐рдВрдЧ рдЕрдиреБрд░реЛрдз ( uploadTask(withStreamedRequest:) ) рдХреЗ рд╕рд╛рде рдпрд╣ рднреА рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдХреИрд╕реЗред рдпрд╣ рд╕рдм рдХреБрдЫ рд▓рд┐рдЦрдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ рдЬреЛ рдПрдХ рдлрд╝рд╛рдЗрд▓ рдХреЛ рднреЗрдЬрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдФрд░ рдлрд╝рд╛рдЗрд▓ рд╕реЗ рдПрдХ рднреЗрдЬреЗрдВ рдХрд╛рд░реНрдп рдмрдирд╛рдПрдВред рдпрд╣ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдХрд┐рд╕реА рднреА рддрд░рд╣ рдмрд╛рд╣рд░ рдирд┐рдХрд▓рддрд╛ рд╣реИ:


 var fileUrl = methodThatSavesFileAndRetursItsUrl(...) var request = URLRequest(...) let task = session.uploadTask(with: request, fromFile: fileUrl) task.resume() 

рд▓реЗрдХрд┐рди рдЖрдХрд╛рд░ рдХреЛ рдкрдВрдЬреАрдХреГрдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, URLSession рдЗрд╕реЗ рд╕реНрд╡рдпрдВ рджреЗрдЦ рд╕рдХрддрд╛ рд╣реИред рднреЗрдЬрдиреЗ рдХреЗ рдмрд╛рдж, рд╡рд╣реА рдкреНрд░рддрд┐рдирд┐рдзрд┐ рд╡рд┐рдзрд┐ urlSession(_:task:didCompleteWithError:) рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рддреЗ рд╕рдордп urlSession(_:task:didCompleteWithError:) ред рдФрд░ рдареАрдХ рдЙрд╕реА рддрд░рд╣, рдпрджрд┐ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рднреЗрдЬрдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рджреМрд░рд╛рди рдмреИрдХрдЧреНрд░рд╛рдЙрдВрдб рдореЗрдВ рдЪрд▓рд╛ рдЧрдпрд╛ рдпрд╛ рдЪрд▓рд╛ рдЧрдпрд╛, рддреЛ application(_:handleEventsForBackgroundURLSession:completionHandler:), рдЖ рдЬрд╛рдПрдЧрд╛ application(_:handleEventsForBackgroundURLSession:completionHandler:), рдЬрд┐рд╕реЗ рдбреЗрдЯрд╛ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рддреЗ рд╕рдордп рд╕рдорд╛рди рдирд┐рдпрдореЛрдВ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рд╣реА рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред


рдПрдХ рдЖрд╡реЗрджрди рдкреВрд░рд╛ рдХреНрдпрд╛ рд╣реИ?


рдкреГрд╖реНрдарднреВрдорд┐ рдбрд╛рдЙрдирд▓реЛрдб рдФрд░ рднрд╛рд╡рдирд╛рдУрдВ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдкреВрд░рд╛ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ (рдиреЗрдЯрд╡рд░реНрдХ рдХреЗ рд╕рд╛рде рдкреГрд╖реНрдарднреВрдорд┐ рдХрд╛ рдХрд╛рдо рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЬреАрд╡рд┐рдд рд░рд╣рдиреЗ рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ)ред рдпрд╣ рдХреИрд╕реЗ рдХрд░рдирд╛ рд╣реИ? рд╢реБрд░реВ рдореЗрдВ - рдХреЛрдИ рд░рд╛рд╕реНрддрд╛ рдирд╣реАрдВред рдпрд╣реА рд╣реИ, рдХреЛрдИ рдирд┐рдпрдорд┐рдд (рдЕрдзрд┐рдХреГрдд, рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ) рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реИ рдЬреЛ рдЗрд╕реЗ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛ред рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рд░реЗрдХ рдХрд╣рд╛рдВ рд╣реИред


  • рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдХреЗрд╡рд▓ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдмрдВрдж рдХрд░рдирд╛ (рд╣реЛрдо рдмрдЯрди рджрдмрд╛рдХрд░ рдпрд╛ рдПрдХ рдЙрдЪрд┐рдд рдЗрд╢рд╛рд░рд╛ рдХрд░рдХреЗ) рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ред рдпрд╣ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдирд╣реАрдВ рдорд╛рд░реЗрдЧрд╛, рд▓реЗрдХрд┐рди рдХреЗрд╡рд▓ рдЗрд╕реЗ рдкреГрд╖реНрдарднреВрдорд┐ рдкрд░ рднреЗрдЬреЗрдВред рдкреГрд╖реНрдарднреВрдорд┐ рд╕рддреНрд░ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХрд╛ рдЕрд░реНрде рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣ рддрдм рднреА рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдЬрдм рдЖрд╡реЗрджрди "рдкреВрд░реА рддрд░рд╣ рд╕реЗ, рдкреВрд░реА рддрд░рд╣ рд╕реЗ" рдорд╛рд░рд╛ рдЧрдпрд╛ рд╣реЛ;
  • рджреВрд╕рд░реА рдмрд╛рдд, рдпрд╣ рдЕрд╕рдВрднрд╡ рд╣реИ рдХрд┐ рдПрдХ рдбрд┐рдмрдЧрд░ (AppCode, Xcode рдпрд╛ рд╕рд┐рд░реНрдл LLDB) рдЬреБрдбрд╝рд╛ рд╣реБрдЖ рд╣реИ, рдпрд╣ "рдмрдВрдж" рд╣реЛрдиреЗ рдХреЗ рдХреБрдЫ рд╕рдордп рдмрд╛рдж рднреА рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдорд░рдиреЗ рдирд╣реАрдВ рджреЗрдЧрд╛;
  • рддреАрд╕рд░рд╛, рдЖрдк рдЯрд╛рд╕реНрдХрдмрд╛рд░ (рдХрд╛рд░реНрдп рдкреНрд░рдмрдВрдзрдХ, рдбрдмрд▓ рд╣реЛрдо рдпрд╛ рдзреАрдореА рдЧрддрд┐ рд╕реЗ "рдКрдкрд░") рд╕реЗ рдЖрд╡реЗрджрди рдХреЛ рдирд╣реАрдВ рдорд╛рд░ рд╕рдХрддреЗред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдПрдХ рдорд╛рд░реЗ рдЧрдП рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ "рд╕реНрдерд╛рдпреА рд░реВрдк рд╕реЗ" рдорд╛рд░рд╛ рдЬрд╛рдирд╛ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рд╕рд┐рд╕реНрдЯрдо рдмрдВрдж рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕ рддрд░рд╣ рдХреА рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХреЗ рд╕рд╛рде, рдЖрд╡реЗрджрди рд╕реЗ рдЬреБрдбрд╝реЗ рдкреГрд╖реНрдарднреВрдорд┐ рд╕рддреНрд░;
  • рдЪреМрдерд╛, рдЖрдкрдХреЛ рдПрдХ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдбрд┐рд╡рд╛рдЗрд╕ рдкрд░ рдЗрд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рд▓реЙрдЧрд┐рдВрдЧ (рдиреАрдЪреЗ рджреЗрдЦреЗрдВ) рдХреЗ рд╕рд╛рде рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реИ рдФрд░ рдпрд╣ рдЕрдзрд┐рдХ рдбреАрдмрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдпрд╣ рддрд░реНрдХ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рд╕рд┐рдореНрдпреБрд▓реЗрдЯрд░ рдХреЛ рднреА рдЙрд╕реА рддрд░рд╣ рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдЬреИрд╕рд╛ рд╡рд╣ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рд▓реЗрдХрд┐рди рдореИрдВрдиреЗ рдЕрдХрдердиреАрдп рд╡рд┐рд╖рдорддрд╛рдУрдВ рдкрд░ рдзреНрдпрд╛рди рджрд┐рдпрд╛ рдХрд┐ рдореИрдВ рдХрд┐рд╕реА рдЪреАрдЬрд╝ рдХреЗ рд╕рд╛рде рд╡реНрдпрд╛рдЦреНрдпрд╛ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рд▓реЗрдХрд┐рди рд╕рд┐рдореНрдпреБрд▓реЗрдЯрд░ рдХреА рдЧрдбрд╝рдмрдбрд╝ рд╣реИред рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдбрд┐рд╡рд╛рдЗрд╕ рдкрд░ рдкрд░реАрдХреНрд╖рдг;
  • рдПрдХрдорд╛рддреНрд░ рдЙрдЪрд┐рдд рддрд░реАрдХрд╛ рд╣реИ рдХрд┐ рдЖрдк рдЬреЛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рд╡рд╣ exit(int) рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд╕рд╛рде рд╣реИред рдЬреИрд╕рд╛ рдХрд┐ рд╕рднреА рдЬрд╛рдирддреЗ рд╣реИрдВ, рдЖрдк рдЗрд╕реЗ рд╕рд░реНрд╡рд░ рдкрд░ рдЕрдкрд▓реЛрдб рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ ( рдпрд╣ рд╕реАрдзреЗ рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХрд╛ рдЦрдВрдбрди рдХрд░рддрд╛ рд╣реИ ), рд▓реЗрдХрд┐рди рдЕрднреА рдХреЗ рд▓рд┐рдП рд╣рдо рд╕рд┐рд░реНрдл рдкрд░реАрдХреНрд╖рдг рдХрд░ рд░рд╣реЗ рд╣реИрдВ - рдпрд╣ рдбрд░рд╛рд╡рдирд╛ рдирд╣реАрдВ рд╣реИред рдореИрдВ рдЗрд╕ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рджреЛ рдЙрдЪрд┐рдд рд╡рд┐рдХрд▓реНрдк рдЬрд╛рдирддрд╛ рд╣реВрдВ:
    • рдЗрд╕реЗ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ AppDelegate.applicationDidEnterBackground(_:) рд╡рд┐рдзрд┐ рдореЗрдВ рдХреЙрд▓ рдХрд░реЗрдВ рддрд╛рдХрд┐ рд╕реНрдкреНрд░рд┐рдВрдЧрдмреЛрд░реНрдб рд╕реЗ рдмрд╛рд╣рд░ рдирд┐рдХрд▓рдиреЗ рдХреЗ рддреБрд░рдВрдд рдмрд╛рдж рдЖрд╡реЗрджрди рдХреЛ рдорд╛рд░ рджрд┐рдпрд╛ рдЬрд╛рдП;
    • рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдореЗрдВ рдПрдХ рдШрдЯрдХ рдмрдирд╛рдПрдВ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ рдмрдЯрди, рдпрд╛ рдПрдХ рдЗрд╢рд╛рд░реЗ рдкрд░ рдПрдХ рдХреНрд░рд┐рдпрд╛ рд▓рдЯрдХрд╛рдПрдВ), рдЬрд┐рд╕ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рдХреЗ, exit(...).
      рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдорд╛рд░ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдФрд░ рдиреЗрдЯрд╡рд░реНрдХ рдХреЗ рд╕рд╛рде рдкреГрд╖реНрдарднреВрдорд┐ рдХрд╛ рдХрд╛рдо рдЬрд╛рд░реА рд░рд╣рдирд╛ рдЪрд╛рд╣рд┐рдПред рдФрд░, рдХреБрдЫ рд╕рдордп рдмрд╛рдж, рд╣рдореЗрдВ application(_:handleEventsForBackgroundURLSession:completionHandler:). рдХреЙрд▓ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП application(_:handleEventsForBackgroundURLSession:completionHandler:).

рдпрджрд┐ рдЖрдк Xcode рдбрд┐рдмрдЧ рдХрдВрд╕реЛрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рддреЛ рдЖрд╡реЗрджрди рдХреИрд╕реЗ рд▓реЙрдЧ рдХрд░реЗрдВ?


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


рдЖрдк рдкреНрд░реЛрдЯреЛрдХреЙрд▓ (рд▓реЙрдЧ, рд▓реЙрдЧ) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЙрдирдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд▓рд┐рдП рдХрдИ рд╡рд┐рдХрд▓реНрдк рд╣реИрдВ:


  • print. рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдЕрдХреНрд╕рд░ "рдЪрд▓реЛ рдЬрд▓реНрджреА рд╕реЗ рдХреБрдЫ рдкрд╛рдиреЗ рджреЛ" рдХреЗ рд░реВрдк рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЕрд╕рдВрднрд╡ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдбрд┐рд╡рд╛рдЗрд╕ рдкрд░ рдХрдВрд╕реЛрд▓ рддрдХ рдкрд╣реБрдВрдЪ рдирд╣реАрдВ рд╣реИ, рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдорд╛рд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
  • NSLog. рдпрд╣ рдХрд╛рдо рдХрд░реЗрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рддреАрд╕рд░реА рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред
  • os_log. рд╕рдмрд╕реЗ рд╕рд╣реА рд╡рд┐рдзрд┐ рдЬреЛ рдЖрдкрдХреЛ рд▓реЙрдЧ рдХреЛ рдареАрдХ рд╕реЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИ, рдЙрдиреНрд╣реЗрдВ рд╡рд╛рдВрдЫрд┐рдд рдкреНрд░рдХрд╛рд░ рд╕реЗ рдЪрд┐рдкрдХрд╛рдПрдВ, рдбрд┐рдмрдЧрд┐рдВрдЧ рдХреЗ рдмрд╛рдж рдЕрдХреНрд╖рдо рдХрд░реЗрдВ, рдХреЛрдб рдХреЛ рд╕реНрд╡рдпрдВ рдХрд╛рдЯреЗ рдмрд┐рдирд╛, рдФрд░ рдЗрд╕реА рддрд░рд╣ред

рдЪреЗрддрд╛рд╡рдиреА! os_log рд╕рд╛рде рд╕рдорд╕реНрдпрд╛рдПрдВ рд╣реИрдВ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдбрд┐рдмрдЧ рд▓реЙрдЧ рдХреА рдХрдореА) рдЬреЛ рдХреЗрд╡рд▓ рд╕рд┐рдореНрдпреБрд▓реЗрдЯрд░ рдореЗрдВ рдЦреЗрд▓рд╛ рдЬрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕ рдбрд┐рд╡рд╛рдЗрд╕ рдкрд░ рдирд╣реАрдВ рдЦреЗрд▓рд╛ рдЬрд╛рддрд╛ рд╣реИред рдбрд┐рд╡рд╛рдЗрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред

os_log, рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд░реЗрдВ os_log, рдЗрд╕реЗ Apple рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг рдореЗрдВ рд╕рд╣реА рддрд░реАрдХреЗ рд╕реЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдХрд╛ рддрд░реАрдХрд╛ рдкрдврд╝реЗрдВред рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рдЖрдкрдХреЛ debug рдФрд░ info рд▓реЙрдЧ рдХреЛ рд╕рдХреНрд╖рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рд╡реЗ рдЫрд┐рдкреЗ рд╣реБрдП рд╣реИрдВред


рдбреЗрдЯрд╛ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдиреЗ рдпрд╛ рднреЗрдЬрдиреЗ рдХреА рдкреНрд░рдЧрддрд┐ рдкрд░ рдирдЬрд╝рд░ рд░рдЦрдирд╛


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


  • рднреЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ urlSession(_:task:didSendBodyData:totalBytesSent:totalBytesExpectedToSend:) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ
  • рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдорд╛рди urlSession(_:downloadTask:didWriteData:totalBytesWritten:totalBytesExpectedToWrite:) рд╡рд┐рдзрд┐ рд╣реИ urlSession(_:downloadTask:didWriteData:totalBytesWritten:totalBytesExpectedToWrite:)

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


рджреВрд╕рд░реА рд╡рд┐рдзрд┐ рдЕрдзрд┐рдХ рд░реЛрдЪрдХ рд╣реИред рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рдХрд╛рд░реНрдп рдЯрд╛рдЗрдк Progress рдХреА рд╡рд╕реНрддреБ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ (рдпрд╣ рдлреАрд▓реНрдб task.progress рдореЗрдВ рдирд┐рд╣рд┐рдд рд╣реИ), рдЬреЛ рдбреЗрдЯрд╛ рдЯреНрд░рд╛рдВрд╕рдлрд░ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╕рд╣рд┐рдд рдПрдХ рдордирдорд╛рдиреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреА рдирд┐рдЧрд░рд╛рдиреА рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рд╡рд╣ рдХреИрд╕реЗ рджрд┐рд▓рдЪрд╕реНрдк рд╣реИ? рджреЛ рдмрд╛рддреЗрдВ:


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

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


рдПрдХ рдирд┐рдпрдорд┐рдд рд╕рддреНрд░ рд╕реЗ рдПрдХ рдкреГрд╖реНрдарднреВрдорд┐ рд╕рддреНрд░ рдХреЗ рд▓рд┐рдП "рд╕реНрдерд╛рдирд╛рдВрддрд░рдг" рдХрд╛рд░реНрдп


рд╡реИрд╕реЗ, рдкреГрд╖реНрдарднреВрдорд┐ рд╕рддреНрд░реЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рдЕрдзрд┐рдХ рдХрдард┐рди рд╣реИред рд▓реЗрдХрд┐рди рдпрд╣ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИ! рдПрдХ рднреА рдХрд╛рд░реНрдп рдЦреЛ рдирд╣реАрдВ рдЬрд╛рдПрдЧрд╛, рдХреНрдпрд╛ рд╣рдо рдХрднреА рднреА рд╣рдорд╛рд░реЗ рджреНрд╡рд╛рд░рд╛ рдЕрдиреБрд░реЛрдзрд┐рдд рд╕рднреА рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВрдЧреЗ, рд╣рдореЗрд╢рд╛ рдкреГрд╖реНрдарднреВрдорд┐ рд╕рддреНрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреНрдпреЛрдВ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ?


рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдЙрд╕рдХреА рдЦрд╛рдорд┐рдпрд╛рдВ рд╣реИрдВ, рдФрд░ рдЧрдВрднреАрд░ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ рдкреГрд╖реНрдарднреВрдорд┐ рд╕рддреНрд░ рдзреАрдорд╛ рд╣реИред рдореЗрд░реЗ рдкреНрд░рдпреЛрдЧреЛрдВ рдореЗрдВ, рдЧрддрд┐ рдХрдИ рдмрд╛рд░ рднрд┐рдиреНрди рд╣реБрдИред рджреВрд╕рд░реЗ, рдХрд┐рд╕реА рдХрд╛рд░реНрдп рдХреА рдкреГрд╖реНрдарднреВрдорд┐ рдирд┐рд╖реНрдкрд╛рджрди рдореЗрдВ рджреЗрд░реА рд╣реЛ рд╕рдХрддреА рд╣реИ (рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдпрджрд┐ isDiscretionary рдкреИрд░рд╛рдореАрдЯрд░ isDiscretionary , рдЬреЛ, рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВрдиреЗ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рд╣реИ, рдкреГрд╖реНрдарднреВрдорд┐ рдореЗрдВ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЪрд▓рдиреЗ рдХреЗ рджреМрд░рд╛рди рдмрдирд╛рдП рдЧрдП рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рд╣рдореЗрд╢рд╛ true рд╣реЛрддрд╛ true ред


рдЗрд╕рд▓рд┐рдП, рд╣рд░ рдмрд╛рд░ рдЬрдм рдЖрдк рдХреЛрдИ рдХрд╛рд░реНрдп рдмрдирд╛рддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рдпрд╣ рд╕рдордЭрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ рдХрд┐ рдЗрд╕рдХреЗ рдХрд╛рд░реНрдп рдХреЗ рд▓рд┐рдП рдХреНрдпрд╛ рдорд╛рдкрджрдВрдб рд╣реИрдВ, рдЬрд╣рд╛рдВ рдЗрд╕реЗ рдЬреЛрдбрд╝рдирд╛ рд╣реИ, рдирд┐рдпрдорд┐рдд рдпрд╛ рдкреГрд╖реНрдарднреВрдорд┐ рд╕рддреНрд░ рдХреЗ рд▓рд┐рдПред рд╕рд╛рдорд╛рдиреНрдп рддреЗрдЬреА рд╕реЗ рдЪрд▓рддрд╛ рд╣реИ, рддреБрд░рдВрдд рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИред рдкреГрд╖реНрдарднреВрдорд┐ - рдЕрдм, рддреБрд░рдВрдд рдирд╣реАрдВ, рд▓реЗрдХрд┐рди рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рджреНрд╡рд╛рд░рд╛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдмрдВрдж рдХрд░рдиреЗ рдкрд░ рдЙрд╕реЗ рдирд╣реАрдВ рдорд╛рд░рд╛ рдЬрд╛рдПрдЧрд╛ред


рдпрджрд┐ рдХреЛрдИ рд╕реНрдкрд╖реНрдЯ рд╕рдордЭ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдХрд╛рд░реНрдп рдкреГрд╖реНрдарднреВрдорд┐ рд╕рддреНрд░ рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдмрд╣реБрдд рдмрдбрд╝реА рдорд╛рддреНрд░рд╛ рдореЗрдВ рдбреЗрдЯрд╛ рдХрд╛ рдЧреИрд░-рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣рд╕реНрддрд╛рдВрддрд░рдг, рдЬреИрд╕реЗ рдХрд┐ рд╕рд┐рдВрдХреНрд░рдирд╛рдЗрдЬрд╝реЗрд╢рди рдпрд╛ рдмреИрдХрдЕрдк), рддреЛ рдпрд╣ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рдХрд░рдиреЗ рдпреЛрдЧреНрдп рд╣реИ:


  • рдХрд╛рд░реНрдп рдХреЛ рдирд┐рдпрдорд┐рдд рд╕рддреНрд░ рдореЗрдВ рд╢реБрд░реВ рдХрд░реЗрдВред рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рдкреГрд╖реНрдарднреВрдорд┐ рдХреЛ рдЪрд▓рд╛рдПрдВ рддрд╛рдХрд┐ рд╕рд┐рд╕реНрдЯрдо рд╕рдордЭрддрд╛ рд╣реИ рдХрд┐ рд╣рдореЗрдВ рдХрд╛рд░реНрдп рдкреВрд░рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдордп рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдпрд╣ рдХреБрдЫ рд╕рдордп (рдХрдИ рдорд┐рдирдЯ рддрдХ) рджреЗрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди iOS 13 рдореЗрдВ рдХреБрдЫ рдЯреВрдЯ рдЧрдпрд╛ рдерд╛ рдФрд░ рдпрд╣ рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЗрд╕рдХреЗ рд╕рд╛рде рдХреНрдпрд╛ рд╣реЛ рд░рд╣рд╛ рд╣реИ) рддрд╛рдХрд┐ рдХрд╛рд░реНрдп рдкреВрд░рд╛ рд╣реЛ рд╕рдХреЗред
  • рдпрджрд┐ рдЗрд╕рдХреЗ рдкрд╛рд╕ рд╕рдордп рдирд╣реАрдВ рд╣реИ, рддреЛ рдкреГрд╖реНрдарднреВрдорд┐ рдХреЗ рдЕрдВрдд рдореЗрдВ рд╣рдо рдХрд╛рд░реНрдп рдХреЛ рдПрдХ рдирд┐рдпрдорд┐рдд рд╕рддреНрд░ рд╕реЗ рдПрдХ рдкреГрд╖реНрдарднреВрдорд┐ рдкрд░ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рдЬрд╣рд╛рдВ рдпрд╣ рдХрд╛рдо рдХрд░рдирд╛ рдЬрд╛рд░реА рд░рдЦрддрд╛ рд╣реИ, рдФрд░ рдЬрдм рдпрд╣ рд╕рдорд╛рдкреНрдд рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

рдЯреНрд░рд╛рдВрд╕рдлрд░ рдХреИрд╕реЗ рдХрд░реЗрдВ? рдХреЛрдИ рд░рд╛рд╕реНрддрд╛ рдирд╣реАрдВред рдмрд╕ рд╕рд╛рдорд╛рдиреНрдп рдХрд╛рд░реНрдп рдХреЛ рдорд╛рд░реЗрдВ (рд░рджреНрдж рдХрд░реЗрдВ), рдФрд░ рд╕рдорд╛рди (рд╕рдорд╛рди рдЕрдиреБрд░реЛрдз рдХреЗ рд╕рд╛рде) рдкреГрд╖реНрдарднреВрдорд┐ рдмрдирд╛рдПрдВред рдЗрд╕реЗ "рд╕реНрдерд╛рдирд╛рдВрддрд░рдг" рдХреНрдпреЛрдВ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ? рдФрд░ рдЙрджреНрдзрд░рдг рдЪрд┐рд╣реНрдиреЛрдВ рдореЗрдВ рдХреНрдпреЛрдВ?


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


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


рдпрд╣рд╛рдБ рдирдореВрдирд╛ рдХреЛрдб рд╣реИ рдЬреЛ рдпрд╣ рдХрд░рддрд╛ рд╣реИ:


 let request = URLRequest(url: url) let task = foregroundSession.downloadTask(with: request) let backgroundId = UIApplication.shared.beginBackgroundTask { task.cancel() let task = backgroundSession.downloadTask(with: request) task.resume() } task.resume() 

рдпрджрд┐ expirationHandler рд╕реЗ рдкрд╣рд▓реЗ рдХрд╛рд░реНрдп рд╕рдорд╛рдкреНрдд рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдЖрдкрдХреЛ UIApplication.shared.endBackgroundTask(backgroundId) рдХреЛ рдХреЙрд▓ рдХрд░рдирд╛ рдпрд╛рдж рд░рдЦрдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрд╣ рдкреНрд░рд▓реЗрдЦрди рдореЗрдВ рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рд╡рд░реНрдгрд┐рдд рд╣реИред


рд╕рд┐рд╕реНрдЯрдо рдХреЛ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдирд╛ рдЬрд╛рд░реА рд░рдЦрдиреЗ рдореЗрдВ рдорджрдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд░рджреНрдж рдХрд░рдирд╛ рдЕрд╕реНрдерд╛рдпреА рдлрд╝рд╛рдЗрд▓ рдХреЛ рдкреГрд╖реНрдарднреВрдорд┐ рдбрд╛рдЙрдирд▓реЛрдб рдлрд┐рд░ рд╕реЗ рд╢реБрд░реВ рд╣реЛрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ), рд╡рд╣рд╛рдБ рд╡рд┐рд╢реЗрд╖ рддрд░реАрдХреЗ рд╣реИрдВ:



 let request = URLRequest(url: url) let task = foregroundSession.downloadTask(with: request) let backgroundId = UIApplication.shared.beginBackgroundTask { task.cancel { data in let task: URLSessionDownloadTask if let data = data { task = backgroundSession.downloadTask(withResumeData: data) } else { task = backgroundSession.downloadTask(with: request) } task.resume() } } 

,


рд▓реЙрдЧ


тАФ , . тАФ , . background , .


, , background -, , , ( UI, ). , , тАФ . , тАФ , , os_log. ( NSLog)


-


- , . , - . , , , ( ) . , , -, , . тАФ тАФ , . тАФ , - ( ), , .



. ( ), . , , , .


рдкреНрд░рддрд┐рдмрдВрдз


:


  • , ;
  • тАФ , ;
  • , (, тАж);


  • , (task.taskIdentifier) , (Dictionary). , 1, .
  • , URLSession.getAllTasks . , background . , . , . ┬п\_(уГД)_/┬п
  • , , , , .

, background , . , - . : https://developer.apple.com/library/archive/documentation/General/Conceptual/ExtensibilityPG/ExtensionScenarios.html#//apple_ref/doc/uid/TP40014214-CH21-SW1 . , :


If your app extension initiates a background NSURLSession task, you must also set up a shared container that both the extension and its containing app can access. Use the sharedContainerIdentifier property of the NSURLSessionConfiguration class to specify an identifier for the shared container so that you can access it later.

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


All Articles