iOS 13부터 지원되기 시작한 Swift UI / Combine에 대한 관심이 뜨겁습니다. 현 시점에서 살 수 있는 digital book의 숫자가 벌써 7개에 달하고, 구글링해보면 기초적인 tutorial부터 best practice 류의 글까지 수많은 자료들이 몇 페이지나 나올 정도로, 운영자가 이제까지 본 모바일 기술 중에 이렇게 빠른 속도로 관심을 모은 기술이 있나 싶을 정도입니다.
제가 근무하고 있는 회사에서는 (아마도) 세계 최초의 상용 SwiftUI를 개발한 바 있습니다. (일본의 신분증인 마이넘버카드를 모바일 앱으로 옮긴 앱) iOS 13부터만 지원되는 Core NFC를 이용한 관계로 내친 김에 SwiftUI까지 도입을 했으나, 여러가지 문제로 크게 후회하고 있다는 후문이.. SwiftUI의 커스텀 UI 컨트롤 작성이 좀 더 강력해지고, Combine이 Subject와 같은 기능을 보강하기 전까지는, 복잡한 상용 프로젝트에 적용하기엔 아직은 다소 아쉬운 부분이 많은 것 같습니다.
(잠깐! SwiftUI가 뭔지 모르신다고요? 맨 아래 해설을 참고하시길..)
(운영자 맘대로 정하는) 이 주의 블로그/소식
iOS에서의 상태(state) 관리에 대한 모든 것 (English)
모바일 앱의 아키텍처에서 가장 중요하고도 어려운 점은 다양하고도 복잡한 상태(혹은 이벤트)를 어떻게 효과적으로 처리할 수 있을 것인가에 대한 문제라고 해도 과언이 아닙니다. 이 글에서는 상태 관리를 위한 고려 사항, 그리고 그릴 위해 사용할 수 있는 다양한 기술을 총망라해서 설명하고 있습니다.
저는 개인적으로 대부분의 경우 (다소의 학습 비용을 감수하더라도) RxSwift 기반 stream 처리를, 복잡도가 낮은 경우 Signal을 이용한 event 처리를 권장합니다.
iOS 개발 일반
iOS 13 앱 업데이트 후기 (한글)
앱을 iOS 13으로 업데이트 하면서 추가된 기능들을 적용한 경험을 간략히 공유하고 있습니다.
Swift UI가 너무 주목을 받아서 Swift 5.1의 다른 중요한 사항들이 많이 조명받지 못하고 있는 상황이라 반가운 글입니다. 특히 Property Wrapper로 인해 조만간 안드로이드 진영의 Dagger 부럽지 않은 강력한 라이브러리들이 발표되길 기대해봅니다.
음성을 이용한 앱 제어에 대한 백서 (English)
앱 내에서 음성을 제스처 등으로 활용해서 사용할 수 있는 예시를 담은 애플의 공식 백서가 나왔습니다. WWDC 2019의 키노트에 나왔던 것 같은 재미있는 기능들을 내 앱에 어떻게 적용할 수 있을지 좋은 참고가 될 것 같습니다. 관련해서 발표되어 있는 자료들이 대부분 논문이라 스크롤의 압박에 포기하기 쉬운데, 이 자료는 짧게 요점만 담고 있기 때문에 주말에 시간 내서 읽기에도 부담없는 수준이 아닐까 싶습니다.
iPadOS에서 다중 윈도우 지원을 구현하기 (English)
iPad용 앱을 제작할 때 UIWindowSceneDelegate을 통해 다중 윈도우 지원할 수 있는 방법을 알려줍니다.
툴/라이브러리 관련
UI 디버깅을 위한 5개의 도구 (English)
iOS 앱의 디버깅을 도와주는 유용한 도구들을 소개하는 글입니다.(주의: 모든 툴이 무료는 아님)
UI를 개선하고 영감을 줄 수 있는 5개의 라이브러리 (English)
최근 공개된 유용한 라이브러리들을 소개하고 있습니다.
(주의: UI 라이브러리의 경우 시간이 지나면 제작자가 유지보수를 포기하는 경우가 흔하기 때문에, 해당 오픈소스 프로젝트에 contributor로 참여하면서 적용하거나, 아니면 적어도 소스의 기본 원리는 파악하고 도입하기를 권합니다.)
Swift 언어 관련
Swift Optional에 대해서 (English)
익히 알려진 바와 같이 Optional은 enum에 syntactic sugar가 버무려진 재밌는 개념입니다. 이 글은 optional에 대한 간단한 설명과 함께 (Scala 언어에서 제공하는 것과 유사한) optional type에 대한 mapping 메소드를 어떻게 사용할 수 있는 지를 보여줍니다.
Swift UI 관련
상용 프로젝트에서의 SwiftUI (English)
TAB에서 기존 앱을 SwiftUI 기반으로 재구현한 경험을 공유한 글입니다. 개발 과정에서 겪은 중요한 사항들, SwiftUI 적용의 장단점, 새로 적용하려는 개발자에 대한 조언들을 담고 있습니다.
SwiftUI에서의 뷰 조합 (English)
컨테이너가 10개 이상의 자식을 가질 수 없는 제한을 어떻게 극복할 수 있을 것인가에 대한 아이디어를 공유하고 있는 글입니다.
SwiftUI 환경 값 설정 (English)
컬러 값과 같은 환경 값이 SwiftUI에서 어떻게 지정되는지 원리를 설명하고 있습니다.
튜토리얼
Compositional Layout을 이용한 최신 CollectionView 구현 (English)
iOS 13에서 소개된 UICollectionViewComposionalLayout API에 대해서 자세한 예제와 함께 소개하고 있습니다. 그룹화를 통해 복잡한 레이아웃을, 작은 코드량으로 구현할 수 있도록 해줍니다.
iOS 애니메이션 튜토리얼 (English)
애니메이션의 구현의 기본 원리부터 가속도 적용까지 익힐 수 있습니다.
기타 소식
iOS 13의 백그라운드 태스크 관리 버그로 인한 불만(English)
iOS 13.0부터 보고되고 있는 백그라운드 처리에 대한 문제가 13.2에서도 아직 도 해결되지 않아 불만이 누적되고 있습니다. 과거에 비해 공격적으로 백그라운드 태스트를 종료시켜버리는 관계로 백그라운드 잡 처리 기능(모든 안드로이드 개발자가 부러워한다는 바로 그 기능)이 제대로 동작하지 않고, background fetch를 이용해 푸시 알림을 처리하는 앱이 푸시를 받지 못하는 등등 다양한 문제가 빈발하고 있습니다. 이런 문제는 애플 기본 앱조차 피해가지 못해서, 백그라운드로 들어간지 1분 정도밖에 안 됐는데 사파리 탭이 사라지거나, 작성중인 메일이 사라지는 문제들이 보고 되고 있습니다.
아래 링크에서 이메일 주소를 입력해주시면 매주 일요일 최신 개발 뉴스를 이메일로 보내드립니다.
**Swift UI란?
Swift 코드를 이용해 UI를 구성할 수 있는 라이브러리입니다. 그렇다고 Storyboard/XIB로 만들 수 있는 UI 정의를 DSL 코드로 만들게 해주는 SnapKit을 상상하시면.. 틀립니다. 웹 프론트엔드에서의 React JS와 같이, 선언적(declarative)하게 UI를 구현할 수 있기 때문에 훨씬 직관적인 UI 구현이 가능해집니다. 아울러 Android의 DataBinding과 유사하게, UI 정의와 데이터의 변경을 연결할 수 있는 기능도 함께 지원하기 때문에, 명실상부한 MVVM 아키텍처의 구현도 가능해졌습니다.
1, 2년 뒤부터는 iOS 개발의 주류가 될 가능성이 높기 때문에 아래 페이지에서 미리 알아두는 것도 좋을 것 같습니다.
** Combine이란?
RxSwift와 유사한 형태로 반응형 프로그래밍(reactive programming)을 구현할 수 있게 해주는 라이브러리입니다.
물론 복잡하지 않은 비동기 처리는 event(Signal) 혹은 promise로도 충분하지만, 비동기 처리들의 조합, 예외 처리, 각종 복잡한 제어까지, 최상의 성능으로 구현할 수 있는 거의 유일한 방법이 반응형 프로그래밍이라 할 수 있습니다. RxSwift의 경우, 강력한 기능과 성능을 자랑하지만 상당한 양의 학습량을 요구하기 때문에 조금 덜 어려운 스펙과 좀 더 직관적인 이름을 가진 iOS native 라이브러리를 애플에서 제공하게 되었습니다. 다만 아직은 RxCocoa의 Subject 와 같은 UI와 presenter(혹은 ViewModel)와의 연결을 위한 기능의 미비 등 많은 개선의 여지가 남아있습니다.

