정말 오랫만에 글을 쓰게 되었습니다.
이번에 소개하고자 하는 내용은 제목과 동일하게 ios에서 ~입니다.
upload와 download method의 경우 공식문서를 참조하였습니다.
(공식문서 링크)
우선 schema.graphql의 경우 매일 가물가물해서 수정방법을 말해보자면
1. xcode를 이용해 shema.graphql에 들어가 내용을 변경한다.
2. 변경 후 터미널을 키고 cd -> finder켜서 해당 project가 속한 dir을 drag한다.
3. 해당 dir에 접근했다면 amplify codegen models 입력한다.
이렇게 하면 된다.
이번에는 upload method에 대해 작성하겠다.
let localImageUrl = url
let fileNameKey = fileName
let uploadTask = Amplify.Storage.uploadFile(
key: fileNameKey,
local: localImageUrl
)
progressSink = uploadTask
.inProcessPublisher
.sink { progress in
print("Progress: \(progress)")
}
resultSink = uploadTask
.resultPublisher
.sink {
if case let .failure(storageError) = $0 {
print("Failed: \(storageError.errorDescription). \(storageError.recoverySuggestion)")
}
}
receiveValue: { data in
print("Completed: \(data)")
}
}
여기서 포인트는 url이다. 이거 때문에 정말 많이 헤맸는데
upload시의 url의 경우 simulator에서의 url이 적용되면 성공한거다.
이번에는 download method에 대하여 알아보겠다.
let url: URL
do {
url = try await Amplify.Storage.getURL(key: fileName)
} catch {
print("Failed to get URL for image: \(error)")
return UIImage(named: "test1.jpeg")!
}
let downloadTask = Amplify.Storage.downloadFile(
key: fileName,
local: url,
options: nil
)
Task {
for await progress in await downloadTask.progress {
print("Progress: \(progress)")
}
}
do {
//let imageData = try Data(contentsOf: url)
let (data, _) = try await URLSession.shared.data(from: url)
let image = UIImage(data: data) ?? UIImage(named: fileName)!
//try await downloadTask.value
print("Completed!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!")
//return UIImage(data: imageData) ?? UIImage(named: fileName)!
return image
} catch {
print("--------------------------------------------------------------------------------Failed to get URL for image: \(error)")
print(url)
return UIImage(named: "test1.jpeg")!
}
}
비동기 처리로 구현하였다. 또한 return 값을 UIImage로 설정하여 TableViewCell에서 바로 이용이 가능하게 만들었다.
여기서 포인트 역시 url인데 upload에서 사용한 url과 같으면 절대 안된다. 이것 때문에 계속 에러가 떴는데
download에서의 url의 경우 S3에 저장된 url을 불러와야지만 된다. 정말 단순한 사실이지만 햇갈렸다.
또한 위에 주석처리된 contentsOf의 경우 ios14? 부터 대충 depreciate 되었다고 해서 URLSession방식으로 바꿔주었다.
바꾸지 않았을 때 무슨 보라색으로 에러뜨던데 그런거 처음밨다.
쨋든 이렇게 만들었다.
대충 수 많은 시행착오를 겪고 그랬음
'ios 앱개발' 카테고리의 다른 글
[SWIFT] IOS에서 AWS Amplify를 이용해 이미지 저장과 불러오기(S3 storage) (0) | 2024.02.10 |
---|---|
[SWIFT] IOS 에서 AWS Amplify를 이용해 CRUD 구현하기 (1) | 2024.02.08 |
ios에서 AWS Amplify를 사용할 때 GraphQL 수정방법 (0) | 2023.07.15 |
XCODE tableview에 segue 여러개 연결하여 view controller 여러개 사용하기 (0) | 2023.06.10 |
iOS 앱개발 과정 (0) | 2023.06.09 |