Swift 개발자를 위한 UIActivityViewController로 데이터 교환하기

작성일 :

Swift 개발자를 위한 UIActivityViewController로 데이터 교환하기

Swift에서 UIActivityViewController는 공유 및 데이터 교환을 위한 매우 유용한 도구입니다. iOS 애플리케이션에서 데이터를 쉽게 공유할 수 있게 해주며, 사용자에게 다양한 공유 옵션을 제공합니다. 이 문서에서는 UIActivityViewController의 기본 사용법부터 고급 사용법까지 다루겠습니다.

UIActivityViewController란 무엇인가?

UIActivityViewController는 사용자가 사진, 텍스트, 링크 등을 다른 애플리케이션과 공유할 수 있게 해주는 iOS의 기본 컨트롤러입니다. 이를 통해 사용자는 메일, 메시지, 소셜 미디어 등 다양한 방법으로 데이터를 전송할 수 있습니다. UIActivityViewController는 기본적으로 다음과 같은 타입의 데이터를 지원합니다:

  • 텍스트 (String)
  • 이미지 (UIImage)
  • URL (URL)
  • 기타 커스텀 데이터 (Any)

UIActivityViewController 기본 설정

먼저, UIActivityViewController를 설정하고 사용하는 기본 방법을 살펴보겠습니다.

swift
import UIKit

class ViewController: UIViewController {

    func shareText(text: String) {
        let items = [text]
        let activityViewController = UIActivityViewController(activityItems: items, applicationActivities: nil)
        present(activityViewController, animated: true, completion: nil)
    }
}

위 코드에서 shareText 함수는 전달된 텍스트를 UIActivityViewController를 통해 공유합니다. activityItems 배열에 공유할 아이템을 포함시키고, applicationActivitiesnil로 설정했습니다. applicationActivities에는 커스텀 활동을 추가할 수 있지만, 기본 공유 옵션만 사용할 경우 nil로 지정합니다.

다양한 유형의 데이터 공유하기

텍스트 외에도 이미지를 공유하거나, URL을 공유할 수 있습니다. 이를 위해 약간의 코드를 수정해 보겠습니다.

이미지 공유

이미지 공유는 매우 간단합니다. 전달하려는 이미지를 activityItems 배열에 추가하면 됩니다.

swift
func shareImage(image: UIImage) {
    let items = [image]
    let activityViewController = UIActivityViewController(activityItems: items, applicationActivities: nil)
    present(activityViewController, animated: true, completion: nil)
}

URL 공유

URL도 텍스트나 이미지와 마찬가지로 activityItems 배열에 추가하여 공유할 수 있습니다.

swift
func shareURL(url: URL) {
    let items = [url]
    let activityViewController = UIActivityViewController(activityItems: items, applicationActivities: nil)
    present(activityViewController, animated: true, completion: nil)
}

고급 기능

이제 UIActivityViewController의 고급 기능을 살펴보겠습니다. 데이터를 공유할 때 특정한 예외 상황을 설정하거나, 사용자 인터페이스를 커스터마이징할 수 있습니다.

제외할 활동 유형 설정

어떤 활동 유형은 공유 옵션에서 제외하고 싶을 수 있습니다. 이를 위해 excludedActivityTypes 프로퍼티를 사용합니다.

swift
func shareTextWithExclusions(text: String) {
    let items = [text]
    let activityViewController = UIActivityViewController(activityItems: items, applicationActivities: nil)
    activityViewController.excludedActivityTypes = [
        .postToFacebook,
        .postToTwitter
    ]
    present(activityViewController, animated: true, completion: nil)
}

위 코드에서는 Facebook과 Twitter로의 공유를 제외합니다.

커스텀 활동 추가

UIActivity 클래스를 서브클래싱하여 기존의 활동 외에도 커스텀 활동을 추가할 수 있습니다. 예를 들어, 앱 내에서 다른 작업을 수행하는 활동을 추가할 수 있습니다. 커스텀 활동을 추가하려면 새로운 서브클래스를 작성하고, 이를 applicationActivities에 전달합니다.

swift
class CustomActivity: UIActivity {
    override var activityTitle: String? {
        return "Custom Activity"
    }

    override var activityImage: UIImage? {
        return UIImage(systemName: "star")
    }

    override func canPerform(withActivityItems activityItems: [Any]) -> Bool {
        return true
    }

    override func perform() {
        // 커스텀 작업 수행
        activityDidFinish(true)
    }
}

그리고 이를 UIActivityViewController에 적용합니다.

swift
func shareWithCustomActivity(text: String) {
    let items = [text]
    let customActivity = CustomActivity()
    let activityViewController = UIActivityViewController(activityItems: items, applicationActivities: [customActivity])
    present(activityViewController, animated: true, completion: nil)
}

결론

UIActivityViewController는 Swift로 개발된 iOS 애플리케이션에서 데이터 공유를 위한 강력한 도구입니다. 기본적인 텍스트, 이미지, URL 공유부터 고급 기능인 커스텀 활동 추가 및 특정 활동 제외까지 다양한 기능을 제공합니다. 이를 통해 사용자 경험을 향상시키고, 앱 간 데이터 교환을 원활하게 할 수 있습니다. Swift로 iOS 앱을 개발할 때, UIActivityViewController를 활용하여 더욱 풍부한 기능을 제공할 수 있습니다.