반응형
LinkedIn 개발자로 성장하면서 남긴 발자취들을 확인하실 수 있습니다.
Github WWDC Student Challenge 및 Cherish, Tiramisul 등 개발한 앱들의 코드를 확인하실 수 있습니다.
개인 앱 : Cherish 내 마음을 들여다보는 시간, 체리시는 디자이너와 PM과 함께 진행 중인 1인 개발 프로젝트입니다.
10년 후, 20년 후 나는 어떤 스토리 텔러가 되어 있을지 궁금하다. 내가 만약에 아직 조금 더 탐구하고 싶은 게 있고, 궁금한 게 있다면, 그게 설사 지금 당장의 내 인생에 도움이 안 되는 것 같더라도 경험해보자. 그 경험들을 온전히 즐기며 내 것으로 만들고, 내 일에 녹여내고... 그러다보면 그 점들이 모여 나란 사람을 그려내는 선이 될 테니까.

Recent Posts
Recent Comments
Total
관리 메뉴

꿈꾸는리버리

[iCloudKit 시리즈 2.2] 나도 백엔드 있다 - 이미지, 비디오, 오디오 CRUD하기 본문

오뚝이 개발자/SwiftUI

[iCloudKit 시리즈 2.2] 나도 백엔드 있다 - 이미지, 비디오, 오디오 CRUD하기

rriver2 2024. 10. 1. 19:33
반응형

 🌷 iCloud 시리즈 목차 

1) iCloud 세팅과 개념 그리고 유저 연결하기

2.1) iCloud CRUD 해보기

2.2) 이미지, 비디오, 오디오 CRUD하기

3) Coredata -> iCloud로 변경하기

3) iCloud Noti 알아보기

4) 여러 에러나 마주했던 문제 상황들 ...


앞선 포스팅에서 이야기했던 것처럼 이 부분이 기본적으로 iCloud가 CRUD를 제공하는 타입이다. 

근데 우리는 image나 audio, video를 백업할 수도 있잖아요 ? 

그래서 이번 포스팅을 작성함둥..!


 💕 iCloud  이미지 Create, Read 

addItem에서 Image도 같이 업로드할 수 있도록 코드를 추가했다.

guard let 구문에서는 Asset에 저장되어 있는 backup_3이라는 이미지를 애플리케이션의 캐시 디렉토리에 "backup_3.png"라는 파일을 저장할 경로를 생성한다. 그리고 image를 data로 만들었다. 

그리고 do catch 구문에서는 해당 url에 데이터를 넣고, 해당 파일의 url을 받아서 CKAsset의 형태로 만든다.

+) CKAsset: CloudKit에서 사용하는 데이터 타입으로, 파일(이미지, 비디오 등)을 CloudKit 데이터베이스에 저장할 때 사용

    private func addItem(name: String) {
        // dictionary로 작동
        let newFruit = CKRecord(recordType: "Fruit")
        newFruit["name"] = name
        
        guard let image = UIImage(named: "backup_3"),
        	  // Asset에 저장되어 있는 backup_3이라는 이미지를 애플리케이션의 캐시 디렉토리에 "backup_3.png"라는 파일을 저장할 경로를 생성
              let url = FileManager.default.urls(for: .cachesDirectory, in: .userDomainMask).first?.appendingPathComponent("backup_3.png"),
        	  // image를 data로 변환
              let data = image.jpegData(compressionQuality: 1.0) else { return }
        
        do {
        	// 해당 url에 데이터를 넣고
            try data.write(to: url)
            // 해당 파일의 url을 받아서 CKAsset의 형태로 만듦
            let asset = CKAsset(fileURL: url)
            // 그리고 이 asset을 "image" 프로퍼티로 넣음
            newFruit["image"] = asset
            saveItem(record: newFruit)
        } catch let error {
            print(error)
        }
    }

 

 

그리고 해당 파일을 불러올 때는 AKAsset로 불러와서 해당 url을 받은 후 사용한다.

    private func fetchItems() {
    	...
        queryOperation.recordMatchedBlock = { (returnedRecordID, returnedResult) in
            switch returnedResult {
            case .success(let record):
                guard let name = record["name"] as? String else { return }
                let imageAsset = record["image"] as? CKAsset
                let imageURL = imageAsset?.fileURL
                print(record)
                returnedItems.append(FruitModel(name: name, imageURL: imageURL, record: record))
            case .failure(let error):
                print("Error: \(error)")
            }
        }
        ...
}

 

 

이렇게 저장한 Record의 image는 iCloud에서 다운을 받을 수도 있다.

 


이제 다음으로는 "Coredate -> iCloud로 변경하기"를 알아볼 예정입니다 ~!

반응형
Comments