일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- Code
- Notification
- github
- mac
- Apple
- Swift
- Archive
- Firebase
- SwiftUI
- Xcode
- Session
- rxswift
- FLUTTER
- 한글
- MacOS
- error
- window
- shorebird
- UIButton
- IOS
- geofencing
- darkmode
- 웹뷰
- 이미지
- Realm
- JPA
- Git
- 개발자
- appstore
- iOS16
- Today
- Total
목록IOS (176)
EEYatHo 앱 깎는 이야기
1. Closure란? 호출(실행) 가능한 코드 블록. 클로저 안에서, 클로저가 작성된 범위의 변수나 함수들 접근 가능. 다른 범위에서 실행되어도, 작성된 범위의 항목만 접근 가능. 2. map 메소드로 축약문법 알아보기 map은 배열의 모든 원소에 특정 연산을 수행한 배열을 반환. var numbers = [20, 19, 7, 12] numbers.map({ (number: Int) -> Int in return 3 * number }) // [60, 57, 21, 36] 2-1. return 생략 명령어가 하나뿐인 클로저라면, 자동으로 그 명령어의 반환값을 리턴함. var numbers = [20, 19, 7, 12] numbers.map({ (number: Int) -> Int in 3 * numb..
다비이스의 여유 저장공간을 단위까지 변환해서 구하는 함수 /// 여유공간 구하기 func getFreeSizeAsString() -> String { let documentDirectoryPath = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true) var freeSize: NSNumber? // Byte단위 do { let attributes = try FileManager.default.attributesOfFileSystem(forPath: documentDirectoryPath.last! as String) freeSize = attributes[FileAttributeKey.systemFreeSize] a..

JWT 정의 - JSON Web Token ) - JSON 데이터를, URL-safe BASE64 인코딩과( URL로 사용될 수 있는 문자열로 구성 ), 특정 암호화 알고리즘으로 전자 서명된 문자열. - 정보전달 및 권한인가를 위해 사용하는 토큰. JWT 구성 - 3가지 파트로 나누어져 있으며 ( header, payload, signature ), 마침표(.)를 구분점으로 이어져 있음 1. header 토큰의 타입과, signature에서 사용하는 암호화 알고리즘 두 데이터를 JSON으로 만들고, URL-safe BASE64 인코딩하면 완성 header에 필요한 데이터 = { "alg": "HS256", "typ": "JWT" } => 인코딩 => eyJhbGciOiJIUzI1NiIsInR5cCI6Ik..

네트워크 통신을 위한 Codable 구조체 만들 때, API 스키마 보면서 타이핑 했는데, 한방에 해주는 툴이 있었다. 새삼스럽지만, 경력 많은 분들한테 뭐 배우는 거 진짜 너무 효율적인듯.. 홈페이지. https://quicktype.io/ Convert JSON to Swift, C#, TypeScript, Objective-C, Go, Java, C++ and more • quicktype { "people": [ { "name": "Atticus", "high score": 100 }, { "name": "Cleo", "high score": 900 }, { "name": "Orly" }, { "name": "Jasper" } ] } Provide sample JSON files, URLs, JS..

잘 되던 구글 로그인이 갑자기 안된다.. 에러 내용을 보니 "Code: -15.", "ID Token expired." 무슨 갑자기 왠 토큰..??? 구글 로그인 서비스 연동한거에 유효기간같은게 있나..? 삽질 삽질 하다가 컴퓨터 시간이 안맞아서.. 토큰 유효기간 계산에 오류뜨는 거였다 예전에 일찍 생활하는 습관 들이려고 컴퓨터 시간을 10분 빠르게 했더니 생긴 이슈 날짜 및 시간 설정에서, "자동으로 날짜 및 시간 설정" 체크해주면 해결

RIBs 정의 기존 디자인패턴들이, 비지니스 로직만 있는 ( 뷰가 없는 ) 모듈의 구현이 어려웠고, 이 점을 보완하여 Uber에서 VIPER를 개조한 것이 RIBs 이다. 화면로직이나, 비지니스로직을 RIB 이라는 모듈로 작성한다. RIB에게 UI요소(View, Presenter)는 옵셔널이다. ( 비지니스 로직만을 가진 모듈이 가능하다는 뜻 ) RIB들을 부모자식 관계로 이어서 논리적인 트리구조로 앱을 작성한다. -> 앱의 상태가 뷰가 아닌, 현재 activate된 RIB이 무엇인가에 따라 결정됨. 기존 MV*, VIPER같은 디자인패턴들이 SW설계시 참고할 수 있는 아키텍처라면, RIBs는 프레임워크다. Cocoa Pod이나 Carthage를 이용해서 설치하고, import 하는 형태다. RIB 구성..

View, Interactor, Presenter, Entity, Router 로 이루어져있다. Router를 통해, 화면전환을 처음으로 고려한 디자인 패턴이며, 각 요소가 하는 일, 특징은 다음과 같다. View UI요소들. VIewController 포함. 유저입력 수신. Presenter에 전달. Presenter에게 ViewModel 수신하며 update. Presenter을 소유함. Presenter View에게 유저 입력을 전달받음. Interactor에게 데이터 관련 요청 ( 데이터 만들어, 변경해, 나한테 줘. 등 ). Interactor에게 전달받은 데이터를 ViewModel로 가공하여 View에게 넘겨줌. Router에게 네비게이션 요청. Interactor을 소유함. Router에게 ..

MVVM을 제대로 이해하기 위해서는, MVVM이 나오는 이유와 배경을 알아야한다고 생각한다. MVVM은 디자인 패턴이다. 디자인 패턴은 어쩌다 나온 것인지를 알기 위해서는, 프로그래밍 패러다임의 변환을 살짝 핥아봐야한다. 1950년대, 어셈블리어와 함께, 순차적 프로그래밍이 나타났으며, ( 단순한 명령어들의 나열 ) 1970년대, C와 Pascal을 필두로, 절차적(절차지향) 프로그래밍이 나타났고, ( if, for, 함수의 등장 ) 1980년대 C++과 1990년대 Java를 통해, 객체지향 프로그래밍이 나타났다. ( 클래스, 객체의 등장 ) 객체지향 프로그래밍은 40년이라는 오랜 세월 동안, 현재까지도 이어져 내려오고 있으며, 수 많은 선조 프로그래머들의 노력 덕분에 유지보수와 협업에 용이한 "코드들..