Notice
Recent Posts
Recent Comments
Link
관리 메뉴

김종권의 iOS 앱 개발 알아가기

[iOS -swift] 3. UIActivityViewController 인터페이스 제공 방법 (share extension, share sheet) - 데이터 교환 본문

iOS 응용 (swift)

[iOS -swift] 3. UIActivityViewController 인터페이스 제공 방법 (share extension, share sheet) - 데이터 교환

jake-kim 2024. 3. 4. 21:41

1. UIActivityViewController 인터페이스 제공 방법 (share extension, share sheet) - Share Extension 생성까지

2. UIActivityViewController 인터페이스 제공 방법 (share extension, share sheet) - UI 구현

3. UIActivityViewController 인터페이스 제공 방법 (share extension, share sheet) - 데이터 교환

데이터 교환 방법

  • 데이터 교환이란?
    • 특정 앱에서 text를 share extension으로 공유해줄때 text를 받는 방법?
    • ex) 유튜브 앱에서 특정 글을 인스타그램으로 공유할 때, 인스타그램의 share extension 쪽에 코드 구현이 필요
  • 인스타그램과 share extension의 데이터가 서로 공유될 수 있게끔 App Groups 설정이 필요
  • App Groups 설정 후 UserDefaults로 데이터 교환하면 완료

App Groups 설정

  • Xcode > share extension 타겟 > Signing & Capabilities > App Groups
    • (수동으로 하려면 apple develper 사이트에서 provisioning profile 만드는 곳에서 App Groups를 활성화하고, identifier를 생성)

  • id값에 임의로 구분할 수 있는 값 입력
    • share extension 타겟과 앱 타겟 각각 이 값을 입력하여 동일한 id를 바라보도록 설정할 예정

 

cf) 이때 만약 아래와 같은 인증 에러가 난다면 이 포스팅 글 참고

  • share extension 타겟에 App Groups를 추가하면 id와 check 모양이 표출
    • (아래 사진은 Apple Developer 계정 구독이 안되어 있는 경우 발생)

  • share extenion뿐만이 아닌 앱에도 App Groups를 추가하고 위와 동일한 ID를 입력해주면 완료

(사진들에서는 Apple Developer 구독을 안한 상태라 빨간색으로 뜨고 이 기능을 실제로 사용하려면 구독이 필요한데, 편의상 설명만을 위해 빨간색 글씨가 뜨는 오류도 정상 처리되었다고 가정하고 설명)

앱 타겟에 App Groups 적용
share extension 타겟에 App Groups 적용

  • 이제 데이터 공유 준비는 완료되었고, share extension에서 UI를 타앱에 제공해주고, 이 UI에서 입력되는 것들을 UserDefaults로 ShareViewController에서 저장
    • UserDefault를 앱에서 가져다가 사용하면 데이터 교환 완료
let defaults = UserDefaults(suiteName: "group.test.ex.instagram")

 

* 전체 코드: https://github.com/JK0369/ExShareInterface

* 참고

- https://developer.apple.com/documentation/foundation/app_extension_support/supporting_suggestions_in_your_app_s_share_extension

- https://developer.apple.com/documentation/uikit/uiactivityviewcontroller

- https://royhelen.tistory.com/25

Comments