프리랜서 프로젝트 하면서 약관이나 이미지 파일등을 blob 또는 data 스키마 형태로 다운로드 하는 경우 파일앱 - 나의 iPhone에 

보통 저장을 한다. 시간이 나서 iCloud Drive 에 저장하고 싶어져서 구현 했는데 간단했지만 툴버그로 파일앱에 폴더가 안보여 한참을 

고생했다..

 

참고자료 : https://developer.apple.com/documentation/cloudkit/enabling_cloudkit_in_your_app

 

Info.plist 설정 추가

이 설정이 빠지만 파일앱 - iCloud Drive에 앱 폴더가 노출되지 않는다. 꼭 추가하시라..

<key>NSUbiquitousContainers</key>
	<dict>
		<key>iCloud.$(PRODUCT_BUNDLE_IDENTIFIER)</key>
		<dict>
			<key>NSUbiquitousContainerIsDocumentScopePublic</key>
			<true/>
			<key>NSUbiquitousContainerName</key>
			<string>앱 이름</string>
			<key>NSUbiquitousContainerSupportedFolderLevels</key>
			<string>Any</string>
		</dict>
	</dict>

 

Signing & Capabilities

+ Capability 버튼을 눌러서 iCloud 를 추가한다.

게시물에 이미지 파일을 업로드 할 수 있는 환경이 아니라서 글로 쓴다.

 

1. iCloud - Services - iCloud Documents 체크

2. Containers 항목은 하단에 + 버튼을 클릭하고 id를 추가해준다. 추가 후 체크 할것.

    ex) iCloud.kr.xxx.xxxxxxxxx (iCloud.번들아이디)

    Containers를 추가하면  https://developer.apple.com/ 에 Identifiers - Active - iCloud Containers에 

    아이디가 추가된다.

3. Profiles 인증서 적용

 

파일 저장 코드

private func fileSave(fileName: String, data: Data) {
        
        if let containerUrl = FileManager.default.url(forUbiquityContainerIdentifier: nil)?.appendingPathComponent("Documents") {
            // iCloud 파일 저장 코드
            // 참고자료 : https://velog.io/@kuruma-42/iCloud-Data-Back-Up
            if !FileManager.default.fileExists(atPath: containerUrl.path, isDirectory: nil) {
                do {
                    try FileManager.default.createDirectory(at: containerUrl, withIntermediateDirectories: true, attributes: nil)
                }
                catch {
                    log(direction: .ERROR, ofType: self, datas: error.localizedDescription)
                }
            }
            
            let fileUrl = containerUrl.appendingPathComponent(fileName)
            do {
                try data.write(to: fileUrl)
            }
            catch {
                log(direction: .ERROR, ofType: self, datas: error.localizedDescription)
            }
        } else {
            // 나의 iPhone 파일 저장 
            // iCloud 비활성화 또는 로그인이 안된 상태면 해당 로직으로 들어옴.
            let dir = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)[0]
            
            let filePath = "\(dir)/\(fileName)"
            
            if FileManager.default.createFile(atPath: filePath, contents: data, attributes: nil) == true {
                log(direction: .ETC, ofType: self, datas: "IOS 14.5 이하 File Download Success!!", filePath)
            } else {
                log(direction: .ETC, ofType: self, datas: "IOS 14.5 이하 File Download Fail!!", filePath)
            }
        }
    }

 

*** 정상적으로 전부 세팅했는데 파일앱에서 폴더가 안보일 경우 .. 나는 계속 안보여서 3시간을 허비하다 Build 버전을 1 에서 2로 변경하고 클린빌드 했더니 정상적으로 폴더가 iCloud Drive에 생성이 됬다. ㅜㅜ

+ Recent posts