[iOS] ToastSwiftUI 라이브러리 만들기 - 이론편

유인호·2024년 5월 29일
1

iOS

목록 보기
50/73
post-custom-banner

0. 서론

기존에 사용하던 토스트UI 라이브러리는 사용하기는 편했으나, 커스텀을 하거나 SwiftUI환경에서 사용하기 어려웠다. 라이브러리 자체가 UIView에 뷰를 추가하는 방식이였기 때문이다.

요즘같은 UIKit과 SwiftUI를 쓰까쓰는 시대에서 새로운 라이브러리가 나왔으면 좋겠다고 느껴졌다. 그래서 직접(...!) 토스트 라이브러리를 만드는 와중에, 그 라이브러리의 작동원리가 무엇인지 적어보도록 하겠다.

궁금하시다면.. : ToastSwiftUI

1. SceneDelegate에서 Winodw가 뭐하는 녀석임?

iOS 2.0 부터 있었던 아주 오래된 녀석이다. 설명을 한국어로 번역하자면,

앱의 사용자 인터페이스의 배경이자 뷰에 이벤트를 전달하는 객체.

UIWindow는 그 자체로 뷰를 제공하지는 않는다. UIView를 연결하여 사용자에게 화면을 보여주고, 사용자의 입력이나 이벤트를 뷰에 전달하는 역할을 하게 된다. UIView를 상속받고는 있지만, 보통 우리가 생각하는 뷰의 역할을 하진 않는 것이다.

보통 스토리보드가 아닌 Code Base로 작성하게 될때 Scene Delegate에서 window에 최초 뷰컨을 집어넣어 작성해보았을 것이다.

2. Window를 여러개 만들수가 있나?

애플 공식문서에서도 다음과 같은 문구가 있다.

Create additional windows (as needed) to display additional content.

필요하면 window를 더 만들어 사용해보라는 것이다.

iOS 13부터 SceneDelegate가 나오면서 하나의 앱에는 하나의 window만을 가진다 라는 법칙이 깨졌다.

이 점을 이용하여 한번에 두개의 Window를 띄울 수 있는 점을 이용하여 Toast 라이브러리를 만들어 보려고 한다.

테스트는 매우 잘된다!

3. ToastSwiftUI의 설계 및 장점(예정)

일단 기본적인 패러다임은,

  1. Window를 하나 더 만들어 Toast용 Window를 만든다.
  2. 싱글톤 객체에 Window를 가져와 Toast용 Window셋팅을 한다.
  3. 토스트가 필요한 곳에 Provider를 가져와 토스트를 띄우는 함수를 실행한다.

이 라이브러리를 만들면서 타 라이브러리보다 좋을 것이라고 예상하는 지점은,

  1. SwiftUI와 UIKit의 제약이 없을 것이다. (중요)
    • 다른 라이브러리는 UIKit에만 적용되거나, SwiftUI에만 적용되는 라이브러리가 많았는데, 이 라이브러리는 Window자체를 건들기 때문에 제약이 생기지 않는다.
  2. 단순한 뷰를 만들기에 매우 적합한 SwiftUI의 뷰를 커스텀하게 넣을 수 있게 만들 예정이다.
  3. 동시에 위의 사진처럼 기본적인 Toast는 String만 받고도 사용할 수 있도록 할 예정이다.
  4. Toast 설정을 전역적으로 설정할 수도 있고, 각각의 Toast마다 설정을 할 수 있도록 만들 예정이다.

여담으로 지금 앱 만드는것보다 이게 너무너무 재미있어서 도파민이 폭발한다. 정말 잘 만들고 싶은 욕구가 샘솟아서 열심히 만들어볼 예정이다.

profile
🍎Apple Developer Academy @ POSTECH 2nd, 🌱SeSAC iOS 4th
post-custom-banner

0개의 댓글