전체 글
[iOS] KVO(Key-Value Observing)
KVO(Key-Value-Observiing)란? KVO는 A객체에서 A의 변경사항을 B객체에게 알리기 위해 사용하는 코코아 프로그래밍 패턴이다. KVO를 사용하면 다른 개체의 특정 속성이 변경될 때 알림을 받도록 객체를 등록할 수 있다. 프로퍼티 옵저버인 willSet과 didSet이랑 유사하지만 외부에 관찰자를 추가하는것이 다르다. 또한 Objective-C 런타임에 의존하기 때문에 순수한 Swift에서는 그리 좋지 않다고한다...? 따라서 NSObject를 상속받는 클래스로 정의해주어야 하며, 각각의 프로퍼티에는 @objc dynamic 이라는 표시를 해야한다. RxSwift와 유사한 느낌이다? Observing을 위한 Setup class Address { var town: String init(..
소스코드 버전 관리 - 깃(Git)
버전관리? 협업 프로젝트에서는 버전관리가 필요하다. 시간이 지날수록 어느 파일이 최종 업데이트 파일인지 분간하기 어려워지기 때문이다. Git은 소스코드 버전관리 시스템이다. 개발 과정에서 원하는 시점을 저장하고 자유롭게 이동하여 소스코드를 추가, 삭제 할 수 있게 해준다, 오류가 일어나도 저장된 시점으로 되돌아가면 되기 때문에 유용하다. 이를 사용하지 않고 시점마다 프로젝트를 압축해서 저장한다면 압축파일이 무한 증식 하겠지? 이럴 때 사용하는 기술이 git(깃)이다. 다양한 타이밍에 코드상태를 기록할 수 있고 다양한 사람들에게 공유할 수 있다. git init Git을 사용하기 위해선 Xcode Project가 포함된 경로에 Git을 설정한다. Repository(저장소) git init을 사용하여 경로..
[iOS] URLSessionTask failed with error: The resource could not be loaded because the App Transport Security policy requires the use of a secure connection. HTTP접근 허용
Alamofire를 사용해 통신을 하다가 다음과 같은 에러가 발생했다. URLSessionTask failed with error: The resource could not be loaded because the App Transport Security policy requires the use of a secure connection APP Transport Security(ATS): HTTP에서 보안이 향상된 버전이 HTTPS이며 대부분의 웹이 HTTPS를 사용하고 있지만 그렇지 않은 서비스도 있다. iOS9 이후로 APP Transport Security(ATS)를 이용하여 HTTP접속을 통한 접속을 기본적으로 차단한다. 내가 접근한 API "http://openapi.seoul.go.kr:8088..
RxSwift + MVVM 곰튀김님
유튜브 곰튀김님의 영상을 보고 정리. https://www.youtube.com/watch?v=iHKBNYMWd5I&list=PL03rJBlpwTaBrhux_C8RmtWDI_kZSLvdQ&index=2 Subject Subject: 옵저버블처럼 구독할 수 있고, 옵저버블 밖에서 값을 받아 데이터를 컨트롤해서, 새로운 값을 집어넣어 줄 수 있는것. PublishSubject 구독이 시작되고 전달되는 이벤트를 전달한다. BehaviorSubject 기본값을 가지고 시작한다. 구독을 시작한 시점에 데이터가 전달이 안되었다면 기본값을 내려주고, 새로운 구독자가 생기면 가장 최근에 전달된 값을 전달한다. AsyncSubject 데이터가 전달되고, 여러 구독자가 생기더라도 데이터를 내려보내주지 않는다. Comple..
@escaping, @autoclosure
@escaping (탈출) 키워드 원칙적으로 함수의 실행이 종료되면 파라미터로 쓰이는 클로저도 제거된다. @escaping는 클로저를 제거하지 않고 함수(스택프레임)에서 탈출시킨다. (함수가 종료되어도 클로저가 존재하도록 함) 1. 클로저를 단순 실행 ==> non-escaping 클로저 import Foundation func performEscaping1(closure: () -> ()) { print("프린트 시작") closure() } 함수 내부에서 단순 실행하고 종료할 때 클로저를 Heap에 저장할 필요가 없다. @escaping 사용의 대표적인 경우 1. 어떤 함수 내부에 존재하는 클로저(함수)를 외부 변수에 저장하는 경우 ➡️ 파라미터로 받은 클로저를 외부의 변수에 할당하는 경우. Heap..
[Swift] - 클로저(Clousre)
클로저(Closure) 클로저는 사용자의 코드 안에서 전달되어 사용할 수 잇는 로직을가진 중괄호"{}"로 구분된 코드 블럭이다. 쉽게 말해 클로저는 이름이 없는 함수이다. 그렇다면 함수는 이름이 있는 클로저일것이다. 클로저와 함수는 기능이 완전히 동일한데, 형태만 다르다고 생각하면 된다. 클로저를 사용하면 따로 함수를 만들어야 할 불편함 없이 즉석에서 함수를 만들 수 있다. 클로저의 형태 함수의 형태 func myFunction(매개변수 이름: 매개변수 타입) -> 반환 타입{ returun 반환타입 } func add(x: Int, y: Int) -> Int{ return(x+y) } print(add(x: 10, y: 20)) // 30 클로저의 형태 { (매개변수이름: 매개변수타입) -> 리턴타입 ..
[iOS] SnapKit
짧은 코드로 autolayout을 표현할 수 있도록 도와주는 프레임워크 https://github.com/SnapKit/SnapKit GitHub - SnapKit/SnapKit: A Swift Autolayout DSL for iOS & OS X A Swift Autolayout DSL for iOS & OS X. Contribute to SnapKit/SnapKit development by creating an account on GitHub. github.com 코드베이스로 UI를 구현하고 오토레이아웃으로 구현할 때 편리하다. 오토레이아웃 let view = UIView() let square = UIView() square.backgroundColor = .blue square.frame = C..
Firebase(iOS) - Firebase Cloud Messaging(Remote Notification)
iOS에서 *Remote Notification을 사용하기 위해 *APNs와 연결되는 서버가 필요하다. * APNs와 Remote Notification - https://clamp-coding.tistory.com/414 FCM(Firebase Cloud Messaging) APNs의 보안요건을 직접 구축하기 힘들때 쉽게 원격 알림을 보낼 수 있게 해주는 FCM이다. Remote Notification을 손쉽게 관리하고. 전송할 수 있게 도와주는 Firebase의 플랫폼이다. 원격 알림 메시지 전송기능: 사용자에게 표시되는 알림메시지를 실시간 또는 예약 전송 기능 다양한 메시지 타겟팅기능: 단일 기기, 기기 그룹, 주제를 구독한 기기에 알림을 전송하는 기능. 발송 메시지 저장, 관리기능: 알림 내용, ..
[iOS] Push Notification(1). Remote Notification , APNs
Push의 종류 로컬 푸시(Local Notification): 앱으로부터 push를 앱에 띄우는 것 => https://clamp-coding.tistory.com/43 서버 푸시(Remote Notification): 서버로부터 push를 앱에 띄우는것. Remote Notification을 사용하는 상황? VIP를 선별하여 쿠폰을 발급하고 싶다. 내가 팔로우하는 사용자가 나를 태그했을 때 확인해 보라는 알람을 보내고 싶다. 불특정 시간, 불특정 인원, 불특정 장소에 상황에 맞게 알람을 보내고싶다. Local에서 사용하는 장소, 시간, 간격에 맞춰 알람을 보내고싶은게 아닌, 특정 상황에 특정 타겟에게 알람을 보내고 싶을 때 필요한 Notification이다. Remote Notification 전송 ..
[Swift] - UUID 랜덤 고유값 문자 생성
UUID는 Universally Unique Identifier의 약자이다. 총 36개의 문자열로 구성되어 있고, 이 문자는 32개의 실제 문자(숫자 또는 알파벳)과 4개의 하이픈으로 구성되어있다. (8개의 문자) - (4개의 문자) - (4개의 문자) - (4개의 문자) - (12개의 문자) UUID의 특징 앱을 재실행 시켜도 값은 유지된다. 앱의 공급 업체가 같을 경우, UUID 값도 동일하다. 개인적인 의견으로는, 연동성이 좋다고 생각된다. 만약 A라는 회사가 SNS 어플리케이션을 만들고 추후에 채팅 어플리케이션을 제작했을 때, 유저가 보유한 고유한 UUID 값을 통해 해당 어플리케이션들의 연동이 가능하기 때문이다. 앱을 삭제해도 공급 업체가 제공한 다른 앱이 남아있는 경우, UUID 값은 유지된다..