2022/09/07 3

219. Task Scheduling

Task Scheduling Task는 처음 생성하면 별다른 동작 없이 대기하고 있다가 resume 메서드가 호출되면 즉시 동작을 시작한다. 이는 사용자에게 즉시 필요한 데이터라면 적합한 작동 방식이다. 하지만 지금 당장 데이터가 필요한 경우가 아니라면 미리 기기의 용량을 차지하거나, 셀룰러 용량을 낭비하게 된다. Task Scheduling은 iOS가 Task의 정보를 저장하고 있다가 지정된 시점에 자동으로 다운로드하는 방식으로 동작한다. 따라서 Task의 주체가 앱이 아니게 되고, Background Session 에서만 구현할 수 있다. @IBAction func startDownload(_ sender: Any) { guard let url = URL(string: bigFileUrlStr) el..

218. Adaptable Connectivity

Adaptable Connectivity 네트워크가 연결되지 않은 상태에서 발생한 Task를 대기상태로 두었다가 연결되면 실행되도록 구현한다. lazy var session: URLSession = { [weak self] in let config = URLSessionConfiguration.default config.waitsForConnectivity = true let session = URLSession(configuration: config, delegate: self, delegateQueue: OperationQueue.main) return session }() SessionConfiguration의 waitsForConnectivity 속성을 true로 변경한다. 이제부터 해당 Sess..

217. Cellular Connection

Cellular Connection 위와 같은 차이점 때문에 네트워크를 사용하는 앱의 경우 사용자가 현재 사용하는 네트워크 방식을 인지할 수 있도록 구현하는 것이 바람직하다. Reachability를 사용하면 이를 쉽게 구현할 수 있지만, 이는 애플의 권장을 벗어난 해결법이다. 애플은 'Framework가 제공하는 API로 허용 여부를 설정'하도록 권고하고 있다. Cellular 연결 설정하기 request.allowsCellularAccess = cellularSwitch.isOn request의 allowsCellularAccess 속성을 Switch의 상태와 동기화한다. DownloadTask는 스위치와 해당 속성의 상태에 따라 다운로드 여부를 결정한다. Switch가 켜져 있는 경우 allowsC..