 Apple Lover Developer & Artist

영속적인 디자인에 현대의 공감을 채워넣는 공방입니다

반응형

전체 글 116

[Challenge] 🛠️ iOS 앱 설계 퓨전 레시피 15부 - State Restoration

Overview State Restoration을 구현하여 사용자가 애플리케이션이 중단되었음을 인식하지 않도록 구현한다. 배경 아이폰을 사용하다보면 다양한 원인으로 인해 현재 사용하던 앱이 중단될 수 있다. 예를 들어, 특정 앱을 사용하던 중 전화나 메시지가 와서 이를 수신할 수 있다. 또한 동시에 여러 작업을 수행하기 위해 멀티태스킹 기능을 사용하는 경우도 있을 것이다. 사용자가 다른 작업을 처리한 뒤에 본래 처리하던 작업을 마무리하고자 돌아올 수 있다. 이때 iOS 운영체제의 자원 관리 정책으로 인해 앱이 종료될 수 있다. 이 경우 사용자는 작업의 맥락을 놓치고 다시 처음부터 시작해야 하는 문제가 발생될 수 있다. 결코 좋은 경험이 아니다. State Restoration 기능을 구현하여 앱이 일시 ..

[Challenge] 🛠️ iOS 앱 설계 퓨전 레시피 14부 - Local Notification Action

Overview Local Notification 이벤트를 다루어본다. 알림 이벤트가 발생했을 때 액션을 붙여보고 앱이 액션에 따라 응답할 수 있도록 프로그래밍해 본다. knowledge Handling Event 서로 다른 객체가 메시지를 주고받아야 한다. 한걸음 더 들어가면 Local Notification 이벤트를 수신할 수 있어야 한다. 이벤트를 앱에 전달할 수 있어야 한다. 그리고 앱이 이벤트에 응답할 수 있어야 한다. 한 단계씩 뜯어보며 코드를 구현할 수 있는 기반을 다져본다. Local Notification 이벤트를 누가 수신해서 어떻게 앱에 전달해 줄지 고민하게 된다. Notification과 연관된 이벤트는 UNUserNotificationCenter 객체가 처리할 수 있다. 앱 객체에..

[Challenge] 🛠️ iOS 앱 설계 퓨전 레시피 13부 - User Notification

Overview 음식점 서버에 주문을 넣은 후 음식의 준비가 완료되면 사용자에게 푸시 알림을 보내는 기능을 개발한다. User Notification 중 Local Notification을 활용하며 푸시 알림 이벤트에 따른 액션을 처리해 본다. 프로토콜 지향 프로그래밍을 활용해 Notification 정보를 체계적으로 관리해 본다. Local Notification UIKit에서는 시각적인 상호작용을 위해 UIView를 활용한다. 앱이 켜져 있을 때는 사용자 인터페이스를 제공하여 사용자와 상호작용할 수 있으나 앱이 종료되었을 때에는 이를 활용하기 어려워 보인다. User Notification은 중요한 이벤트에 대하여 사용자가 응답할 수 있는 수단을 제공한다. 예를 들어 휴대폰을 잠가둔 상태로 메시지를 ..

[Challenge] 🛠️ iOS 앱 설계 퓨전 레시피 12부 - Order

Overview 음식점 서버에 주문서를 전송한다. Timer와 Combine API를 활용하여 Progressive Bar 인터페이스를 갱신해 본다. 페이지 전환 방식으로써 모달을 사용해 본다. Order Confirmation Order 앱은 음식점 서버에 주문을 넣을 수 있다. Order 주문서에는 음식 메뉴 아이템으로 구성되어 있는다. 음식점 서버는 음식 메뉴 아이템에 따라 준비시간이 다를 수 있다. 서버의 역할은 사용자의 주문이 들어올 때마다 음식이 준비될 때까지 필요한 시간을 계산하여 사용자에게 알려주는 것이다. 이전에 준비해 둔 스토리보드에는 Order Confirmation이라는 화면 페이지가 있었다. 이 화면의 역할은 음식점 서버가 알려준 음식 준비 시간과 주문을 넣은 시간을 기준으로 현재..

[Challenge] 🛠️ iOS 앱 설계 퓨전 레시피 11부 - 주문서 개발

Overview 사용자가 레스토랑에 음식을 주문할 수 있도록 기능을 개발한다. Notification, Timer 등의 비동기 처리를 구현할 때 Combine이 제공하는 통합된 API를 사용해본다. Prerequirement 콤바인 API의 개념과 Swift Concurrency의 사전 지식이 요구된다. 다음의 공식 문서 정리 포스팅을 참조하면 좋을 것이다. [WWDC2019] Introducing to Combine [Swift] 공식문서 씹어먹기: Concurrency 주문서 기능 사용자는 레스토랑에서 판매하는 음식 메뉴를 볼 수 있다. 앞선 포스팅 처럼 카테고리별로 분류된 화면을 전환하며 자신이 원하는 음식 메뉴를 찾을 수 있다. 원하는 음식 메뉴를 찾으면 해당 아이템을 선택하여 세부 정보를 확인할..

[WWDC2019] Introducing to Combine

Overview A unified declarative API for processing values overtime. - WWDC2019 "Introducing Combine 발췌" 앱 개발 과정에서 비동기 프로그래밍을 사용할 때가 많이 있다. 예를 들어 Target-Action, Timer, KVO부터 URLSession을 활용한 네트워크 통신 과정에서 컴플리션 핸들러를 활용하기도 한다. 때로는 이들을 결합해 새로운 기능을 개발해야 할 수 있는데 쉽지 않았다. Combine은 이들간의 공통 분모를 찾게되었으며 "시간이 지남에 따라 값을 처리하기 위한 통합된 선언적 API"를 개발하게 되었다. 특징 Generics 콤바인은 Swift로 작성되었다. 즉, Generics과 같은 Swift 기능을 사용할 ..

[Swift] 공식문서 씹어먹기: Concurrency

Overview 스위프트에는 비동기 및 병렬 코드를 구조화된 방식으로 코딩할 수 있는 기능이 있다. 한번에 프로그램의 오직 한 부분만 실행할 수 있음에도 비동기 코드는 중단(suspend) 되거나 재개(resume)될 수 있다. 비동기 코드가 중단되거나 재개될 수 있다는 부분은 네트워크 통신과 파일 탐색과 같은 시간이 오래 소요되는 연산을 지속하며 UI 업데이트와 같이 시간이 짧게 소요되는 연산을 지속할 수 있도록 한다. 병렬 코드는 여러 조각의 코드가 동시에 실행됨을 의미한다. 가령 4개 코어 프로세서를 갖고 있는 컴퓨터는 4부분의 코드를 동시에 실행시킬 수 있다. 이 과정에서 각 코어는 하나의 작업을 처리하게 된다. 중단된 연산은 외부 시스템에서 대기하며 이런 방식의 코드를 memory-safe 방식..

[Challenge] 🛠️ iOS 앱 설계 퓨전 레시피 10부 - 이미지 로딩

Overview 네트워크를 통해 받아온 이미지 데이터를 사용자 인터페이스에 보여주도록 구현해 본다. 화면 구성 이번 프로젝트에서 사용자 인터페이스를 통해 이미지를 띄워줘야 하는 화면은 총 3가지다. 음식 메뉴를 보여주는 MenuTableViewController, 주문서 명단을 보여주는 OrderTableViewController, 음식 메뉴의 세부 정보를 보여주는 MenuItemDetailViewController가 대표적인 예시이다. performance 네트워크를 통해 이미지 데이터를 불러오는 것은 다소 시간이 소요되는 작업일 수 있다. 사용자가 원하는 음식 메뉴 아이템을 찾기 위해 화면을 전환하며 탐색한다. 기본적으로 개발자가 별도의 최적화 작업을 진행해주지 않으면 동일한 이미지를 중복하여 다운로..

[Challenge] 🛠️ iOS 앱 설계 퓨전 레시피 9부 - View 디자인

Overview 스토리보드에서 정의한 앱의 흐름에서 View 디자인을 구체화시켜본다. Pattern 프로젝트에서 사용할 View의 정의 패턴을 소개한다. TableView Cell UIKit이 제공하는 표준 스타일의 셀을 사용한다. Basic, Subtitle, Right Detail, Left Detail 총 4가지 레이아웃을 제공한다. 표준 레이아웃의 프로퍼티를 커스텀하여 빠르게 TableView Cell을 만들 수 있다. TableView Cell의 생성하기 위해 Identifier를 부여한다. Identifier는 성능상의 이유로 TableView가 재사용 메커니즘을 활용해 Cell을 생성할 수 있도록 돕는다. Layout 기본적으로 오토 레이아웃을 활용한다. View를 정밀히 조정해야 할 때 오..

[Challenge] 🛠️ iOS 앱 설계 퓨전 레시피 8부 - 데이터 바인딩

Overview MVC 아키텍처에서 Model의 데이터를 View에 바인딩시키며 생산성 향상을 위해 활용할 수 있는 테크닉을 생각해 본다. Controller MVC 패러다임에서 Controller는 Model과 View의 상호 작용을 중재해 주는 역할을 했다. 모델의 데이터를 View에 불러오는 것과 View에서 발생한 다양한 종류의 이벤트를 해석해서 모델을 조작하는 것 모두 상호 작용의 예이다. ViewController UIKit에서는 ViewController가 핵심적인 역할을 한다. MVC에서 Controller 역할을 하면서도 View를 핸들링하는데 초점을 두고 있기 때문이다. Controller와 View 역할이 결합되었기 때문에 코드 관리에 신경을 써줘야 한다. 이번의 경우 ViewCont..

반응형