CS
31
[iOS] xcode에서 하위 폴더 보이지 않는 문제
2023.04.07
A. 문제 상황 xcode에서 git으로 다른 branch의 작업사항 pull한 후 workspace를 여니 project navigator에 폴더 내 다른 사람이 작업한 파일이 보이지 않았음. 파인더에서 폴더 확인한 결과 제대로 pull도 됐고 파일도 존재했음. B. 해결 방법 project navigator에 누락된 하위 폴더들을 드래그해서 넣고 added folders를 create groups로 설정해서 넣어주면 됨. 아니면 project navigator 우클릭 → add files to “…” 선택 → 추가하려는 폴더 넣고 옵션을 똑같이 create groups로 설정. 그리고 add 해주면 잘 들어가 있음.
[iOS] unix timestamp swift
2023.04.07
A. 설명 iOS의 unixTimeStamp를 사용할 일이 있어서 찾아보니 기본 제공하는 것이 있음. Date().timeIntervalSince1970로 사용하면 되고 1970년 1월 1일 00시 00분 00초 기준으로 몇 초가 지났는지 확인할 수 있는 프로퍼티임. 내가 필요했던 것은 현재까지 1357초가 지났다고 했을 때 135까지 필요했으므로 아래와 같은 처리를 추가적으로 해줬음. (10으로 나눈 후 Int로 형변환하여 나머지 잘라내기) import UIKit class TimeSynchronizer { init() { } func getTimeInfo() -> String { var unixTS = Date().timeIntervalSince1970 unixTS = trunc(unixTS / 10..
[iOS] 서버 통신 Base Service
2023.04.07
A. 설명 api 통신 필요할 때마다 보일러 플레이트 코드가 너무 많이 생기는 것 같아 base로 사용할 코드 만듦. 프로토콜로 정의해서 재사용성 용이하도록 구현함. 웹 연결에는 Alamofire 프레임워크를 사용함. B. 코드 import Foundation import Alamofire protocol BaseService { /// api request url var url: String { get set } var header: HTTPHeaders { get set } var param: Encodable? { get set } /// Request에 들어가는 .put, .get 등 method var method: HTTPMethod { get set } /// Request에 들어가는 P..
[iOS] 웹뷰 쿠키 관련 유틸
2023.04.07
기록용으로 남겨놓는 것으로, 더 깔끔하게 구현할 수 있는 방법이 존재하겠지만.. 하나하나 파라미터로 다 넘기기 싫고 함수의 길이도 길어지는게 싫어서 아래와 같이 저는 구현했습니다. 아래 함수를 통해 만들어진 쿠키로 웹뷰에 넣었을 때 정상 작동했습니다. import UIKit class CookieUtil { private let path: String = "/" let cookieDomain = "_" private enum cookieBaseName: String { case appId = "_" // ... } func getAppCookie() -> HTTPCookie? { guard let cookie = HTTPCookie(properties: [ .domain: cookieDomain, .pa..
[iOS] 키체인 유틸
2023.04.07
String 타입의 값 키체인에 저장할 때 사용하려고 구현해놓은 키체인 유틸 클래스입니다. 싱글톤으로 구현되어 있습니다. store 시 이미 존재하던 값이면 자동으로 업데이트가 되도록 구현했습니다. 발생하는 각종 오류에 대한 설명은 주석으로 달았습니다. import Foundation import Security enum KeyChainType: String { case tokenKey = "Token_Key" // ... } enum KeyChainError: Error { case invalidBundleID case invalidData case recognizedKeyChainError(OSStatus, CFString?) case unrecognizedKeyChainError case dataC..

[iOS] 해싱
2023.04.07
용어 정리 key : 해싱되기 전의 값 digest : 해싱된 후의 값 rainbow table : 여러 값들을 대입해보면서 얻은 다이제스트들을 모아놓은 테이블 해시 함수 단방향 함수로만 작동함 input 값이 아주 미세하게 달라져도 output 값은 전혀 달라짐 → Avalanche Effect 해시 함수의 원래 설계 목적은 빠른 검색을 위함임 (OS 부분 해시테이블 참고) input 값이 같으면 output 값은 항상 같음 (즉 함수로서 기능함) 해시 함수의 위험성 input이 같으면 output은 항상 같으므로 해싱된 문자열의 원문을 레인보우 테이블에서 찾을 위험성이 존재함. brute-force 원래 해시 함수가 빠른 검색을 위해 설계되었다 보니 실제 런타임에서의 속도도 빠른 건 맞음. 하지만 그..