공유하기 개편

Jihye Kwon
와디즈서비스
Published in
5 min readFeb 18, 2021

안녕하세요. 저는 와디즈에서 iOS 개발을 하고 있는 권지혜라고 합니다.
지금부터 제가 입사하고 처음 맡게 된 ‘공유하기 개편’에 대해서 이야기 하려고 합니다.

공유하기 기능은 이미 와디즈 앱 내에서 많이 사용 되고 있습니다.
하지만 공유 하기가 너무 다양했고 각 화면마다 통일이 필요했습니다.
그리고 카카오톡 템플릿을 사용하고자 하는 니즈가 있었기에 개편을 진행하게 되었습니다.

개편하기에 앞서,
각 화면에서 공유 하기를 어떤 항목을 노출 시키는지 파악해야 했고,
각 화면에서 공유 하기가 어떤 UI로 제공 되는지 확인해야 했으며,
각 화면마다 공유하기 관련 요구사항은 없는지도 파악해야 했습니다.

그 과정 중
화면마다 공유 하기가 조금씩 달랐기에 한번에 적용할 수 없다고 판단되었습니다.

그래서
카카오톡 템플릿을 사용하고 싶다는 요청이 왔던 ‘스타트업 찾기’의 공유 하기를 먼저 작업 하기로 했습니다.

공유하기 기능이라고 하면 가장 많이 사용하고 있는 ‘UIActivityViewController’.

스타트업 찾기 상세 화면에서 공유하기 선택 시 보이는 화면(공유하기 개편 전)

사실 다른 앱에서도 많이 볼 수 있는 화면이며,
통일성을 원한다면 모든 화면에서 ‘UIActivityViewController’를 사용하면 되는 쉽게 해결되는 일 아닌가요? 라고 생각할 수도 있습니다.

하지만!

카카오톡 템플릿을 사용하고 싶어요,
아이콘을 예쁘게 디자인한 걸로 사용하고 싶어요,
이 화면에선 카카오톡과 페이스북 공유 하기만 제공 되었으면 좋겠어요,
등등 다양한 요구사항을 충족시키기 위해 공유하기 공통 모듈을 만들고자 합니다.

공유 하기를 공통 모듈로 만들어 둠으로써 시간 및 비용 절감의 효과를 기대했기에 구조에 대한 고민을 많이 했습니다.

시간 및 비용 절감의 효과를 기대하려면
공유 하기를 화면마다 쉽게 적용할 수 있어야 하며,
요구사항을 유연하게 동작하게 해야 하며,
공유하기 공통 모듈을 다른 개발자들이 쉽게 이해할 수 있어야 합니다.

이렇게 머리를 쥐어짜고 있을 때,
함께 일 하는 분이 그냥 UIActivityViewController랑 비슷한 구조로 만들면 안되나요? 라고 질문을 던졌고

다른 개발자들이 쉽게 이해할 수 있으려면 가장 익숙한 UIActivityViewController와 비슷한 구조를 가져가면 되는걸!!!!!!!!!!
이라는 생각이 들어서 UIActivityViewController를 자세히 보기 시작했습니다.

UIActivityViewController

일반적으로 공유하기 기능을 사용할 때,

let activityItem = URL(string: "https://www.wadiz.kr")!
let activityItems = [activityItem]
let activityViewController = UIActivityViewController(activityItems: activityItems, applicationActivities: nil)
present(activityViewController, animated: true)
init(activityItems: [Any], applicationActivities: [UIActivity]?)

내가 원하는 item을 만들 수 있습니다.
item은 String, Image 등등 다양한 타입이 될 수 있습니다.
activityitems는 데이터의 배열입니다.
객체 타입은 가변적이며 애플리케이션이 관리하는 데이터에 따라 다릅니다.
예를 들어 데이터는 현재 선택한 콘텐츠를 나타내는 하나 이상의 문자열 또는 이미지 개체로 구성될 수 있습니다.

사용 방법 또한 매우 간단합니다.
UIActivityViewController를 정의해줄 때, 배열 형식으로 아이템을 만들고present 하면 아이템 종류에 따라 원하는 동작을 수행합니다.
이 부분을 모티브로 공통 모듈을 만들었습니다.

Item은 contents, provider, action 으로 구성,
Custom Share View Controller 에선 뷰만 쓱쓱 그려주는 일을 하도록 했습니다.

실제로 공유하기 기능을 사용해야 하는 화면에서
필요한 Item만 만들어서 Custom Share View Controller 만들 때, Items로 넘겨주기만 됩니다.

스타트업 찾기 상세 화면에서 공유하기 선택 시 보이는 화면(공유하기 개편 후)

개발이 완료 된 후 와디즈는 코드 리뷰를 하고 있습니다.
기능 버그 또는 개선은 내부 툴을 활용하여 코멘트를 남기는 형식이지만
확인해야 할 파일이 너무 많으면 회의실을 잡고 코드 리뷰를 진행합니다.

공유하기 개편 같은 경우는 구조적으로 간단한 설명이 필요할 것 같아 짧게 코드 리뷰를 진행했습니다.

이해하기 어려운 부분은 팀원들의 의견을 적극 수용 했으며, 개선사항이 있는 경우 서로 의견을 조율하여 진행했습니다.

제 의도와 다르게 이해한 부분은 어떤 부분이 오해의 소지가 있었는지 체크해서 의도와 다르게 해석되지 않도록 개선에 힘썼습니다.

실제로 초반에 Item에 action을 사용하지 않았습니다.
provider를 통해 Item 내부적으로 action을 적용하려고 했는데
그러다 보니 Item도 무거워져서 보기 불편했습니다.

이런 문제도 코드 리뷰와 커뮤니케이션을 통해 지금과 같은 구조로 자리 잡게 되었습니다.

그리고 드디어 배포가 되었습니다. 🥳🥳🥳

와디즈 최신 버전에서 새로운 공유하기를 볼 수 있습니다.
공유하기 기능을 공통모듈로 개편 했지만, 현재 스타트업 찾기에만 적용되었습니다.

추후에 모든 화면에서 같은 공유하기 화면을 볼 수 있도록 적용 예정입니다.

--

--