프로그래밍/iOS,macOS

[swift] swiftui fileImpoter로 파일 선택하기

chance 2024. 8. 8. 14:05

파일 접근 권한 설정

mac의 경우 프로젝트 설정의 Capability에 Sandbox가 설정되어 있으면 File Access Type에 설정된 폴더의 파일만 사용 가능
모든 폴더의 파일을 가져오려면 App Sandbox 항목 제거

 

iOS의 경우 권한 문제가 발생하는 경우 Info 탭에서 Privacy 추가

 

 

타입식별자 설정

프로젝트 Info 탭에서 Imported Type Identifiers 에 항목추가

extensions에 여러 확장자를 지정할 경우 콤마로 구분
Conforms To 에는 부모 타입을 지정 한다.

 

타입생성

파일패널(대화상자)를 표시하기 위한 퍼블리셔 선언 및 info 에 추가한 타입 식별자로 타입 생성

struct ContentView: View {
   @State var isOpenFile = false
   let myType = UTType(importedAs: "com.chance.mytype", conformingTo: .data)
   
   
   var body: some View {
      VStack {
      
      }
   }
}

 

파일열기 대화상자

swiftui의 fileImporter를 사용해 파일대화상자를 표시한다.

Button(action: {
   isOpenFile = true
}) {
   Text("파일열기")
}
.fileImporter(
   isPresented: $isOpenFile,
   allowedContentTypes: [myType],
   onCompletion: { result in
      switch result {
      case .success(let file):
         guard let url = URL(string: file.absoluteString) else {
            return
         }
         
         // url로 파일 열기
         
         
      case .failure(let error):
         print("\(error.localizedDescription)")
      }
   }
)