메이쁘

[Swift] iOS의 Native 기능인 공유하기(Share) 를 구현해보자! 본문

Technology/iOS - Xcode

[Swift] iOS의 Native 기능인 공유하기(Share) 를 구현해보자!

메이쁘 2020. 7. 12. 00:50

 

 

안녕하세요.

 

 

*** 버전 체크 하고 진행하세요!

 

  -  Swift : 5

  -  XCode : 11.5

  -  iOS : min 9.0

 

 

주로 특정 파일, URL, TEXT 를 카카오톡, SNS, 메세지 등 다른 앱에다 공유하고자 할 때 사용됩니다.

 

TextField 에 입력한 텍스트를 공유하기

 

 

 

그럼 공유하기 의 동작 원리를 조금 자세히 파악해보겠습니다.

 

타 블로그(출처 맨 하단) 게시글을 참고하자면,

 

 

공유하기 시 타 앱에 직접 접근하는 것이 아닌 앱 패키지 내에 존재하는 Extension 에 접근하여 전달한다고 합니다.

*** Extension : 애플리케이션의 특정 기능을 다른 앱에서 사용할 수 있게 하는 기능

 

이러한 익스텐션(Extension) 은 크게 Action, Share 이 있고, 그 외에 더 있습니다!

 

그래서 앱 설치 시 Extension 도 만들어지고, 삭제 시 같이 지워집니다.

 

 

여하튼, 공유하기를 통해 타 앱을 클릭할 경우

 

해당 앱이 실행되는 것이 아니라, 앱의 Extension이 실행되어 공유하는 작업을 진행하게 되는데요.

 

진행이 완료된 경우 Extension이 종료되면서 바로 앱 또한 종료됩니다!!

 

*** 공유하기는 앱 <-> 앱 이 아닌,  앱 <-> 앱의 익스텐션 입니다.

 

 

특정 앱에 공유를 하기 위해서는 그 앱이 App Groups 에 같이 포함되어있고, 그 앱이 Extension을 가지고 있는 경우에 가능합니다.

 

 

 

 

말이 길어졌네요.

 

 

그럼, 위에서 설명드린 Native 기능 중 하나인 공유하기(Share) 기능을 구현해보겠습니다.

 

 

 

// 공유하기 기능
    @IBAction func shareInfo(_ sender: Any) {
        var objectsToShare = [String]()
        if let text = textField.text {
            objectsToShare.append(text)
            print("[INFO] textField's Text : ", text)
        }
        
        let activityVC = UIActivityViewController(activityItems: objectsToShare, applicationActivities: nil)
        activityVC.popoverPresentationController?.sourceView = self.view
        
        // 공유하기 기능 중 제외할 기능이 있을 때 사용
//        activityVC.excludedActivityTypes = [UIActivityType.airDrop, UIActivityType.addToReadingList]
        self.present(activityVC, animated: true, completion: nil)
    }

 

  *** 해당 함수는 @IBAction 함수로, 특정 버튼을 클릭했을 때 발생하는 함수입니다. 유의해주세요!

 

  -  TextField 에 입력된 값을 가져와 공유하는 기능입니다.

 

  -  ViewController 에서 진행하였습니다. (self : ViewController)

 

  -  주석에도 적어놨듯이, 공유하기 기능 중 제외할 기능이 있으면 UIActivityViewController.excludedActivityTypes = [] 를 사용하시면 됩니다.

 

  -  마지막은 present 함수를 통해 화면에 출력합니다.

 

  -  UIActivityViewController의 인자 중 activityItems 의 값으로 공유하고자 하는 데이터를 넣으면 됩니다.

 

 

 

 

 

궁금한 사항 또는 질문이 있으면 댓글 부탁드립니다.

 

감사합니다!

 

 

 

 

참고 사이트
https://g-y-e-o-m.tistory.com/91

Comments