기록을 jSON 파일로 내보내기 위해 사용한 fileImporter와 fileExporter. 추가로 json확장자를 내가 원하는 확장자로 지정하는 것까지의 기록.
fileImporter와 fileExporter
SwiftUI에서는 iOS14.0 이상부터 fileImporter, fileExporter 지원
- fileImporter: 파일 가져오기
func fileImporter(
isPresented: Binding<Bool>,
allowedContentTypes: [UTType],
onCompletion: @escaping (Result<URL, Error>) -> Void
) -> some View
- isPresented에 들어갈 Binding 값이 true가 되면 fileImporter가 나타난다.
- allowedContentTypes에 개발자가 다루고 싶은 파일만 선택 가능 하도록 UTType을 지정할 수 있다 (ex. json이나 plainText와 같은 것들. 더 많은 UTType)
- 파일 화면에서 파일을 고르고 나면 onCompletion에서 받아 처리할 수 있다.
- 이 때, 해당 URL로 jSON 파일을 코어데이터에 저장할 수 있도록 변경 하게 되는데 엑세스가 거부될 수 있어 일시적으로
startAccessingSecurityScopedResource()
를 사용해 접근을 허가한다. 사용이 끝난 뒤에는stopAccessingSecurityScopedResource()
로 복원한다.
- 이 때, 해당 URL로 jSON 파일을 코어데이터에 저장할 수 있도록 변경 하게 되는데 엑세스가 거부될 수 있어 일시적으로
- fileExporter: 파일 내보내기
func fileExporter<D>(
isPresented: Binding<Bool>,
document: D?,
contentType: UTType,
defaultFilename: String? = nil,
onCompletion: @escaping (Result<URL, Error>) -> Void
) -> some View where D : FileDocument
- Export에서는 document라는 파라메터를 받는다. FileDocument 프로토콜을 채택한 객체가 필요하다. 원하는 파일 형식으로 변환해 사용한다.
- contentType은 fileImporter에서 사용한 것과 마찬가지로 원하는 UTType을 지정해 사용 가능하다.
- defaultFilename은 내가 원하는 파일명으로 설정할 때 사용한다.
Custom UTType
import UniformTypeIdentifiers
extension UTType {
static var mind: UTType {
UTType(exportedAs: "com.xxx.fileType")
}
}
- 앱에서 파일에 접근하는 경우 LSSupportsOpeningDocumentsInPlace 관련 warning 발생
- Info.plist에서 LSSupportsOpeningDocumentsInPlace 값을 추가한 뒤에 값을 YES로 변경
반응형
'SwiftUI > Planting-Mind Dev Log' 카테고리의 다른 글
devlog 07. 나중에 보려고 만든 UITest 관련 모음.zip (0) | 2024.04.21 |
---|---|
devlog 05. Scheme '__' is not currently configured for the test action. (0) | 2024.03.21 |
devlog 04. Localization with String Catalog (0) | 2024.03.13 |
devlog 03. sink에 들어오는 값은 willSet의 값이었다. (0) | 2024.03.12 |
devlog 02. github action 세팅하기 (Feat. github action에서 xcresult 확인하는 법) (0) | 2024.03.04 |