프리랜서 프로젝트 하면서 약관이나 이미지 파일등을 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에 생성이 됬다. ㅜㅜ
'Swift > 기타' 카테고리의 다른 글
[SWIFT]UI좌료를 카메라 좌표로 변환하기 (0) | 2023.06.09 |
---|---|
[SWIFT]ImageFileManager Class (0) | 2023.06.08 |
[SWIFT]MVVM Module Class (0) | 2023.06.05 |
[SWIFT]XCode 빌드번호 자동 증가 스크립트 (0) | 2023.06.01 |
[SWIFT]QR코드 처럼 코너 가이드 라인 그리기 (0) | 2023.05.24 |