본문 바로가기

전체 글

SecKey compare 자체 생성한 사설 인증서 기반으로 서버간 통신시 서버 검증 public key 비교 let clientPublicKeys: [SecKey] = clientCertificates.compactMap { $0.publicKey } let serverPublicKeys: [SecKey] = SSLCeritificate.publicKeys(for: trust) for serverKey in serverPublicKeys as [AnyObject] { for clientKey in clientPublicKeys as [AnyObject] { if serverKey.isEqual(clientKey) { return true } } } return false certificate 비교 let clientSecCert.. 더보기
atomic propery in swift @propertyWrapper struct Atomic { private var value: Value private let lock = NSLock() init(wrappedValue value: Value) { self.value = value } var wrappedValue: Value { get { return load() } set { store(newValue: newValue) } } func load() -> Value { lock.lock() defer { lock.unlock() } return value } mutating func store(newValue: Value) { lock.lock() defer { lock.unlock() } value = newValue } } 사용 .. 더보기
binary plist property list 는 xml, json, binary 형태로 저장이 가능 xml 과 binary 형태의 상호 변환 방법 // binary -> xml plutil -convert xml1 binary.plist // xml -> binary plutil -convert binary1 xml.plist 참고 링크 https://medium.com/@karaiskc/understanding-apples-binary-property-list-format-281e6da00dbd Understanding Apple’s binary property list format Property lists offer a structured and efficient way to represent and persist h.. 더보기
@escaping 클로저에 @escaping 키워드를 사용 : 클로저로 넘기는 함수의 인자가 기존의 함수의 영역을 넘어서도 사용할 수 있도록 함 // 함수 외부에 클로저를 저장하는 예시 // 클로저를 저장하는 배열 var completionHandlers: [() -> Void] = [] func withEscaping(completion: @escaping () -> Void) { // 함수 밖에 있는 completionHandlers 배열에 해당 클로저를 저장 completionHandlers.append(completion) } func withoutEscaping(completion: () -> Void) { completion() } class MyClass { var x = 10 func callFunc() {.. 더보기
set -e and set -x set -e 모든 라인의 커맨드를 검사하여 실패할 경우 실행 종료한다. set +e 위와 반대로 에러가 발생해도 명령을 계속 실행한다. set -x 트레이스 기능으로 실행되는 모든 커맨드를 화면에 출력한다. 출력시에는 + 기호가 앞에 붙는다. set +x 위와 반대의 기능으로 트레이스 기능을 사용하지 않는다. 더보기
__bridge, __bridge_retained, __bridge_transfer NS 타입과 CF 타입간의 형 변환 ● __bridge (__bridge T) op op를 T타입으로 브릿지 캐스팅할 때 사용 ● __bridge_retained (혹은 CFBridgingRetain()) (__bridge_retained T) op NSType 포인터(op)를 CFType 포인터(T)로 바꿀 때 사용 NSArray *array = [[NSArray alloc] init]; CFArrayRef cfArray = (__bridge_retained CFArrayRef)array; 위 코드 블럭은 아래와 동일하다. NSArray *array = [[NSArray alloc] init]; CFArrayRef cfArray = (CFArrayRef)CFBridgingRetain(array); ● .. 더보기
vim 커서 이동 vim에서 윈도우 HOME, END 키 사용 하는 방법 0 : 해당 라인의 처음으로 이동 $ : 해당 라인의 마지막으로 이동 H : 현재 윈도우 화면에서 제일 윗 라인으로 이동 M : 현재 윈도우 화면에서 중간 라인으로 이동 L : 현재 윈도우 화면에서 마지막 라인으로 이동 1G : 파일의 제일 첫번째 라인으로 이동 15G : 파일의 15번째 라인으로 이동 G : 파일의 제일 마지막으로 이동 10[Up|Down] : 현재 위치에서 10라인 [위|아래]로 이동 더보기
구글 슬라이드 바로가기 만들기 공용으로 사용하는 구글 슬라이드 장수가 많아질수록 해당 슬라이드를 찾는 게 귀찮아진다. 북마크나 태그 기능등이 제공되면 좋겠지만 구글 슬라이드에서는 해당 기능이 제공되지 않는다. 그래서 구글 스크립트로 간단하게 해당 슬라이드로 바로 가기를 만들어서 사용해봤다. 기본적으로 바로가기로 특정지을 슬라이드를 선택하기 위해서 여러 가지 방법이 있겠지만 슬라이드의 대체 텍스트(Alt text)를 사용하여 해당 텍스트를 기준으로 메뉴에 동적으로 생성하도록 한다. function getSlides() { return SlidesApp.getActivePresentation().getSlides() } function getMenuItems() { return menuItemsCache = getSlides().redu.. 더보기