본문 바로가기

MOBILE/ios

(28)
[iOS] GCD의 기본: sync, async, serial, concurrent ios multi-threading ios에서 멀티 스레딩을 지원하는 방식은 Thread, OperationQueue, GCD 이다. 이 중에서 Thread는 복잡하고 critical section을 막기 위한 lock, semaphore 등의 동기화 기법을 개발자가 직접 관리해야 한다는 어려움이 있다. 또한 OperationQueue는 무겁고 필요한 코드가 많다는 단점이 있다. 이렇게 멀티 스레딩의 어려움을 운영체제 레벨로 넘겨서 개발자는 그저 멀티 스레딩을 하고자 하는 "의지"만 보여주면 되는 방식이 있다. 그것이 바로 Grand Centeral Dispatch, GCD 이다. GCD(Grand Central Dispatch)라고도 하는 Dispatch에는 macOS, iOS, watchOS 및 tv..
[iOS] RxSwift와 Observable, operator 도대체 RxSwift는 무엇인가? RxSwift가 무엇인지 알려면 Reactive X가 무엇인지부터 알아야 한다. Reactive X의 공식 홈페이지를 보면 대문짝만하게 다음 설명이 나와있다. observable steams를 이용한 비동기 프로그래밍을 위한 API 라고 소개하고 있다. 이 문장으로 Reactive X는 비동기 프로그래밍을 위한 API라는 것까지는 알게 되었다. 하지만? observable? stream? 뭔소린지 도대체 알 수가 없다. 이 무수한 갈고리핑을 해결하기 위해 일단 웹 사이트에서 제공해주는 공식 문서들을 살펴보자. Reactive X 웹 사이트에 있는 문서들을 번역하도록 하겠다! 하지만 번역기를 거치지 않고 직접 하고 있다는 점에 유의 바란다. Introduction Reac..
[iOS] side bar 라이브러리 없이 직접 구현하기 앱에서 정보를 숨기지만 접근하기 쉽게 만드는 UI는 무엇일까? 바로 side bar이다. 정보를 어느 정도 숨겨주지만 side bar를 터치하여 누르면 다양한 정보와 기능이 나타나도록 구현할 수 있어서 자주 사용된다. 이러한 side bar는 제공해주는 UI 요소가 아니기 때문에 직접 구현해야 한다. 다행히 많은 라이브러리들이 있지만 직접 sidebar 를 구현해보도록 하자. Custom Container View Controller container view controller는 다른 view controller와 달리 실질적인 화면, 자식 뷰 컨트롤러를 관리하는 역할만 한다. 예를 들어 tab bar controller, navigation view controller, page view contro..
[iOS] UNUserNotificationCenterDelegate 로 보낸 로컬 알람 처리하기 지난 포스팅에서는 UNUserNotification 객체를 사용하여 로컬 알람을 보내는 방법을 알아보았다. [iOS] UserNotification으로 로컬 알림 사용하기 로컬 알림은 앱 내부의 메세지를 사용자에게 전달할 때 ios의 알림 센터를 거치도록 하여 전달하는 방식으로 이루어진다. 즉 앱이 종료되어 있거나 백그라운드 상태에서도 사용자 알림을 보낼 josushell.tistory.com 로컬 알림은 잘 활용하면 사용자에게 아주 좋은 효과를 줄 수 있다는 점에서 유용하다. 하지만 로컬 알림이 알림에서 그치지 않고 사용자 액션으로 이어질 수 있도록 하기 위해서는 어떻게 해야할까? 예를 들면, 카카오톡은 상단바 알림에서도 메세지를 보낼 수 있다. 또는 알림을 터치하면 그 카카오톡방으로 들어가게 된다. ..
[iOS] UserNotification으로 로컬 알림 사용하기 로컬 알림은 앱 내부의 메세지를 사용자에게 전달할 때 ios의 알림 센터를 거치도록 하여 전달하는 방식으로 이루어진다. 즉 앱이 종료되어 있거나 백그라운드 상태에서도 사용자 알림을 보낼 수 있다는 장점이 있다. 로컬 알림은 ios scheduler에 의해 발송된다. 앱 내부에서 미리 메세지를 구현하고, 이를 ios scheduler에 보내고자 하는 시각으로 등록해두면 자동으로 발송된다. 이때 scheduler에 등록된 이후로는 Ios가 모든 발송을 관리하기 때문에 앱 내부에서는 할 일이 없다. 따라서 로컬 알림의 대부분은 AppDelegate class에서 작업이 이루어진다. (life cycle method와 함께 쓰일 때가 많음) ios 10 이상부터는 UserNotification 객체를 사용하고,..
[swift] Property Wrapper: what does @ mean in swift? Property Wrapper 그게 왜 필요한데 swift에서는 struct, calss의 프로퍼티의 종류가 두 가지이다. 저장 프로퍼티 vs 연산 프로퍼티 로 구분된다. 이때 연산 프로퍼티는 값에 접근할 때 계산을 하거나 변환 작업을 해야할 때 사용된다. 즉 값을 검사하는 수문장이 있는 프로퍼티이다. 예를 들어, 다음과 같이 값의 최대 범위를 계산하여 막아주는 연산 프로퍼티가 있다고 생각하자. struct A { private var realValue: Int = 0 var value: Int { get { return realValue } set { if (realValue > 100) { realValue = 100 } else if (realValue < 0) { realValue = 0 } el..
[iOS] URLSession을 사용하여 POST method 통신하기 HTTP의 기본 구조 HTTP는 요청을 일정한 형식의 텍스트 기반 메세지로 변환한 메세지 형식을 말한다. 크게 요청, 응답으로 구분된다. 메세지는 모두 다음과 같은 구조이다. Line - Header - Body Line은 메세지의 가장 기본적인 내용이 담긴다. 예를 들어, 응답 or 요청인지 구분 여부, 메세지 전송 방식, 상태 정보 등이다. Header 는 메세지 본문에 대한 메타 정보가 담긴다. Body는 실제 보내고자 하는 메세지 내용이 담긴다. 이러한 메세지의 형식은 정형화 되어있다. 즉 형태가 고정되어 있다는 의미이다. 라인 영역은 반드시 한줄이어야 하며, 그 아래에는 여러줄의 헤더가 작성된다. 헤더와 바디 영역은 구분되어야 하기 때문에 한 줄의 공백이 들어간다. 말하자면 다음과 같은 구조이다..
[iOS] iOS의 UIApplicationDelegate의 life cycle method UIKit으로 ios 프로젝트를 만들면 AppDelegate.swift 파일을 자동으로 생성해준다. 파일을 열어보면 AppDelegate 클래스는 UIApplicationDelegate protocol을 구현하고 있음을 확인할 수 있다. 이 AppDelegate 클래스와 UIApplicationDelegate protocol 에 대해서 알아보자 c에서는 프로그램의 시작점인 entry point가 바로 main() 함수이다. 그렇다면 ios 에서의 entry point는 어디일까? 바로 UIApplicationMain() 함수이다. 이 함수는 앱의 핵심 객체를 생성하는 프로세스를 실행하고, UI를 읽고 커스텀 코드를 호출하는 등의 앱 생성 초기 과정을 담당한다. 이 객체를 통해 생성되는 객체가 바로 UIA..