Jaebi의 Binary는 호남선

[Swift] 대용량 파일 다운로드 (0) - 계획 본문

Swift

[Swift] 대용량 파일 다운로드 (0) - 계획

jaebijae 2025. 3. 8. 21:13

목차

    개요

    • 업무 중 고객이 대용량+다중 파일을 다운로드 하여 휴대폰에 보관하고, 관리를 해야하는 요구 사항이 생김
      • 예: 유튜브, 넷플릭스 오프라인 콘텐츠 저장

    요구사항

    • 파일 다운받기 전 여유 공간 / 파일 사이즈를 확인하여 알맞은 처리
    • 다운 받을때 Cellular / Wifi 선택지를 줘야함 (Apple에서 권장)
    • 내가 원하는 경로에 다운받은 파일을 넣어줘야 함
    • Background에서 다운로드 가능 해야 함
    • 파일 다운로드 중 Pause / Cancel / Resume 및 강제 앱 종료 시나리오 확인
    • 대용량 (최대 500MB) 파일 다운로드가 문제없이 되어야 함
    • 다운로드는 여러개가 동시에 가능하게 되어야 함
    • 사용자는 파일의 다운로드 시작 과 끝을 Notification으로 알아야 함
      • 진행상황은 iOS Notification으로 표시 불가능 (Android는 가능한데 ㅠㅠ)
    • (Optional) `async` / `await`을 최대한 사용 (`completionHandler` 지양)

    구현 계획

    1. 간단한 `FileDownloadService` 만들기
      • `async` / `await` 최대한 사용
      • 다운로드 진행상황 확인 기능
      • Background에서 다운로드 기능
      • 파일 다운로드 후 원하는 경로에 해당 파일 넣기 및 확인 기능
    2. `FileDownloadSerivce`에 Pause / Cancel / Resume 기능 추가
      • 다운로드 중 강제 앱 종료 시나리오 처리
    3. 여러 파일 동시에 다운로드 기능 추가
      • 각 다운로드 세션이 독립적이게 진행되는 기능
      • 여러 다운로드 세션을 묶어 모니터링 기능
    4. 다운로드 받기 전 여유 공간 및 파일 사이즈 확인 기능 추가
    5. 다운로드 받기 전 Cellular / Wifi 선택지 추가

    진행 상황

     

    [Swift] 대용량 파일 다운로드 (2) - FileDownloadService

    목차목표`async` / `await` 사용다운로드 진행상황 확인 기능Background에서 다운로드 기능구현 내용Singleton FileDownloadService 클래스 구현`URLSessionDownloadDelegate`를 준수하여 Delegate 함수들로 세션 진행상황

    jaehwijaebi.tistory.com

     

    [Swift] 대용량 파일 다운로드 (3) - FileManager

    목차목표파일 다운로드 성공시 원하는 Directory에 파일 저장해당 파일이 이미 존재할 경우 Replace 동작해당 파일은 App의 Files앱 내에서도 확인 가능구현 내용`Info.plist`의 키 설정`Info.plist`의 `Supports

    jaehwijaebi.tistory.com

     

    [Swift] 대용량 파일 다운로드 (4) - 다운로드 진행상황 확인 및 View 연결

    목차목표다운로드 진행상황 확인 (Byte와 퍼센트 분율)View에 연동하여 UI로 확인 구현 내용 다운로드 진행상황 확인을 위한 Delegate 구현`urlSession(_:downloadTask:didWriteData:totalBytesWritten:totalBytesExpectedT

    jaehwijaebi.tistory.com