-
iOS [Swift] - FileManager를 이용해서 파일 다운로드 후 저장하기iOS Develop 2023. 1. 18. 13:21반응형
내용을 살펴보기에 앞서 Apple 공식 문서에 정의된 FileManager에 대해 짚고 넘어가보겠습니다 :)
FileManager
- FileManager Class는 shared file manager object에 편리한 접근을 제공합니다.
- File manager object는 일반적으로 파일 시스템과 상호 작용하는 것을 기본 모드로 합니다.
- 따라서, 저희는 이를 통해 파일 & 디렉토리를 찾고, 만들고, 복사하고, 이동할 수 있습니다.
- 그리고 또 파일 & 디렉토리에 대한 정보를 얻거나 속성의 일부를 변경할 때 사용할 수 있습니다.
- 만약에 파일이나 디렉토리를 이동, 복사, 연결, 제거하는 경우 file manager object와 함께 delegate를 사용하여 작업 관리를 할 수 있습니다. delegate의 역할은 작업을 확인하고, 오류가 발생할 때 진행할지 말지에 대한 여부를 결정하는 것입니다.
- iOS 5.0 이상 & macOS 10.7 이상에서 FileManager에는 iCloud에 저장된 항목을 관리하는 메서드가 포함되어 있습니다.
- 따라서, cloud 저장소로 태그가 지정된 파일이나 디렉토리는 iCloud에 동기화돼서 사용자의 iOS 장비나 mac에서 사용할 수 있습니다.
이제 FileManager에 대한 개념을 살펴 보았으니 다음 단계로 진행해보겠습니다. ㅎㅎ
저는 "회사 자산 관리 시스템의 매뉴얼 ppt" 다운로드를 FileManager를 사용해서 아이폰 > 파일 에 저장해보도록 할 것입니다.
따라서, ppt를 다운로드 하는 과정은 Alamofire를 이용할 것이고, 다운로드 된 파일의 경로 설정은 FileManager를 이용할 것입니다. 🧐
가장 먼저!! 우리는 FileManager를 통해 내 휴대폰의 경로를 찾아내고 그 곳에 파일을 생성하거나 수정하거나 다운로드 할 것이기 때문에..
info.plist에 그것의 사용에 대한 permission(?)을 YES로 설정해주어야 합니다. 🫠 (Alamofire를 위해 네트워크 설정하는 것은 또 별도이기 때문에 그 것에 대한 설정도 추가해주시길 바랍니다. ㅎㅎ)
SO!! 다음과 같이 값을 추가해주세용. (mac에서 휴대폰 연결하고 파일에서도 확인하고 싶으시다면, Application supports iTunes file sharing -> YES 처리 해주세용)

이제 준비는 마쳤고, 코드를 살펴 보겠습니다.
아래 코드는 download~~(url: URL, fileName: String, completion: @escaping () -> Void) 형태의 메소드로 감싸져 있는 점 참고 부탁드립니다 :)
// FileManager의 인스턴스를 생성합니다. let fileManager = FileManager.default // 사용자 기기의 document 디렉토리의 경로를 가져온다. // 인자의 for 부분을 통해 다양한 디렉토리에 대한 경로를 가져올 수 있으니 SearchPathDirectory 키워드를 참고하시면 좋을 것 같습니다. :) let appURL = fileManager.urls(for: .documentDirectory, in: .userDomainMask)[0] // 위에서 사용자의 경로를 가져온 후, 맨 뒤에 저장할 파일의 이름을 저장하는 것입니다. let fileURL = appURL.appendingPathComponent("csj시스템 사용법.pptx") // 최종적으로 파일이 저장될 위치에 대한 목적지 정보!! let destination: DownloadRequest.Destination = { _, _ in return (fileURL, [.removePreviousFile, .createIntermediateDirectories]) }// AlamoFire를 이용한 File Download AF.download(url, method: .get, parameters: nil, encoding: JSONEncoding.default, to: destination).downloadProgress { (progress) in // 설치의 진행도를 알 수 있다. 이를 가지고 시각화하여 사용자에게 제공해도 좋다. print(progress.fractionCompleted) }.response{ response in if response.error != nil { print("파일다운로드 실패") }else{ print("파일다운로드 완료") completionHandler() } }'iOS Develop' 카테고리의 다른 글
iOS [Swift] - OAuth 개념 스터디 (0) 2023.02.14 iOS [Swift] - Moya를 통한 네트워크 통신 (0) 2023.02.14 오픈 소스 공유 - Sliding Tab Bar (0) 2022.12.26 iOS [Swift] - Coordinator Pattern (1) (0) 2022.12.19 iOS [Swift] - Delegate로 State Observing하기 (0) 2022.12.02