167

Особенности фоновой работы iOS-приложения на примере синхронизации Яндекс.Диска. Алексей Патосин

  • Upload
    yandex

  • View
    172

  • Download
    7

Embed Size (px)

DESCRIPTION

Особенности фоновой работы iOS-приложения на примере синхронизации Яндекс.Диска

Citation preview

Page 1: Особенности фоновой работы iOS-приложения на примере синхронизации Яндекс.Диска. Алексей Патосин
Page 2: Особенности фоновой работы iOS-приложения на примере синхронизации Яндекс.Диска. Алексей Патосин

Патосин Алексей, ведущий iOS разработчик Яндекс.Диска

Особенности фоновой работы iOS приложения на примере синхронизации Яндекс.Диска

Page 3: Особенности фоновой работы iOS-приложения на примере синхронизации Яндекс.Диска. Алексей Патосин
Page 4: Особенности фоновой работы iOS-приложения на примере синхронизации Яндекс.Диска. Алексей Патосин
Page 5: Особенности фоновой работы iOS-приложения на примере синхронизации Яндекс.Диска. Алексей Патосин
Page 6: Особенности фоновой работы iOS-приложения на примере синхронизации Яндекс.Диска. Алексей Патосин

Autoloading

Page 7: Особенности фоновой работы iOS-приложения на примере синхронизации Яндекс.Диска. Алексей Патосин
Page 8: Особенности фоновой работы iOS-приложения на примере синхронизации Яндекс.Диска. Алексей Патосин
Page 9: Особенности фоновой работы iOS-приложения на примере синхронизации Яндекс.Диска. Алексей Патосин

Offline

Page 10: Особенности фоновой работы iOS-приложения на примере синхронизации Яндекс.Диска. Алексей Патосин

Agenda

Page 11: Особенности фоновой работы iOS-приложения на примере синхронизации Яндекс.Диска. Алексей Патосин

Agenda

〉Background on iOS Before

Page 12: Особенности фоновой работы iOS-приложения на примере синхронизации Яндекс.Диска. Алексей Патосин

Agenda

〉Background on iOS Before

〉Background on iOS Now

Page 13: Особенности фоновой работы iOS-приложения на примере синхронизации Яндекс.Диска. Алексей Патосин

Agenda

〉Background on iOS Before

〉Background on iOS Now

〉How we did it

Page 14: Особенности фоновой работы iOS-приложения на примере синхронизации Яндекс.Диска. Алексей Патосин

Agenda

〉Background on iOS Before

〉Background on iOS Now

〉How we did it

〉Our secrets

Page 15: Особенности фоновой работы iOS-приложения на примере синхронизации Яндекс.Диска. Алексей Патосин
Page 16: Особенности фоновой работы iOS-приложения на примере синхронизации Яндекс.Диска. Алексей Патосин

Closed

Page 17: Особенности фоновой работы iOS-приложения на примере синхронизации Яндекс.Диска. Алексей Патосин

Closed

Foreground

Page 18: Особенности фоновой работы iOS-приложения на примере синхронизации Яндекс.Диска. Алексей Патосин

Closed

ForegroundSleep

Page 19: Особенности фоновой работы iOS-приложения на примере синхронизации Яндекс.Диска. Алексей Патосин

Closed

ForegroundSleep

Page 20: Особенности фоновой работы iOS-приложения на примере синхронизации Яндекс.Диска. Алексей Патосин

Closed

Foreground

Background

Sleep

Page 21: Особенности фоновой работы iOS-приложения на примере синхронизации Яндекс.Диска. Алексей Патосин

Closed

Foreground

Background

up to 10 min

Sleep

Page 22: Особенности фоновой работы iOS-приложения на примере синхронизации Яндекс.Диска. Алексей Патосин

Closed

Foreground

Background

Sleep

Page 23: Особенности фоновой работы iOS-приложения на примере синхронизации Яндекс.Диска. Алексей Патосин
Page 24: Особенности фоновой работы iOS-приложения на примере синхронизации Яндекс.Диска. Алексей Патосин
Page 25: Особенности фоновой работы iOS-приложения на примере синхронизации Яндекс.Диска. Алексей Патосин
Page 26: Особенности фоновой работы iOS-приложения на примере синхронизации Яндекс.Диска. Алексей Патосин
Page 27: Особенности фоновой работы iOS-приложения на примере синхронизации Яндекс.Диска. Алексей Патосин
Page 28: Особенности фоновой работы iOS-приложения на примере синхронизации Яндекс.Диска. Алексей Патосин
Page 29: Особенности фоновой работы iOS-приложения на примере синхронизации Яндекс.Диска. Алексей Патосин

Closed

Foreground

Background

Sleep

Background fetch

Silent notifications

NSURLSession

Page 30: Особенности фоновой работы iOS-приложения на примере синхронизации Яндекс.Диска. Алексей Патосин

Closed

Foreground

Background

Sleep

Background fetch

Silent notifications

NSURLSession

Page 31: Особенности фоновой работы iOS-приложения на примере синхронизации Яндекс.Диска. Алексей Патосин

Closed

Foreground

Background

Sleep

Background fetch

Silent notifications

NSURLSession

Page 32: Особенности фоновой работы iOS-приложения на примере синхронизации Яндекс.Диска. Алексей Патосин

Closed

Foreground

Background

Sleep

Background fetch

Silent notifications

NSURLSession

Page 33: Особенности фоновой работы iOS-приложения на примере синхронизации Яндекс.Диска. Алексей Патосин

Closed

Foreground

Background

Sleep

Background fetch

Silent notifications

NSURLSession

Page 34: Особенности фоновой работы iOS-приложения на примере синхронизации Яндекс.Диска. Алексей Патосин

Closed

Foreground

Background

Sleep

Background fetch

Silent notifications

NSURLSession

Page 35: Особенности фоновой работы iOS-приложения на примере синхронизации Яндекс.Диска. Алексей Патосин

Closed

Foreground

Background

Sleep

Background fetch

Silent notifications

NSURLSession

up to 30 sec

Page 36: Особенности фоновой работы iOS-приложения на примере синхронизации Яндекс.Диска. Алексей Патосин

Closed

Foreground

Background

Sleep

Background fetch

Silent notifications

NSURLSession

up to 30 sec up to 3 min (was 10)

Page 37: Особенности фоновой работы iOS-приложения на примере синхронизации Яндекс.Диска. Алексей Патосин

Background Fetch

Sleep Background

Page 38: Особенности фоновой работы iOS-приложения на примере синхронизации Яндекс.Диска. Алексей Патосин

Background Fetch

Sleep Background

Page 39: Особенности фоновой работы iOS-приложения на примере синхронизации Яндекс.Диска. Алексей Патосин

Silent Push Notifications

Sleep Background

Page 40: Особенности фоновой работы iOS-приложения на примере синхронизации Яндекс.Диска. Алексей Патосин

Silent Push Notifications

Sleep Background

Page 41: Особенности фоновой работы iOS-приложения на примере синхронизации Яндекс.Диска. Алексей Патосин

NSURLSession

Page 42: Особенности фоновой работы iOS-приложения на примере синхронизации Яндекс.Диска. Алексей Патосин

NSURLSession

Page 43: Особенности фоновой работы iOS-приложения на примере синхронизации Яндекс.Диска. Алексей Патосин

NSURLSession

Page 44: Особенности фоновой работы iOS-приложения на примере синхронизации Яндекс.Диска. Алексей Патосин

NSURLSession

Page 45: Особенности фоновой работы iOS-приложения на примере синхронизации Яндекс.Диска. Алексей Патосин

NSURLSession

Connection

! Configuration

Connection

! Configuration

Connection

! Configuration

Page 46: Особенности фоновой работы iOS-приложения на примере синхронизации Яндекс.Диска. Алексей Патосин

NSURLSession

NSURLSession

!

!

!

!

!

Connection

! Configuration

Connection

! Configuration

Connection

! Configuration

Page 47: Особенности фоновой работы iOS-приложения на примере синхронизации Яндекс.Диска. Алексей Патосин

NSURLSession

NSURLSession

!

!

!

!

!

Connection

! Configuration

Configuration

Connection

! Configuration

Connection

! Configuration

Page 48: Особенности фоновой работы iOS-приложения на примере синхронизации Яндекс.Диска. Алексей Патосин

NSURLSession

NSURLSession

!

!

!

!

!

Task

Task

Task

Connection

! Configuration

Configuration

Connection

! Configuration

Connection

! Configuration

Page 49: Особенности фоновой работы iOS-приложения на примере синхронизации Яндекс.Диска. Алексей Патосин

NSURLSession Tasks

Page 50: Особенности фоновой работы iOS-приложения на примере синхронизации Яндекс.Диска. Алексей Патосин

NSURLSession Tasks

Data Task

Page 51: Особенности фоновой работы iOS-приложения на примере синхронизации Яндекс.Диска. Алексей Патосин

NSURLSession Tasks

Data Task Upload Task

Page 52: Особенности фоновой работы iOS-приложения на примере синхронизации Яндекс.Диска. Алексей Патосин

NSURLSession Tasks

Data Task Upload Task Download Task

Page 53: Особенности фоновой работы iOS-приложения на примере синхронизации Яндекс.Диска. Алексей Патосин

NSURLSession Tasks

Data Task Upload Task Download Task

background background

Page 54: Особенности фоновой работы iOS-приложения на примере синхронизации Яндекс.Диска. Алексей Патосин

NSURLSession Tasks

Background transfer is supported only when WiFi is available!

Data Task Upload Task Download Task

background background

Page 55: Особенности фоновой работы iOS-приложения на примере синхронизации Яндекс.Диска. Алексей Патосин

NSURLSession

class NSURLSession : NSObject { //.. init(configuration: NSURLSessionConfiguration) -> NSURLSession //.. func dataTaskWithURL(url: NSURL) -> NSURLSessionDataTask //.. func uploadTaskWithRequest(request: NSURLRequest, fromFile fileURL: NSURL) -> NSURLSessionUploadTask ! //.. func downloadTaskWithURL(url: NSURL) -> NSURLSessionDownloadTask ! //.. }

Page 56: Особенности фоновой работы iOS-приложения на примере синхронизации Яндекс.Диска. Алексей Патосин

nsurlsessiond

Page 57: Особенности фоновой работы iOS-приложения на примере синхронизации Яндекс.Диска. Алексей Патосин

nsurlsessiond

Task

Task

Task

Page 58: Особенности фоновой работы iOS-приложения на примере синхронизации Яндекс.Диска. Алексей Патосин

nsurlsessiond nsurlsessiond

!

!

!

!

!

!

Task

Task

Task

Page 59: Особенности фоновой работы iOS-приложения на примере синхронизации Яндекс.Диска. Алексей Патосин

nsurlsessiond nsurlsessiond

!

!

!

!

!

!

Task

Task

Task

Page 60: Особенности фоновой работы iOS-приложения на примере синхронизации Яндекс.Диска. Алексей Патосин

nsurlsessiond nsurlsessiond

!

!

!

!

!

!

Task

Task

Task

Page 61: Особенности фоновой работы iOS-приложения на примере синхронизации Яндекс.Диска. Алексей Патосин

nsurlsessiond nsurlsessiond

!

!

!

!

!

!

Task

Task

Task

Page 62: Особенности фоновой работы iOS-приложения на примере синхронизации Яндекс.Диска. Алексей Патосин

nsurlsessiond nsurlsessiond

!

!

!

!

!

!

Task

Task

Task

Page 63: Особенности фоновой работы iOS-приложения на примере синхронизации Яндекс.Диска. Алексей Патосин

nsurlsessiond nsurlsessiond

!

!

!

!

!

!

Task

Task

Task

Page 64: Особенности фоновой работы iOS-приложения на примере синхронизации Яндекс.Диска. Алексей Патосин
Page 65: Особенности фоновой работы iOS-приложения на примере синхронизации Яндекс.Диска. Алексей Патосин

completionHandler: ((UIBackgroundFetchResult) -> Void)!)

Page 66: Особенности фоновой работы iOS-приложения на примере синхронизации Яндекс.Диска. Алексей Патосин
Page 67: Особенности фоновой работы iOS-приложения на примере синхронизации Яндекс.Диска. Алексей Патосин
Page 68: Особенности фоновой работы iOS-приложения на примере синхронизации Яндекс.Диска. Алексей Патосин
Page 69: Особенности фоновой работы iOS-приложения на примере синхронизации Яндекс.Диска. Алексей Патосин
Page 70: Особенности фоновой работы iOS-приложения на примере синхронизации Яндекс.Диска. Алексей Патосин

NSURLSessionDataTask

Page 71: Особенности фоновой работы iOS-приложения на примере синхронизации Яндекс.Диска. Алексей Патосин
Page 72: Особенности фоновой работы iOS-приложения на примере синхронизации Яндекс.Диска. Алексей Патосин
Page 73: Особенности фоновой работы iOS-приложения на примере синхронизации Яндекс.Диска. Алексей Патосин
Page 74: Особенности фоновой работы iOS-приложения на примере синхронизации Яндекс.Диска. Алексей Патосин

iOS Non-deterministic System

Page 75: Особенности фоновой работы iOS-приложения на примере синхронизации Яндекс.Диска. Алексей Патосин

Petri Dishes Experiment

Page 76: Особенности фоновой работы iOS-приложения на примере синхронизации Яндекс.Диска. Алексей Патосин
Page 77: Особенности фоновой работы iOS-приложения на примере синхронизации Яндекс.Диска. Алексей Патосин
Page 78: Особенности фоновой работы iOS-приложения на примере синхронизации Яндекс.Диска. Алексей Патосин
Page 79: Особенности фоновой работы iOS-приложения на примере синхронизации Яндекс.Диска. Алексей Патосин

Background Fetch Alarm Experiment

Page 80: Особенности фоновой работы iOS-приложения на примере синхронизации Яндекс.Диска. Алексей Патосин

Background Fetch Alarm Experiment

00:00 03:00 06:00 09:00 12:00 15:00 18:00 21:00 24:00

Page 81: Особенности фоновой работы iOS-приложения на примере синхронизации Яндекс.Диска. Алексей Патосин

Background Fetch Alarm Experiment

00:00 03:00 06:00 09:00 12:00 15:00 18:00 21:00 24:00

Page 82: Особенности фоновой работы iOS-приложения на примере синхронизации Яндекс.Диска. Алексей Патосин

Background Fetch Alarm Experiment

00:00 03:00 06:00 09:00 12:00 15:00 18:00 21:00 24:00

Page 83: Особенности фоновой работы iOS-приложения на примере синхронизации Яндекс.Диска. Алексей Патосин

Background Fetch Alarm Experiment

00:00 03:00 06:00 09:00 12:00 15:00 18:00 21:00 24:00

Page 84: Особенности фоновой работы iOS-приложения на примере синхронизации Яндекс.Диска. Алексей Патосин

Background Fetch Alarm Experiment

00:00 03:00 06:00 09:00 12:00 15:00 18:00 21:00 24:00

Page 85: Особенности фоновой работы iOS-приложения на примере синхронизации Яндекс.Диска. Алексей Патосин

Background Fetch Alarm Experiment

00:00 03:00 06:00 09:00 12:00 15:00 18:00 21:00 24:00

Page 86: Особенности фоновой работы iOS-приложения на примере синхронизации Яндекс.Диска. Алексей Патосин

Non-deterministic NSURLSession

nsurlsessiond

!

!

!

!

!

!

Task

Task

Task

Page 87: Особенности фоновой работы iOS-приложения на примере синхронизации Яндекс.Диска. Алексей Патосин

Delivery of remote notifications is not guaranteed!

Page 88: Особенности фоновой работы iOS-приложения на примере синхронизации Яндекс.Диска. Алексей Патосин

Delivery of remote notifications is not guaranteed!

Page 89: Особенности фоновой работы iOS-приложения на примере синхронизации Яндекс.Диска. Алексей Патосин

Delivery of remote notifications is not guaranteed!

Page 90: Особенности фоновой работы iOS-приложения на примере синхронизации Яндекс.Диска. Алексей Патосин

Delivery of remote notifications is not guaranteed!

Page 91: Особенности фоновой работы iOS-приложения на примере синхронизации Яндекс.Диска. Алексей Патосин

Delivery of remote notifications is not guaranteed!

Page 92: Особенности фоновой работы iOS-приложения на примере синхронизации Яндекс.Диска. Алексей Патосин
Page 93: Особенности фоновой работы iOS-приложения на примере синхронизации Яндекс.Диска. Алексей Патосин
Page 94: Особенности фоновой работы iOS-приложения на примере синхронизации Яндекс.Диска. Алексей Патосин
Page 95: Особенности фоновой работы iOS-приложения на примере синхронизации Яндекс.Диска. Алексей Патосин
Page 96: Особенности фоновой работы iOS-приложения на примере синхронизации Яндекс.Диска. Алексей Патосин
Page 97: Особенности фоновой работы iOS-приложения на примере синхронизации Яндекс.Диска. Алексей Патосин
Page 98: Особенности фоновой работы iOS-приложения на примере синхронизации Яндекс.Диска. Алексей Патосин
Page 99: Особенности фоновой работы iOS-приложения на примере синхронизации Яндекс.Диска. Алексей Патосин
Page 100: Особенности фоновой работы iOS-приложения на примере синхронизации Яндекс.Диска. Алексей Патосин

Best Practices

Page 101: Особенности фоновой работы iOS-приложения на примере синхронизации Яндекс.Диска. Алексей Патосин

Divide and Conquer

Page 102: Особенности фоновой работы iOS-приложения на примере синхронизации Яндекс.Диска. Алексей Патосин

Divide and Conquer

NSURLSession

(background)

Upload

NSURLSession

(background)

Download

NSURLSession

!

Data

Page 103: Особенности фоновой работы iOS-приложения на примере синхронизации Яндекс.Диска. Алексей Патосин

Logic Restoration

successBlock(…);

failureBlock(…);

progressBlock(…); nsurlsessiond

!

!

Page 104: Особенности фоновой работы iOS-приложения на примере синхронизации Яндекс.Диска. Алексей Патосин

Logic Restoration

successBlock(…);

failureBlock(…);

progressBlock(…); nsurlsessiond

!

!

Page 105: Особенности фоновой работы iOS-приложения на примере синхронизации Яндекс.Диска. Алексей Патосин

Logic Restoration

successBlock(…);

failureBlock(…);

progressBlock(…); nsurlsessiond

!

!

Page 106: Особенности фоновой работы iOS-приложения на примере синхронизации Яндекс.Диска. Алексей Патосин

Logic Restoration

successBlock(…);

failureBlock(…);

progressBlock(…); nsurlsessiond

!

!

Page 107: Особенности фоновой работы iOS-приложения на примере синхронизации Яндекс.Диска. Алексей Патосин

Logic Restoration

successBlock(…);

failureBlock(…);

progressBlock(…); nsurlsessiond

!

!

Page 108: Особенности фоновой работы iOS-приложения на примере синхронизации Яндекс.Диска. Алексей Патосин

Logic Restoration

successBlock(…);

failureBlock(…);

progressBlock(…); nsurlsessiond

!

!

Page 109: Особенности фоновой работы iOS-приложения на примере синхронизации Яндекс.Диска. Алексей Патосин

Logic Restoration

successBlock(…);

failureBlock(…);

progressBlock(…); nsurlsessiond

!

!

Page 110: Особенности фоновой работы iOS-приложения на примере синхронизации Яндекс.Диска. Алексей Патосин

Logic Restoration

successBlock(…);

failureBlock(…);

progressBlock(…); nsurlsessiond

!

!

var taskDescription: String

Page 111: Особенности фоновой работы iOS-приложения на примере синхронизации Яндекс.Диска. Алексей Патосин

Logic Restoration

successBlock(…);

failureBlock(…);

progressBlock(…); nsurlsessiond

!

!

func getTasksWithCompletionHandler(_ completionHandler: ([AnyObject]!, [AnyObject]!, [AnyObject]!) -> Void)

var taskDescription: String

Page 112: Особенности фоновой работы iOS-приложения на примере синхронизации Яндекс.Диска. Алексей Патосин

CompletionHandler

Page 115: Особенности фоновой работы iOS-приложения на примере синхронизации Яндекс.Диска. Алексей Патосин

CompletionHandler

optional func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [NSObject : AnyObject], fetchCompletionHandler handler: (UIBackgroundFetchResult) -> Void)

optional func application(_ application: UIApplication, performFetchWithCompletionHandler completionHandler: (UIBackgroundFetchResult) -> Void)

optional func application(_ application: UIApplication, handleEventsForBackgroundURLSession identifier: String, completionHandler completionHandler: () -> Void)

Page 116: Особенности фоновой работы iOS-приложения на примере синхронизации Яндекс.Диска. Алексей Патосин

How to support long-running operations in background

Page 117: Особенности фоновой работы iOS-приложения на примере синхронизации Яндекс.Диска. Алексей Патосин

How to support long-running operations in background

Parsing

Page 118: Особенности фоновой работы iOS-приложения на примере синхронизации Яндекс.Диска. Алексей Патосин

How to support long-running operations in background

30 sec

Parsing

parsingOffset = 12 424 523

Page 119: Особенности фоновой работы iOS-приложения на примере синхронизации Яндекс.Диска. Алексей Патосин

How to support long-running operations in background

30 sec

Parsing

parsingOffset = 12 424 523

30 sec

parsingOffset = 25 992 012

Page 120: Особенности фоновой работы iOS-приложения на примере синхронизации Яндекс.Диска. Алексей Патосин

How to support long-running operations in background

30 sec

Parsing

parsingOffset = 12 424 523

30 sec 30 sec

parsingOffset = 25 992 012parsingOffset = 34 436 001

Page 121: Особенности фоновой работы iOS-приложения на примере синхронизации Яндекс.Диска. Алексей Патосин

How to support long-running operations in background

30 sec

Parsing

parsingOffset = 12 424 523

30 sec 30 sec 30 sec

parsingOffset = 25 992 012parsingOffset = 34 436 001parsingOffset = 41 928 528

Page 122: Особенности фоновой работы iOS-приложения на примере синхронизации Яндекс.Диска. Алексей Патосин

How to support long-running operations in background

30 sec

Parsing

parsingOffset = 12 424 523

30 sec 30 sec 30 sec 12 sec

parsingOffset = 25 992 012parsingOffset = 34 436 001parsingOffset = 41 928 528

Page 123: Особенности фоновой работы iOS-приложения на примере синхронизации Яндекс.Диска. Алексей Патосин

How to support long-running operations in background

url type was_processed

1

1

0

0

Page 124: Особенности фоновой работы iOS-приложения на примере синхронизации Яндекс.Диска. Алексей Патосин

How to support long-running operations in background

url type was_processed

1

1

0

0

Page 125: Особенности фоновой работы iOS-приложения на примере синхронизации Яндекс.Диска. Алексей Патосин

How to support long-running operations in background

url type was_processed

1

1

0

0

Page 126: Особенности фоновой работы iOS-приложения на примере синхронизации Яндекс.Диска. Алексей Патосин

ALAssetsLibrary

Page 129: Особенности фоновой работы iOS-приложения на примере синхронизации Яндекс.Диска. Алексей Патосин

NSURLSessionTask Bug

nsurlsessiond

!

!

!

!

!

!

Task

Task

Task

var discretionary: Bool

Page 130: Особенности фоновой работы iOS-приложения на примере синхронизации Яндекс.Диска. Алексей Патосин

Redirect in background

Page 131: Особенности фоновой работы iOS-приложения на примере синхронизации Яндекс.Диска. Алексей Патосин

Redirect in background

Authorization

Page 132: Особенности фоновой работы iOS-приложения на примере синхронизации Яндекс.Диска. Алексей Патосин

Redirect in background

Authorization

User-Agent

Page 133: Особенности фоновой работы iOS-приложения на примере синхронизации Яндекс.Диска. Алексей Патосин

Redirect in background

Authorization

User-Agent

Yandex-Authorization

Page 134: Особенности фоновой работы iOS-приложения на примере синхронизации Яндекс.Диска. Алексей Патосин

How to test activity in background?

Page 135: Особенности фоновой работы iOS-приложения на примере синхронизации Яндекс.Диска. Алексей Патосин

Logs

Page 136: Особенности фоновой работы iOS-приложения на примере синхронизации Яндекс.Диска. Алексей Патосин

Logs #upload_queue_manager Upload next file in queue. (0 left) #upload_queue_manager nextFileInQueue #upload_queue_manager nextFileInQueueForForegroundUpload #upload_queue_manager nextFileInQueue, was selected (null) file #upload_queue_manager There are no more files in upload queue. #upload_queue_manager nextFileInQueue #upload_queue_manager nextFileInQueueForForegroundUpload #upload_queue_manager nextFileInQueue, was selected (null) file #upload_queue_manager endBackgroundTask invoked #completion_handlers_manager endedWithoutAnyData Failed to download thumbnail for https://webdav.yandex.ru/disk/2014-07-02%2018-17-31.jpg, resend request in 1.000 #offline_updater update root offline status 1 for file <YOFile: 0x7fadde15e440> https://webdav.yandex.ru/disk/_test/_DSC2502%20copy%202.ARW #download_queue_manager download offline files {( <YOFile: 0x7fadde15e440> https://webdav.yandex.ru/disk/_test/_DSC2502%20copy%202.ARW )} #download_queue_manager looking for next offline file.. #download_queue_manager Found file for download https://webdav.yandex.ru/disk/_test/_DSC2502%20copy%202.ARW (mask: 4) #connection_manager Start download https://webdav.yandex.ru/disk/_test/_DSC2502%20copy%202.ARW #task_description description now contains: {"kURLSessionTaskDescriptionWasCreatedInBackground":0,"kURLSessionTaskDescriptionURLString":"https:\/\/webdav.yandex.ru\/disk\/_test\/_DSC2502%20copy%202.ARW"} #connection_manager NSURLSessionDownloadTask <__NSCFBackgroundDownloadTask: 0x7faddbc40750>{ taskIdentifier: 1 } started, invoking completionHandler if it has now #completion_handlers_manager urlSessionTaskStarted: #completion_handlers_manager current properties state: sessionCompletionHandlers { } backgroundFetchCompletionHandler (null) remoteNotificationCompletionHandler (null) backgroundFetchCompletionHandlerCreationDate (null) processIdentifiers {( )} !#completion_handlers_manager there's no URLSession completionHandler right now #offline_updater update root offline status 1 for file <YOFile: 0x7fadde1926a0> https://webdav.yandex.ru/disk/_test/_DSC2502%20copy.ARW #download_queue_manager download offline files {(

Page 137: Особенности фоновой работы iOS-приложения на примере синхронизации Яндекс.Диска. Алексей Патосин

Logs

#download_queue_manager looking for next offline file.. #download_queue_manager Found file for download https://webdav.yandex.ru/disk/_test/_DSC2502%20copy.ARW (mask: 4) #connection_manager Start download https://webdav.yandex.ru/disk/_test/_DSC2502%20copy.ARW #session_manager completed task <__NSCFBackgroundDownloadTask: 0x7faddbc4e700>{ taskIdentifier: 4 } with URL https://webdav.yandex.ru/disk/_test/101@2x~iphone.png error (null) #task_description description now contains: {"kURLSessionTaskDescriptionWasCreatedInBackground":0,"kURLSessionTaskDescriptionURLString":"https:\/\/webdav.yandex.ru\/disk\/_test\/_DSC2502%20copy.ARW"} #connection_manager NSURLSessionDownloadTask <__NSCFBackgroundDownloadTask: 0x7fadde03e140>{ taskIdentifier: 5 } started, invoking completionHandler if it has now #completion_handlers_manager urlSessionTaskStarted: #completion_handlers_manager current properties state: sessionCompletionHandlers { } backgroundFetchCompletionHandler (null) remoteNotificationCompletionHandler (null) backgroundFetchCompletionHandlerCreationDate (null) processIdentifiers {( )} #completion_handlers_manager there's no URLSession completionHandler right now #session_manager data written for task <__NSCFBackgroundDownloadTask: 0x7fadde03e140>{ taskIdentifier: 5 } with URL https://webdav.yandex.ru/disk/_test/_DSC2502%20copy.ARW (15711916/24936448) #session_manager data written for task <__NSCFBackgroundDownloadTask: 0x7fadde03e140>{ taskIdentifier: 5 } with URL https://webdav.yandex.ru/disk/_test/_DSC2502%20copy.ARW (15761068/24936448) #session_manager data written for task <__NSCFBackgroundDownloadTask: 0x7fadde03e140>{ taskIdentifier: 5 } with URL https://webdav.yandex.ru/disk/_test/_DSC2502%20copy.ARW (15793836/24936448) #session_manager data written for task <__NSCFBackgroundDownloadTask: 0x7fadde03e140>{ taskIdentifier: 5 } with URL https://webdav.yandex.ru/disk/_test/_DSC2502%20copy.ARW (15859372/24936448) #session_manager data written for task <__NSCFBackgroundDownloadTask: 0x7fadde03e140>{ taskIdentifier: 5 } with URL https://webdav.yandex.ru/disk/_test/_DSC2502%20copy.ARW (15924908/24936448) #session_manager data written for task <__NSCFBackgroundDownloadTask: 0x7fadde03e140>{ taskIdentifier: 5 } with URL https://webdav.yandex.ru/disk/_test/_DSC2502%20copy.ARW (16006828/24936448) #session_manager data written for task <__NSCFBackgroundDownloadTask: 0x7fadde03e140>{ taskIdentifier: 5 } with URL https://webdav.yandex.ru/disk/_test/_DSC2502%20copy.ARW (16072364/24936448) #session_manager data written for task <__NSCFBackgroundDownloadTask: 0x7fadde03e140>{ taskIdentifier: 5 } with URL https://webdav.yandex.ru/disk/_test/_DSC2502%20copy.ARW (16137900/24936448) #session_manager data written for task <__NSCFBackgroundDownloadTask: 0x7fadde03e140>{ taskIdentifier: 5 } with URL https://webdav.yandex.ru/disk/_test/_DSC2502%20copy.ARW (16203436/24936448) #session_manager data written for task <__NSCFBackgroundDownloadTask: 0x7fadde03e140>{ taskIdentifier: 5 } with URL https://webdav.yandex.ru/disk/_test/_DSC2502%20copy.ARW (16285356/24936448) #session_manager data written for task <__NSCFBackgroundDownloadTask: 0x7fadde03e140>{ taskIdentifier: 5 } with URL https://webdav.yandex.ru/disk/_test/_DSC2502%20copy.ARW (16350892/24936448) #session_manager data written for task <__NSCFBackgroundDownloadTask: 0x7fadde03e140>{ taskIdentifier: 5 } with URL https://webdav.yandex.ru/disk/_test/_DSC2502%20copy.ARW (16416428/24936448) #session_manager data written for task <__NSCFBackgroundDownloadTask: 0x7fadde03e140>{ taskIdentifier: 5 } with URL https://webdav.yandex.ru/disk/_test/_DSC2502%20copy.ARW (16498348/24936448) #session_manager data written for task <__NSCFBackgroundDownloadTask: 0x7fadde03e140>{ taskIdentifier: 5 } with URL https://webdav.yandex.ru/disk/_test/_DSC2502%20copy.ARW (16563884/24936448) #session_manager data written for task <__NSCFBackgroundDownloadTask: 0x7fadde03e140>{ taskIdentifier: 5 } with URL https://webdav.yandex.ru/disk/_test/_DSC2502%20copy.ARW (16645804/24936448) #session_manager data written for task <__NSCFBackgroundDownloadTask: 0x7fadde03e140>{ taskIdentifier: 5 } with URL https://webdav.yandex.ru/disk/_test/_DSC2502%20copy.ARW (16711340/24936448) #session_manager data written for task <__NSCFBackgroundDownloadTask: 0x7fadde03e140>{ taskIdentifier: 5 } with URL https://webdav.yandex.ru/disk/_test/_DSC2502%20copy.ARW (16776876/24936448) #session_manager data written for task <__NSCFBackgroundDownloadTask: 0x7fadde03e140>{ taskIdentifier: 5 } with URL https://webdav.yandex.ru/disk/_test/_DSC2502%20copy.ARW (16809644/24936448) #session_manager data written for task <__NSCFBackgroundDownloadTask: 0x7fadde03e140>{ taskIdentifier: 5 } with URL https://webdav.yandex.ru/disk/_test/_DSC2502%20copy.ARW (16858796/24936448) #session_manager data written for task <__NSCFBackgroundDownloadTask: 0x7fadde03e140>{ taskIdentifier: 5 } with URL https://webdav.yandex.ru/disk/_test/_DSC2502%20copy.ARW (16924332/24936448) #session_manager data written for task <__NSCFBackgroundDownloadTask: 0x7fadde03e140>{ taskIdentifier: 5 } with URL https://webdav.yandex.ru/disk/_test/_DSC2502%20copy.ARW (16989868/24936448) #session_manager data written for task <__NSCFBackgroundDownloadTask: 0x7fadde03e140>{ taskIdentifier: 5 } with URL https://webdav.yandex.ru/disk/_test/_DSC2502%20copy.ARW (17071788/24936448) #session_manager data written for task <__NSCFBackgroundDownloadTask: 0x7fadde03e140>{ taskIdentifier: 5 } with URL https://webdav.yandex.ru/disk/_test/_DSC2502%20copy.ARW (17137324/24936448) #session_manager data written for task <__NSCFBackgroundDownloadTask: 0x7fadde03e140>{ taskIdentifier: 5 } with URL https://webdav.yandex.ru/disk/_test/_DSC2502%20copy.ARW (17219244/24936448)

Page 138: Особенности фоновой работы iOS-приложения на примере синхронизации Яндекс.Диска. Алексей Патосин

Logs

Page 139: Особенности фоновой работы iOS-приложения на примере синхронизации Яндекс.Диска. Алексей Патосин

Logs

Page 140: Особенности фоновой работы iOS-приложения на примере синхронизации Яндекс.Диска. Алексей Патосин

Sniffer

Page 141: Особенности фоновой работы iOS-приложения на примере синхронизации Яндекс.Диска. Алексей Патосин

Sniffer

Wireshark

Page 142: Особенности фоновой работы iOS-приложения на примере синхронизации Яндекс.Диска. Алексей Патосин

Sniffer

Wireshark Charles

Page 143: Особенности фоновой работы iOS-приложения на примере синхронизации Яндекс.Диска. Алексей Патосин
Page 144: Особенности фоновой работы iOS-приложения на примере синхронизации Яндекс.Диска. Алексей Патосин

Local Notifications

Page 145: Особенности фоновой работы iOS-приложения на примере синхронизации Яндекс.Диска. Алексей Патосин

One more secret…

Page 146: Особенности фоновой работы iOS-приложения на примере синхронизации Яндекс.Диска. Алексей Патосин

How to prolong Background activity

Page 147: Особенности фоновой работы iOS-приложения на примере синхронизации Яндекс.Диска. Алексей Патосин

How to prolong Background activity

Page 148: Особенности фоновой работы iOS-приложения на примере синхронизации Яндекс.Диска. Алексей Патосин

How to prolong Background activity

30 sec

Page 149: Особенности фоновой работы iOS-приложения на примере синхронизации Яндекс.Диска. Алексей Патосин

How to prolong Background activity

30 sec

Page 150: Особенности фоновой работы iOS-приложения на примере синхронизации Яндекс.Диска. Алексей Патосин

How to prolong Background activity

30 sec

30 sec

Page 151: Особенности фоновой работы iOS-приложения на примере синхронизации Яндекс.Диска. Алексей Патосин

How to prolong Background activity

30 sec

30 sec

func beginBackgroundTaskWithExpirationHandler(_ handler: () -> Void) -> UIBackgroundTaskIdentifier

Page 152: Особенности фоновой работы iOS-приложения на примере синхронизации Яндекс.Диска. Алексей Патосин

How to prolong Background activity

30 sec

30 sec

func beginBackgroundTaskWithExpirationHandler(_ handler: () -> Void) -> UIBackgroundTaskIdentifier

up to 3 min

Page 153: Особенности фоновой работы iOS-приложения на примере синхронизации Яндекс.Диска. Алексей Патосин

Results

Page 154: Особенности фоновой работы iOS-приложения на примере синхронизации Яндекс.Диска. Алексей Патосин
Page 155: Особенности фоновой работы iOS-приложения на примере синхронизации Яндекс.Диска. Алексей Патосин

!Up to 2M !

files are being uploaded each day from iOS client

Page 156: Особенности фоновой работы iOS-приложения на примере синхронизации Яндекс.Диска. Алексей Патосин
Page 157: Особенности фоновой работы iOS-приложения на примере синхронизации Яндекс.Диска. Алексей Патосин

70% files are uploaded in background

Page 158: Особенности фоновой работы iOS-приложения на примере синхронизации Яндекс.Диска. Алексей Патосин

Uploading in background

Page 159: Особенности фоновой работы iOS-приложения на примере синхронизации Яндекс.Диска. Алексей Патосин

Uploading in background

Background

Foreground

Page 160: Особенности фоновой работы iOS-приложения на примере синхронизации Яндекс.Диска. Алексей Патосин
Page 161: Особенности фоновой работы iOS-приложения на примере синхронизации Яндекс.Диска. Алексей Патосин

1M Background Fetches per day

Page 162: Особенности фоновой работы iOS-приложения на примере синхронизации Яндекс.Диска. Алексей Патосин
Page 163: Особенности фоновой работы iOS-приложения на примере синхронизации Яндекс.Диска. Алексей Патосин

less than 5%

Page 164: Особенности фоновой работы iOS-приложения на примере синхронизации Яндекс.Диска. Алексей Патосин

Итак

Page 165: Особенности фоновой работы iOS-приложения на примере синхронизации Яндекс.Диска. Алексей Патосин

Thanks!

Page 166: Особенности фоновой работы iOS-приложения на примере синхронизации Яндекс.Диска. Алексей Патосин

Теперь питание компьютера можно отключить

Page 167: Особенности фоновой работы iOS-приложения на примере синхронизации Яндекс.Диска. Алексей Патосин

Alexey Patosin

Senior iOS Software Engineer – Yandex

Contacts

@[email protected]