Storage Access API 를 이용해서 쿠키 정보를 가져옵시다

TL; DR

iOS 14 부터 개인 정보 보호 정책으로 third party cookie 사용이 막힘. 이에 파생되는 이슈에 대해선 Storage Access API 를 사용

쿠키 배경 지식

First-party cookie

  • website에 따라 쿠키에 무엇을 수집하고 저장할지 결정함으로서 유저 경험을 향상시키고자 함. (만약 쿠키가 없다면 새로 고침 때마다 로그인 다시 하거나, 장바구니 다시 담아야함)

Third-party cookie

  • 유저가 들어간 A / B 도메인에서 각각 facebook.com 에서 코드를 로드하고 있다면, facebook.com 에 해당하는 쿠키가 자체적으로 생성될 수 있는데 이것이 …


DispatchSemaphore 에 대해 알아봅시다

Previously on GCD…

개-하! 저번 시간에는 작업을 class 로 만들어서 취소 / 순서 기능을 사용할 수 있는 DispatchWorkItem에 대해 알아봤는데요!

오늘은 한번에 수행할 수 있는 작업의 수를 제한하는 DispatchSemaphore에 대해 알아보도록 합시다. 가벼운 내용이니까 가벼운 맘으로 고고! 라고 쓰고 시작했는데 쓰다보니 무거워진거 같아요.. 족굼은 마음의 준비를 하고 내리시길.. ㅎㅎ

Semaphore

여러분 Semaphore 에 대해 아시나여? 위키의 정의를 잠깐 가져와봅시다.

정수 변수로서, 멀티프로그래밍 환경에서 공유 자원에 대한 접근을 제한하는 방법으로 사용된다.

스레드가 공유 자원의 배타적인 사용을 보장받기 위해서 임계 구역에 들 …


DispatchWorkItem 에 대해 알아봅시다

Previously on GCD…

지난 시간에는 Dispatch Group에 비동기 작업이 포함된 task 를 보낼때는 enter()leave()를 사용해야 함! 까지 살펴보았는데요, 이번 시간에는 DispatchWorkItem 을 알아보도록 합시다.

DispatchWorkItem

우리는 지금까지 원하는 작업들을 클로저 안에 넣어서 처리해왔습니다.

Image for post
Image for post

그러다 이런 생각을 하게 됐을지도 모르죠..!

🤔 : 흠.. 나는 작업들을 closure 묶어 보내는 대신, 아예 class 로 캡슐화해서 묶어버리고 싶다고!

앗 물론 이렇게 생각한 사람에 저는 포함되지 않습니다 ◠‿◠ 튼 이제 무슨 말이 나올지 아시겠죠? ㅎㅎ

DispatchWorkItem은 지금껏 closure로 보내왔던 작업이 캡슐화 된 …


Decoding enum with invalid value

문제 상황

struct ResponseModel: Codable {
var title: String?
var pageType: PageType?
enum PageType: Int, Codable {
case zero = 0
}
}
//정의되지 않은 pageType 이 들어옴
let jsonString = "{\"title\":\"My Title\",\"pageType\":1}"
let result = try? JSONDecoder().decode(ResponseModel.self, from: jsonString.data(using: .utf8)!)

위와 같이 정의된 ResponseModel로 data를 디코딩을 한다고 해 …


Linux commands for Mac

head

문서 내용의 앞부분 출력. (디폴트 10줄)

head myFile

옵션

-c [num] : 문서의 num byte 만큼 앞부분 출력

head -c 5 myFile

-n [num] : 문서의 num line 만큼의 앞부분 출력

head -n 5 myFile

tail

문서 내용 뒷부분 출력. (디폴트 10줄)

tail myFile

옵션

-n [num] : 문서의 num line 만큼의 뒷부분 출력

tail -n 5 myFile

-n +[num] : 문서의 num line 부터 끝까지 출력

tail -n +5 myFile

-F : 명령어가 끝나지 않고 계속 내용이 추가되길 기다리다가, 추가 되면 append 해서 출력. 로그 파일 작성할때 …


Dispatch Group에 비동기 작업이 포함된 task 를 보내는 방법을 알아봅시다

Previously on GCD…

지난 포스팅에서는 Dispatch Group에 대해 살펴봤는데요, Dispatch Group의 notifywait 함수를 통해 여러 스레드로 분배된 작업들의 종료 시점을 각각이 아닌 하나로 그룹지어서 한번에 파악할 수 있다고 했습니다.

Image for post
Image for post


Dispatch Group의 개념에 대해 알아봅시다

Previously on GCD…

저번 시간에는 GCD 사용시 주의 사항에 대해 살펴보았는데요, 오늘은 Dispatch Group이라는 새로운 개념을 알아보도록 합시다.

Dispatch Group의 목적

우리는 작업(task)을 Dispatch Queue에 보내면, GCD가 스레드를 적절히 생성해서 분배해준다는 사실을 알고 있어요. (모른다면 이전 시리즈들을 정주행 하고 오는걸 추천합니다!)

Image for post
Image for post

이때 여러 스레드로 분배된 작업들이 끝나는 시점을 각각 파악하는 것이 아니라, 하나로 그룹지어서 한번에 파악하고 싶을때 Dispatch Group의 개념이 사용됩니다.


Stanford — Developing iOS 10 Apps with Swift — 17. Accessibility 강의 정리 글

애플에서는 학습, 동작, 시각, 청각 등의 문제를 겪고 있는 사람들을 위해 아래와 같은 접근성 기능을 제공한다.

Voice Over

isAccessibilityElement: Bool

  • false 로 설정되면 해당 element 에 대해서는 voice over trigger 안됨

accessibilityLabel: String?

  • button의 경우 image 가 있다면 해당 image 이름으로 label 이 설정되기 때문에 따로 설정이 필요할 수 있음.

accessibilityTraits: UIAccessibilityTraits

  • [accessibilityLabel + accessibilityTraits] 형식으로 보이스 오버 출력

accessibilityValue: String?


GCD 사용시 주의 사항에 대해 알아봅시다

Previously on GCD…

어휴 오랜만이어도 너무 오랜만이네요 정말..! 이것저것 바빠서 글을 못쓴지 어언.. ㅎㅎ 그래도 한달에 한개는 쓰고 싶어서 클스마스 연휴 맞이 GCD 시리즈로 돌아왔슴다.

저번 시간에는 메인 큐, 글로벌 큐, 커스텀 큐와 같은 GCD Dispatch Queue의 종류와 특성에 대해 알아본 후 로또 당첨을 기원하며 사라졌군요.

오늘은 지금까지의 내용을 총 망라한 GCD 사용시 주의 사항에 대해 살펴볼텐데요, 그럼 바로 시작해보죠! ㄱㄱ

1. UI는 main 스레드에서 처리한다

Image for post
Image for post
화가 스레드! 메인 스레드!

이 시리즈를 쭉 봐온 분들이라면 익숙한 그림, 바로 우리의 메인 스레드 입니다. 얘가 이렇게 화가 모자를 쓰고 있는 이유는 바로 UI 그리는 일을 담당 하기 때문이었죠!

메인 스레드가 UI 를 …


RGBColorSpace를 알아봅시다

SwiftUI를 깨작거리다가 Color 생성자에 RGBColorSpace 를 받는걸 봤다. 음,, 넌 머니?

Image for post
Image for post

세개의 case 가 있군.

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store