Professional Documents
Culture Documents
711 Nsurlsession New Features and Best Practices
711 Nsurlsession New Features and Best Practices
711 Nsurlsession New Features and Best Practices
NSURLSession:
New Features and Best Practices
Session 711
© 2016 Apple Inc. All rights reserved. Redistribution or public display not permitted without written permission from Apple.
Agenda
Agenda
NSURLConnection
Foundation NSNetServices
NSStream
Networking API
Deprecated
NSURLConnection 2015
Foundation NSNetServices
NSStream
Networking API
New
NSURLSession 2013
Foundation NSNetServices
NSStream
Deprecated
NSURLConnection 2015
Foundation NSNetServices
NSStream
NSURLSession
Review
NSURLSession Example
Benefits
NSURLSession Example
Benefits
Configuration
NSURLSession Example
Benefits
NSURLSessionConfiguration
NSURLSession Example
Benefits
NSURLSessionConfiguration
Transport Layer Security (TLS) version
NSURLSession Example
Benefits
NSURLSessionConfiguration
Transport Layer Security (TLS) version
NSURLSessionConfiguration
Transport Layer Security (TLS) version
NSURLSessionConfiguration
Transport Layer Security (TLS) version
Cookie policy
NSURLSession Example
Benefits
NSURLSessionConfiguration
Transport Layer Security (TLS) version
Cookie policy
Cache policy
NSURLSession Example
Benefits
NSURLSessionConfiguration
Transport Layer Security (TLS) version
Cookie policy
Cache policy
Storage objects
NSURLSession Example
Benefits
NSURLSessionConfiguration
Transport Layer Security (TLS) version
Cookie policy
Cache policy
Storage objects
task.resume()
NSURLSession Example
Review
NSURLSession Example
Review
HTTP/2
NSURLSession API NEW
HTTP/2
• Apple
• Facebook
• Instagram
• Wikipedia
• Twitter
• YouTube
• Yahoo
NSURLSession API NEW
HTTP/2
HTTP/2
HTTP/2
HTTP/2
HTTP/2
Response
Time
HTTP/1.1
Loading
Latency App NSURLSession Server
GET index.html
Response
index.html
Time
HTTP/1.1
Loading
Latency App NSURLSession Server
GET index.html
Response
index.html
GET style.css
Time
HTTP/1.1
Loading
Latency App NSURLSession Server
GET index.html
Response
index.html
GET style.css
Response
Time
HTTP/1.1
Loading
Latency App NSURLSession Server
GET index.html
Response
index.html
GET style.css
Response
Time
style.css
HTTP/1.1
Loading
Latency App NSURLSession Server
GET index.html
Response
index.html
GET style.css
Response
Time
Response
index.html
GET style.css
Response
Time
Response
HTTP/1.1
Loading
Latency App NSURLSession Server
GET index.html
Response
index.html
GET style.css
Response
Time
Response
background.jpg
HTTP/1.1
Loading
Latency App NSURLSession Server
GET index.html
Response
index.html
GET style.css
Response
Time
Response
background.jpg
finish
HTTP/1.1
Loading
Latency App NSURLSession Server
GET index.html
Response
index.html
GET style.css
Response
Time
HTTP/1.1
Response
background.jpg
finish
HTTP/2 Server Push NEW
Loading
Latency App NSURLSession Server
Time
HTTP/1.1
HTTP/2 Server Push NEW
Loading
Latency App NSURLSession Server
GET index.html
Time
HTTP/1.1
HTTP/2 Server Push NEW
Loading
Latency App NSURLSession Server
GET index.html
Response
Time
HTTP/1.1
HTTP/2 Server Push NEW
Loading
Latency App NSURLSession Server
GET index.html
Response
index.html
Time
HTTP/1.1
HTTP/2 Server Push NEW
Loading
Latency App NSURLSession Server
GET index.html
Response
index.html
PUSH 2, 3, n
Time
HTTP/1.1
HTTP/2 Server Push NEW
Loading
Latency App NSURLSession Server
GET index.html
Response
index.html
GET style.css
PUSH 2, 3, n
Time
HTTP/1.1
HTTP/2 Server Push NEW
Loading
Latency App NSURLSession Server
GET index.html
Response
index.html
GET style.css
Response PUSH 2, 3, n
Time
HTTP/1.1
HTTP/2 Server Push NEW
Loading
Latency App NSURLSession Server
GET index.html
Response
index.html
GET style.css
Response PUSH 2, 3, n
style.css
Time
HTTP/1.1
HTTP/2 Server Push NEW
Loading
Latency App NSURLSession Server
GET index.html
Response
index.html
GET style.css
Response PUSH 2, 3, n
style.css
Time
Loading
Latency App NSURLSession Server
GET index.html
Response
index.html
GET style.css
Response PUSH 2, 3, n
style.css
Response
Time
Loading
Latency App NSURLSession Server
GET index.html
Response
index.html
GET style.css
Response PUSH 2, 3, n
style.css
Response
Time
Loading
Latency App NSURLSession Server
GET index.html
Response
index.html
GET style.css
Response PUSH 2, 3, n
style.css
Response
Time
Loading
Latency App NSURLSession Server
GET index.html
Response
index.html
GET style.css
HTTP/2 Response PUSH 2, 3, n
Server Push style.css
Response
Time
Loading
Latency App NSURLSession Server
GET index.html
Response
index.html
GET style.css
HTTP/2 Response PUSH 2, 3, n
Server Push style.css
Response
Time
Network statistics
NSURLSession API NEW
Network statistics
Network statistics
Network statistics
Network statistics
NSURLSessionTaskMetrics
NSURLSession API NEW
NSURLSessionTaskMetrics
NSURLSessionTaskMetrics
NSURLSession API NEW
NSURLSessionTaskMetrics
NSURLSessionTaskMetrics
taskInterval: NSDateInterval
NSURLSession API NEW
NSURLSessionTaskMetrics
NSURLSessionTaskMetrics
taskInterval: NSDateInterval
redirectCount: Int
NSURLSession API NEW
NSURLSessionTaskMetrics
NSURLSessionTaskMetrics
taskInterval: NSDateInterval
redirectCount: Int
transactionMetrics: [NSURLSessionTaskTransactionMetrics]
NSURLSession API NEW
NSURLSessionTaskMetrics
NSURLSessionTaskMetrics
NSURLSessionTaskTransactionMetrics
taskInterval: NSDateInterval
redirectCount: Int
transactionMetrics: [NSURLSessionTaskTransactionMetrics]
Four Categories of Metrics
NSURLSession API NEW
NSURLSessionTaskTransactionMetrics
NSURLSession API NEW
NSURLSessionTaskTransactionMetrics
NSURLSessionTaskTransactionMetrics
request: NSURLRequest
response: NSURLResponse?
NSURLSession API NEW
NSURLSessionTaskTransactionMetrics
request: NSURLRequest
response: NSURLResponse?
NSURLSession API NEW
NSURLSessionTaskTransactionMetrics
NSURLSession API NEW
NSURLSessionTaskTransactionMetrics
NSURLSessionTaskTransactionMetrics
networkProtocolName: String?
NSURLSession API NEW
NSURLSessionTaskTransactionMetrics
http/1.1
networkProtocolName: String? h2
spdy/3, spdy/3.1
NSURLSession API NEW
NSURLSessionTaskTransactionMetrics
http/1.1
networkProtocolName: String? h2
spdy/3, spdy/3.1
isProxyConnection: Bool
NSURLSession API NEW
NSURLSessionTaskTransactionMetrics
http/1.1
networkProtocolName: String? h2
spdy/3, spdy/3.1
isProxyConnection: Bool
isReusedConnection: Bool
NSURLSession API NEW
NSURLSessionTaskTransactionMetrics
NSURLSession API NEW
NSURLSessionTaskTransactionMetrics
3 - Load Info
NSURLSession API NEW
NSURLSessionTaskTransactionMetrics
3 - Load Info
resourceFetchType: NSURLSessionTaskMetricsResourceFetchType
NSURLSession API NEW
NSURLSessionTaskTransactionMetrics
3 - Load Info
resourceFetchType: NSURLSessionTaskMetricsResourceFetchType
.networkLoad
.localCache
.serverPush
NSURLSession API NEW
NSURLSessionTaskTransactionMetrics
NSURLSession API NEW
NSURLSessionTaskTransactionMetrics
NSURLSessionTaskTransactionMetrics
fetchStartDate: NSDate?
domainLookupStartDate: NSDate?
domainLookupEndDate: NSDate?
connectStartDate: NSDate?
secureConnectionStartDate: NSDate?
secureConnectionEndDate: NSDate?
connectEndDate: NSDate?
NSURLSession API NEW
NSURLSessionTaskTransactionMetrics
NSURLSessionTaskTransactionMetrics
NSURLSession API NEW
NSURLSessionTaskTransactionMetrics
NSURLSession API NEW
NSURLSessionTaskTransactionMetrics
fetchStart
Task
NSURLSession API NEW
NSURLSessionTaskTransactionMetrics
fetchStart
Task
NSURLSession API NEW
NSURLSessionTaskTransactionMetrics
fetchStart
Task
NSURLSession API NEW
NSURLSessionTaskTransactionMetrics
fetchStart domainLookupStart
Task DNS
domainLookupEnd
NSURLSession API NEW
NSURLSessionTaskTransactionMetrics
domainLookupStart
DNS
domainLookupEnd
fetchStart
Task
NSURLSession API NEW
NSURLSessionTaskTransactionMetrics
connectStart connectEnd
fetchStart domainLookupStart
domainLookupEnd
NSURLSession API NEW
NSURLSessionTaskTransactionMetrics
connectStart connectEnd
Connection Establishment
fetchStart domainLookupStart
Task DNS
domainLookupEnd
NSURLSession API NEW
NSURLSessionTaskTransactionMetrics
connectStart connectEnd
TCP
Connection Establishment
fetchStart domainLookupStart
Task DNS
domainLookupEnd
NSURLSession API NEW
NSURLSessionTaskTransactionMetrics
connectStart connectEnd
fetchStart domainLookupStart
TCP
domainLookupEnd
NSURLSession API NEW
NSURLSessionTaskTransactionMetrics
secureConnectionStart secureConnectionEnd
connectStart connectEnd
fetchStart domainLookupStart
TCP TLS
domainLookupEnd
NSURLSession API NEW
NSURLSessionTaskTransactionMetrics
secureConnectionStart secureConnectionEnd
TLS
connectStart connectEnd
fetchStart domainLookupStart
TCP
domainLookupEnd
NSURLSession API NEW
NSURLSessionTaskTransactionMetrics
secureConnectionStart secureConnectionEnd
connectStart connectEnd
fetchStart domainLookupStart
TCP TLS
domainLookupEnd
NSURLSession API NEW
NSURLSessionTaskTransactionMetrics
secureConnectionStart secureConnectionEnd
connectStart connectEnd
fetchStart domainLookupStart
TCP TLS
domainLookupEnd
NSURLSession API NEW
NSURLSessionTaskTransactionMetrics
secureConnectionStart secureConnectionEnd
connectStart connectEnd
fetchStart domainLookupStart
TCP TLS
domainLookupEnd requestStart
requestEnd
NSURLSession API NEW
NSURLSessionTaskTransactionMetrics
GET
requestStart
requestEnd
secureConnectionStart secureConnectionEnd
connectStart connectEnd
fetchStart domainLookupStart
TCP TLS
domainLookupEnd
NSURLSession API NEW
NSURLSessionTaskTransactionMetrics
secureConnectionStart secureConnectionEnd
200
Task DNS Connection Establishment GET HTTP
OK
domainLookupEnd requestStart
requestEnd
NSURLSession API NEW
NSURLSessionTaskTransactionMetrics
responseStart
responseEnd
200
OK
secureConnectionStart secureConnectionEnd
connectStart connectEnd
fetchStart domainLookupStart
TCP TLS
domainLookupEnd requestStart
requestEnd
NSURLSession API NEW
NSURLSessionTaskTransactionMetrics
secureConnectionStart secureConnectionEnd
200
Task DNS Connection Establishment GET HTTP
OK
domainLookupEnd requestStart
requestEnd
NSURLSession API NEW
NSURLSessionTaskTransactionMetrics
secureConnectionStart secureConnectionEnd
200
Task DNS Connection Establishment GET HTTP
OK
domainLookupEnd requestStart
requestEnd
NSURLSession API NEW
NSURLSessionTaskTransactionMetrics
200
Task DNS Connection Establishment GET HTTP
OK
domainLookupEnd requestStart
requestEnd
NSURLSession API
NSURLSessionTaskTransactionMetrics
NSURLSession API
NSURLSessionTaskTransactionMetrics
class MySessionDelegate: NSObject, NSURLSessionTaskDelegate {
@objc(URLSession:task:didFinishCollectingMetrics:)
func urlSession(_ session: NSURLSession, task: NSURLSessionTask, didFinishCollecting metrics:
NSURLSessionTaskMetrics) {
//metrics.redirectCount
//metrics.taskInterval
//metrics.transactionMetrics[0].connectStartDate …
}
NSURLSession API
NSURLSessionTaskTransactionMetrics
class MySessionDelegate: NSObject, NSURLSessionTaskDelegate {
@objc(URLSession:task:didFinishCollectingMetrics:)
func urlSession(_ session: NSURLSession, task: NSURLSessionTask, didFinishCollecting metrics:
NSURLSessionTaskMetrics) {
//metrics.redirectCount
//metrics.taskInterval
//metrics.transactionMetrics[0].connectStartDate …
}
task.resume()
NSURLSession API
Network statistics
NSURLSession API
Network statistics
Summary
NSURLSession API
Network statistics
Summary
Summary
Summary
Available in NSURLSession
Security
Never an afterthought
Security
Transport Layer Security
Security
Transport Layer Security
Protects data
Security
Transport Layer Security
Protects data
Cipher—algorithm for encrypting/decrypting data
Security
Transport Layer Security
Protects data
Cipher—algorithm for encrypting/decrypting data
Protects data
Cipher—algorithm for encrypting/decrypting data
$ nscurl https://insecure.example.com/
Security
nscurl
$ nscurl https://insecure.example.com/
nscurl[1234:123456] NSURLSession/NSURLConnection HTTP load failed
(kCFStreamErrorDomainSSL, -9824)
Security
nscurl
NSAllowsArbitraryLoadsInWebContent
App Transport Security
NSAllowsArbitraryLoadsInWebContent
NSRequiresCertificateTransparency
App Transport Security
NSAllowsArbitraryLoadsInWebContent
NSRequiresCertificateTransparency
NSURLSession
Summary
NSURLSession
• HTTP/2 Server Push
Summary
NSURLSession
• HTTP/2 Server Push Performance!
Summary
NSURLSession
• HTTP/2 Server Push Performance!
• Network statistics
Summary
NSURLSession
• HTTP/2 Server Push Performance!
• Network statistics Faster and better analysis of applications
Summary
NSURLSession
• HTTP/2 Server Push Performance!
• Network statistics Faster and better analysis of applications
• Security
Summary
NSURLSession
• HTTP/2 Server Push Performance!
• Network statistics Faster and better analysis of applications
• Security Protect user data
Summary
NSURLSession
• HTTP/2 Server Push Performance!
• Network statistics Faster and better analysis of applications
• Security Protect user data
https://developer.apple.com/wwdc16/711
Related Sessions