시작Kakao 로그인에 이어서 Naver 로그인도 구현해 봅시다. Naver 개발 문서는 정말 친절하지도 않고설명도 Obj-c로 구현돼 있어서 짜증 나고 어려웠던 거 같습니다. 막상 해보니 구현 방법은 Kakao 로그인이랑 비슷하긴 하네요.만약, 소셜로그인을 구현이 처음이시라면Kakao 로그인을 구현해 보고 Naver 로그인을 해보시는 걸 추천드립니다. Naver Dev. 사이트 설정 처음해야 할 일은 애플리케이션 등록 입니다. 아래 그림과 같이 먼저 애플리케이션 이름을 설정합니다.다음으로 사용할 API를 설정해 주세요. 개발 환경 iOS를 선택합니다.여기선 테스트 목적으로 사용했기 때문에, 다운로드 URL은 때문에 아무 주소나 적어줬습니다.(이미 앱스토어에 올라가 있다면 그 주소를 사용해 줍시다) 그..
시작애플 로그인에 이어 카카오 로그인 연동도 도전해보려 합니다.초기 설정들은 카카오 Doc 에 아주 자세히 나와있으므로, 간단히 넘어갈 예정입니다. 초기 설정일단 가장 먼저 해야 할 일은 Kakao Dev에서 내 애플리케이션 을 추가해줘야 합니다. 다음으로 위의 문서를 따라 로그인 활성화, RedirectURL, 동의 항목 등 필수 항목들을 설정해 주세요. 카카오 소셜 연동을 하기 앞서 필요한 기본 설정들은 끝났습니다. Kakao SDK(Software Dev Kit) 설치다음으로 Kakao SDK가 필요합니다. 아래 이미지처럼 카카오에서 제공하는 모듈은 이런 기능들을 갖고 있습니다.자세한 내용을 확인하고 싶다면, Kakao SDK 문서 를 참고해 주세요. 위에 보시다시피 Kakao SDK에 많은 모..
시작타 플랫폼 소셜로그인을 사용할 경우, 심사 지침에 따라 Apple 로그인을 필수적으로 구현을 해줘야 한다고 합니다.그래서 오늘은 Apple 로그인을 구현하는 방법을 알아보려 합니다. Capability 추가Apple 로그인 기능을 사용하기 위해, 가장 먼저 해야 할 일은 Capability에서 Sign in wiht Apple을 추가해줘야 합니다.이렇게 해주면 초기설정 완료 로그인 버튼 생성기본적으로 애플에서 제공하는 로그인 버튼 클래스가 존재합니다.당연히 커스텀으로도 구현할 수 있습니다. 여기서 중요한 게 디자인의 직관성을 위해, 애플이 로그인 버튼 관련 여러 가이드라인 을 만들어 놨습니다.제공되는 버튼 및 커스텀 버튼을 사용하기 전에, 꼭 HIG를 숙지해서 작업해 주도록 합시다 오늘은 제공되는..
시작 이전 글에서 [iOS/Swift] MVVM 패턴의 Data Binding에 대해서 알아보자! (Closure, Observable, Combine) 간단하게 바인딩을 하는 법을 알아봤습니다. 이전 글의 방법은 'ViewModel -> View 바인딩'으로 어디선가 데이터를 받아오면, ViewModel의 데이터들이 View와 결합되어, 즉시 View에 업데이트 되게 만들었고 이번에 공부해 볼 것은 'View -> ViewModel 바인딩' 에 대해서 알아보려고 합니다. 말 그대로 이번엔 View(사용자)에서 입력 받은 데이터를 즉시 ViewModel에 결합시키는 방법을 배워봅시다. 일단, 들어가기 전에 간단히 로그인 화면을 생각해 봅시다. 로그인 화면은 먼저 사용자가 ID와 Password를 입력을 ..
시작 sizeToFit와 sizeThatFits 두 메서드 모두 해당 콘텐츠에 따라 자동으로 크기를 조절해 주는 메서드입니다. 간단한 예제와 함께 빠르게 설명하고 끝내겠습니다. sizeToFit 간단히 설명하면, 뷰가 현재 포함하고 있는 콘텐츠에 맞게 크기를 조절합니다. 예를 들어, Label이 있다고 해봅시다. let textLabel: UILabel = { let label = UILabel() label.numberOfLines = 0 label.backgroundColor = .secondarySystemBackground label.text = "안녕하세요" + "\n" + "저는 현재 iOS 공부중입니다." + "\n" + "가자" return label }() override func vie..
시작 NavigationController의 ToolBar를 코드로 만들어 봅시다. ToolBar도 NavigationBar와 만드는 방법이 비슷하더라고요. 참고로 ToolBar와 TabBar는 완전히 다른 기능을 하는 클래스입니다. 또한 TabBar는 UINavigationController에 속해 있지도 않고요. 여기서는 ToolBar를 만들 거예요! 한번 만들어 봅시다. ToolBar ToolBar 만드는 방법은 1. UINavigationController의 계층에 있는 ToolBar를 사용 2. 직접 UIToolBar 만들어 주는 방법이 있습니다. 오늘은 UINavigationController를 통해 ToolBar를 구현해 보겠습니다. 일단 ToolBar를 사용하기 위해선 당연히 UINavig..
시작 간단히 할 예정이라 먼저 초스피드로 뷰 컨트롤러의 Life Cycle을 알아봅시다. 뷰컨의 Life Cycle의 순서 loadView 뷰를 생성합니다. (시스템에서 자동 호출) ⬇ viewDidLoad 뷰가 로드되고 작업을 수행 (앱이 실행되고 오직 한 번만 작업을 수행) ⬇ viewWillAppear 뷰가 화면에 나타나기 직전 준비 작업을 수행 (뷰컨으로 다시 되돌아올 때마다 작업을 다시 수행) ⬇ 뷰가 화면에 나타남 ⬇ viewDidAppear 뷰가 화면에 나타난 후 작업을 추가적으로 수행 ⬇ viewWillDisappear 뷰가 화면에서 사라지기 전에 마무리 작업을 수행 (메모리는 아직 존재) ⬇ 뷰가 화면에서 사라짐 ⬇ viewDidDisappear 뷰가 화면에서 완전히 사라진 후 작업을 수..
시작 이전에 이미 plist의 데이터를 갖고 오는 방법을 설명을 했었습니다. [iOS/Swift] 개발 환경에 따라 각각의 다른 plist의 저장된 API Key 값 받아오기 [iOS/Swift] plist의 값 얻는 방법 및 Github에서 중요한 정보 숨기는 방법(API Key, Bundle, gitignore) 그런데 불러오는 과정에서 NSDictionary(contentsOfFile: String)은 iOS 11 부터 더 이상 사용되지 않더라고요. 이런식으로 사용이 가능하네요. var parsePlist: NSDictionary { guard let plistUrl = Bundle.main.url(forResource: "SecureAPIKeys", withExtension: "plist") el..
시작 공식문서에서 MapKit의 Annotation 예제를 살펴보던 중 @objc dynamic var라는 키워드가 나오더라고요. annotation 예제 공식문서 MKAnnotation - coordinate 공식문서 Realm에서도 이런 키워드를 봤던 거 같은데, 그래서 오늘 간단히 한번 정리해 보고 넘어가려고 글을 적게 됐습니다. 정적(static) / 동적(dynamic) 디스패치 들어가기 전에 간단히 차이섬을 알아봅시다. 👉 정적(static) 디스패치 컴파일러가 컴파일 시점에 호출해야 할, 메서드의 실제 위치를 미리 알고 있기 때문에, 매우 빠르게 동작합니다. 컴파일 타임에 결정이 되기 때문에, 상대적으로 속도 빠릅니다. 모든 구조체는 이와 같이 동작합니다. 대신 클래스에서는 상속을 못하게 되..
Observable 직접 만든 Observable이 어떤식으로 동작을 관찰하고 업데이트하는지 알고 싶어서 작성했습니다. class Observable { // 2. value가 변하면 didSet에 의해 변경된 value 값을 갖고 listener 동작을 실행합니다. var value: T? { didSet { self.listener?(value) } } init(_ value: T?) { self.value = value } // 동작을 담아두는 클로저입니다. (실행 X) private var listener: ((T?) -> Void)? // 1. 이 함수가 호출이 되면 아래와 같은 작업을 실행 func bind(_ listener: @escaping (T?) -> Void) { // complet..