앱에서 로그인 후 서버에서 반환되는 accessToken과 refreshToken을 저장하려고 하는데, CoreData에 저장을 하기에도, UserDefaults에 저장을 하기에도 약간 애매해서 KeyChain에 저장을 하려고 한다 UserDefaults가 키와 값으로 저장하고 불러오는 것처럼 키체인도 사용할 수 있는데, 다만 키체인은 키와 값 형태의 데이터와 속성들을 묶어서 사용한다 사용방법은 간단하게 이 정도로 차이 난다 키체인 서비스 KeyChain Service 사용자를 대신해서 안전하게 작은 데이터 조각을 저장할 수 있다 디바이스 안에 암호화된 데이터 베이스라고 생각하면 된다 KeyChain Service API는 다양한 상황에서 여러 형태의 데이터를 암호화된 데이터베이스에 저장할 수 있는 메커..
애플 로그인을 구현한 후, 첫 로그인을 하면 애플 서버에는 유저가 해당 앱에 가입한 것처럼 설정되지만 (아이폰 기준, 설정 - Apple ID - 암호 및 보안 - Apple로 로그인 - Apple ID를 사용하는 앱에서 확인 가능) 서비스를 하고 있는 서버에도 유저 정보를 저장해야하기 때문에(가입) 서버로 값을 전달해줘야 한다 서버 쪽에서 어떻게 확인하는지 내가 서버개발자가 아니기 때문에 잘은 모르지만, 첫 로그인 시 확인할 수 있는 authorization.credential as? ASAuthorizationAppleIDCredential 값 중 identityToken과 authorizationCode를 서버로 전달해서 확인해야 한다 다른 포스팅에서는 userIdentifier, fullname이..
이전 포스팅에서는 Object에 값을 다 채워서 데이터를 저장했다. 모든 값이 채워지지 않은 Object를 저장하면 어떻게 될까? nil이 포함된 저장 car.setValue(myCar["brand"], forKey: "brand") // car.setValue(myCar["color"], forKey: "color") car.setValue(myCar["price"], forKey: "price") 위와 같은 코드로, 일부 값을 비워서 저장해보자 value를 주지 않고 저장하면 해당 값이 nil로 들어가게 된 것을 알 수 있다. Entity의 속성의 optional 유무 그럼 Entity의 속성들은 기본적으로 optional일까? guard let newcar = try? context.fetch(Ca..
Core Data 데이터 저장하기 Car Entity를 만들어놓았으니, 데이터를 한번 저장해 보자 let myCar: [String: Any] = ["brand": "KIA", "color": "black", "price": 3000] 뷰 컨트롤러에 다음과 같이 딕셔너리 형태의 저장하고자 하는 값을 만들어주었다 이전 포스팅에서 context는 인스턴스들의 변화를 추적한다고 했다. 메서드라고 생각하면 편하지 않을까? 저장하는 메서드를 사용하기 위해서 context를 사용해야 하고, context 역시 다른 인스턴스들과 함께 container에 포함되어 있다 현재 persistent container는 AppDelegate에 있다 AppDelegate의 persistent containser에서 contex..
! 공식문서를 참고한 글입니다 https://developer.apple.com/documentation/coredata/setting_up_a_core_data_stack Core Data Stack Core Data 모델 파일을 만든 후(https://modelinspring.tistory.com/90), 앱의 모델 레이어를 협력 지원하는 클래스를 설정해보자 이 클래스들은 Core Data Stack이라고 한다 NSManagedObjectModel의 인스턴스는 앱의 모델 파일을 나타내며, 앱의 타입, 프로퍼티들, 그리고 관계들을 설명한다 (구조체나 클래스처럼, 말 그대로 설명하는 그 자체) NSManagedObjectContext의 인스턴스는 앱 타입들의 인스턴스의 변화들을 추적한다 (메서드? cre..
CoreData를 사용하기 위해서는 프로젝트 생성시에 Use Core Data를 체크하면 되지만 프로젝트 중간에 CoreData를 추가하게 되었다 프로젝트 중간에 CoreData 추가하기 Data Model 파일 생성하기 [command + N] 또는 [File] - [New] - [File...] 으로 Core Data의 Data Model 파일을 만들어준다 .xcdatamodeld 확장자의 파일이 생긴 것을 확인할 수 있다 AppDelegate 수정하기 AppDelegate를 그 다음으로 수정해주어야 한다 CoreData를 import해주고, import CoreData // MARK: UISceneSession Lifecycle 메서드들 다음에 아래 코드들을 추가해주자 // MARK: - Core ..
[Swift/iOS] 메모리 안전성 Memory Safety From 공식문서(1) [Swift/iOS] 메모리 안전성 Memory Safety From 공식문서(2) ! 공식문서를 참고한 글입니다 메서드에서 Self로의 접근 충돌 Conflicting Access to Self in Methods 구조체의 mutating 메서드는 메서드 호출의 지속시간 동안 자기 자신(Self)을 향한 쓰기 접근을 갖는다 struct Player { var name: String var health: Int var energy: Int static let maxHealth = 10 mutating func restoreHealth() { health = Player.maxHealth } } restoreHealth()..
인터프리터 방식 IDLE에서 한줄씩 명령어를 입력하고 실행하는 방식 스크립트 방식 텍스트 에디터를 이용하여 명령어를 파일에 저장한 후에 파일을 읽어서 명령어들을 하나씩 실행하는 방법 소스 파일 Source File 텍스트 에디터에 파일의 내용을 작성하고 저장한 파일, 명령어들이 저장된 파일 변수 변수는 컴퓨터 메모리에 있는 값(Value)을 참조하기 위한 이름 변수는 컴퓨터 메모리 공간에 저장됨 a = 7, 7이라는 값을 a라는 변수에 저장하는 것 참고 스위프트 변수 이름 짓기 https://soojin.ro/blog/english-for-developers-swift
퍼사드 패턴이란? 서브 시스템을 감싸고 단순한 인터페이스를 제공, 복잡한 시스템 구조를 단순화하는 패턴 건물의 정면(Facade)을 의미 다른 커다란 코드 부분에 대한 간략화된 인터페이스를 제공하는 객체 간편한 메소드 제공 간단히 말하면 특정 행동을 위해 필요한 여러 서브 클래스들의 기능을 퍼사드라는 클래스로 단순화해서 쉽게 사용할 수 있게 한 것 서브 클래스들의 많은 기능을 다 가져오는 것이 아니라 퍼사드 클래스의 목적 수행을 위해 필요한 기능들만 가져와서 단순화함 퍼사드 패턴의 구성요소 퍼사드 클래스 서브 시스템들을 단순화하는 역할을 함 클라이언트는 서브시스템들과 직접 소통하는 것이 아니라 퍼사드 클래스만 사용함 -> 클라이언트는 서브시스템의 내부 구조를 알 필요가 없음 서브시스템 클래스 퍼사드 클래..
- Total
- Today
- Yesterday
- inout 파라미터 메모리 충돌
- 메모리 안정성
- 클로저 축약
- 강한 참조 순환
- authorizationCode
- ios
- SWIFT
- 클로저
- 강한참조순환
- 자동클로저
- escaping closrue
- 클로저 강한 참조
- Entity
- object
- ASAuthorizationAppleIDCredential
- weak
- Core Data Stack
- autoclosure
- 회원가입
- unowned
- 캡쳐리스트
- identity Token
- 토큰저장
- Persistent Container
- context
- 클로저표현
- Delegate 패턴
- 디자인패턴
- CoreData
- core data
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |