-
[iOS] "공유하기" 기능 (Share Extension)iOS/iOS 2020. 10. 30. 17:21
안녕하세요 :)
오늘은 아이폰에서 공유하기 버튼을 누르면 나오는 공유하기 기능에 대해 알아보겠습니다.
새로 시작하게 될 프로젝트에서 공유하기 기능이 필요해서 잠깐 공부해봤어요!
시작하기
자 먼저 프로젝트를 하나 생성해주세요.
그리고 File-New-Target에 들어가 줍니다.
그 후에 Share Extension을 추가해줍니다.
스키마 이름도 지정해주시고, Activate 해주세요!
그 후에 프로젝트 상단의 스키마를 방금 추가해준 익스텐션으로 바꿔주시고 빌드해보겠습니다.
빌드를 하면 이런 창이 뜨는데, 어떤 앱에서 스키마를 시작할 것인가! 어떤 앱으로 시작할 것인가!입니다.
즉, 현재 Safari로 선택되어있으니까 Safari 앱이 먼저 켜지면서 우리는 공유 버튼을 눌러볼 수 있을 겁니다.
빌드한 후에 사파리 앱에서 공유하기 버튼을 누르면 방금 만든 프로젝트가 뜨는 것을 볼 수 있습니다.
프로젝트를 누르게 되면 오른쪽과 같은 화면이 뜨는 것을 확인할 수 있습니다.
ShareViewController
자 다음에는 기본 메서드들을 살펴볼 겁니다.
처음에 기본으로 설정된 ShareViewController 파일입니다.
isContentValid(), didSelectPost(), configurationItems() 들이 있는데, 하나씩 알아봅시다!
isContentValid()
compose view에 텍스트를 입력할 때마다 호출됩니다.
텍스트를 입력하지 않았을 때 Post 버튼의 활성화 여부를 결정할 수 있습니다.
ShareViewController는 SLComposeServiceViewController를 상속받고 있는데,
이 SLComposeServiceViewController는 위와 같이 되어있습니다.
잘 보면 textView도 있고 contentText도 있는 것을 볼 수 있습니다.
override func isContentValid() -> Bool { return self.contentText.isEmpty == false }
저는 간단하게 contentText를 사용해 위와 같이 구현해주었습니다.
지금 보면 텍스트가 적혀있지 않아서 Post 버튼이 비활성화된 것을 확인할 수 있습니다.
didSelectPost()
이름 그대로 Post 버튼을 눌렀을 때 호출되는 메서드입니다.
configurationItems()
configuration item을 표시할 때 사용합니다.
[Any] 배열 안에는 SLComposeSheetConfigurationItem 타입이 들어가게 됩니다.
override func configurationItems() -> [Any]! { let item = SLComposeSheetConfigurationItem()! item.title = "Title" item.value = "RosePurple" item.tapHandler = {} return [item] }
위와 같은 형태로 아이템을 추가할 수 있습니다.
tapHandler는 유저가 클릭했을 때 발생하겠죠?
공유 제어
현재 프로젝트는 모든 앱에서 공유 버튼을 눌렀을 때 사용할 수 있는 상태입니다.
하지만 때에 따라서 사진이 없으면 공유하기가 안되게 한다던지, 사진만 공유할 수 있다던지
, 사진의 개수 제한을 두는 등의 제어가 필요할 수 있습니다.
이것은 익스텐션 안의 info.plist를 조작하여 제어할 수 있는데요.
NSExtensionAttributes 안의 TRUEPREDICATE를 수정해주면 됩니다.
많은 키들이 있는데 몇 개만 간단하게 보겠습니다.
NSExtensionActivationSupportsFileWithMaxCount: 공유 파일의 최대 개수
NSExtensionActivationSupportsWebURLWithMaxCount: 공유할 URL위 최대 개수
...
맨 끝의 Count라고 되어있는 키들은 value에 숫자를 넣고,
NSExtensionActivationSupportsText의 경우에는 true/false를 넣어주면 됩니다.
공유하기 Custom View
우선 커스텀뷰를 만들기 위해서는 info.list를 수정해야 합니다.
하지만 그전에 UIViewController를 상속하는 ShareViewController를 생성해주고 UI 작업을 해주었습니다.
그 후에 info.list를 Open As -> Source Code를 입력해서 코드로 열어줍시다.
저는 위의 코드와 같이 바꿔주었는데요.
PrincipalClass의 value를 CustomView 파일명으로 만들어주시고,
<key>NSExtensionMainStoryboard</key> <string>MainInterface</string>
위처럼 메인 인터페이스로 지정되어있던 코드를 지워줍니다.
그리고 info.list 사진 중간에 보면 NSExtensionActivationRule 하단에 제가 key들을 추가해주었는데요.
이 부분은 어떻게 Share Extension을 제어할 것인지에 따라 달라질 수 있습니다.
마무리
저는 간단하게 위와 같은 커스텀 뷰를 만들어주었습니다.
다음에는 받아오는 url을 조작할 수 있는지 공부해보고 돌아오겠습니다!
끝까지 포스팅 읽어주셔서 감사합니다. 🤗
'iOS > iOS' 카테고리의 다른 글
[iOS] SceneDelegate는 무엇일까? (0) 2020.11.06 [iOS] 앱의 상태 변화에 따른 AppDelegate (0) 2020.11.06 [iOS] Unit Test에 대해 간단하게 알아보자 (0) 2020.09.25 [iOS] UI 개발 시 Code Base로 개발하기 (0) 2020.09.18 [iOS] Cell LifeCycle (UITableView, UICollectionView) (1) 2020.08.28