Swift로 데이터 전송 시 UniformTypeIdentifiers 사용하기

작성일 :

Swift로 데이터 전송 시 UniformTypeIdentifiers 사용하기

UniformTypeIdentifiers란 무엇인가?

UniformTypeIdentifiers(UTI)는 데이터를 식별하고 분류하는 데 사용하는 시스템으로, 파일 유형이나 데이터 유형을 식별하는 데 도움을 줍니다. Apple은 이 시스템을 통해 iOS 및 macOS 개발자들이 더 나은 데이터 관리와 전송을 할 수 있도록 지원합니다. UTI를 사용하면 데이터의 형식과 그 형식에 맞는 처리 방법을 정의할 수 있습니다. 예를 들어, 텍스트 파일, 이미지 파일, 비디오 파일 등 다양한 형식을 지원합니다.

UTI는 주로 파일을 다루는 앱이나 다양한 형식의 데이터를 전송하는 앱에서 사용됩니다. iOS 14부터 Apple은 기존의 MobileCoreServices 대신 UniformTypeIdentifiers 프레임워크를 도입하여 더욱 간편하고 직관적인 사용을 가능하게 했습니다.

UTI 사용의 필요성

데이터 전송이나 처리 시 UTI를 사용하는 주요 이유는 다음과 같습니다:

  • 명확한 데이터 식별: UTI는 데이터의 형식을 명확하게 식별할 수 있도록 도와줍니다.
  • 호환성: 여러 형식의 데이터를 처리할 때 호환성을 보장합니다.
  • 유연성: 새로운 파일 형식이나 데이터 형식이 추가될 때 유연하게 대처할 수 있습니다.

Swift에서 UniformTypeIdentifiers 사용하기

Swift에서 UniformTypeIdentifiers를 사용하는 방법을 단계별로 알아보겠습니다. 이 예제에서는 텍스트 파일을 생성하고 이를 전송하는 과정을 설명하겠습니다.

1. 프로젝트 설정

먼저, Xcode에서 새로운 프로젝트를 생성합니다. 프로젝트를 생성한 후, Info.plist 파일에 필요한 설정을 추가해야 합니다.

xml
<key>UTExportedTypeDeclarations</key>
<array>
    <dict>
        <key>UTTypeIdentifier</key>
        <string>com.example.text</string>
        <key>UTTypeDescription</key>
        <string>Example Text File</string>
        <key>UTTypeTagSpecification</key>
        <dict>
            <key>public.filename-extension</key>
            <string>txt</string>
            <key>public.mime-type</key>
            <string>text/plain</string>
        </dict>
    </dict>
</array>

위 코드에서 UTTypeIdentifier는 데이터를 식별하는 고유한 문자열입니다. UTTypeDescription은 타입에 대한 설명입니다. UTTypeTagSpecification에서는 파일의 확장자와 MIME 타입을 지정합니다.

2. Swift 코드 작성

이제 Swift 코드를 작성하여 텍스트 파일을 생성하고 전송하는 방법을 살펴보겠습니다. 우선 UniformTypeIdentifiers 프레임워크를 import해야 합니다.

swift
import UniformTypeIdentifiers

func createTextFile() -> URL? {
    let text = "Hello, world!"
    let data = text.data(using: .utf8)

    do {
        let tempDir = FileManager.default.temporaryDirectory
        let fileURL = tempDir.appendingPathComponent("example").appendingPathExtension("txt")
        try data?.write(to: fileURL)
        return fileURL
    } catch {
        print("Error writing file: \(error)")
        return nil
    }
}

위 함수는 텍스트 파일을 생성하고 임시 디렉토리에 저장한 후 파일의 URL을 반환합니다. text.data(using: .utf8)를 통해 문자열을 데이터로 변환하고, 이를 임시 디렉토리에 쓰는 과정입니다.

3. 파일 전송

이제 생성한 파일을 전송하는 방법을 살펴보겠습니다. 이를 위해 UIDocumentPickerViewController를 사용합니다.

swift
import UIKit

func presentDocumentPicker(on viewController: UIViewController) {
    guard let fileURL = createTextFile() else { return }

    let documentPicker = UIDocumentPickerViewController(forExporting: [fileURL], asCopy: true)
    documentPicker.delegate = viewController as? UIDocumentPickerDelegate
    viewController.present(documentPicker, animated: true, completion: nil)
}

위 함수는 파일을 전송할 뷰 컨트롤러를 입력 받아 UIDocumentPickerViewController를 사용하여 파일을 전송합니다. forExporting 매개변수에 생성한 파일의 URL을 전달하면 파일 전송이 가능합니다.

4. Document Picker Delegate 설정

마지막으로, UIDocumentPickerDelegate를 채택하고 필수 메서드를 구현합니다.

swift
extension ViewController: UIDocumentPickerDelegate {
    func documentPicker(_ controller: UIDocumentPickerViewController, didPickDocumentsAt urls: [URL]) {
        // 선택된 파일 처리
        for url in urls {
            print("Selected file URL: \(url)")
        }
    }

    func documentPickerWasCancelled(_ controller: UIDocumentPickerViewController) {
        print("Document picker was cancelled")
    }
}

위 코드는 UIDocumentPickerDelegate를 구현하여 사용자가 선택한 파일의 URL을 받아 처리하는 과정입니다.

결론

이 글에서는 Swift에서 UniformTypeIdentifiers를 사용하여 데이터를 전송하는 방법에 대해 알아보았습니다. UniformTypeIdentifiers를 사용하면 데이터의 형식을 명확하게 정의하고 이를 처리하는 과정이 간편해집니다. 실용적인 예시를 통해 UTI를 활용하는 방법을 익히셨기를 바랍니다.