본문 바로가기

swift33

Swift Moya에 Interceptor 적용하여 자동로그인(토큰 갱신) 구현하기 오늘은 iOS에서 로그인을 구현할 때 Interceptor를 사용해 자동으로 토큰을 갱신하는 방법을 알아봅시다! 🏃🏻‍♀️ 오늘의 주제 현재 진행중인 프로젝트에서는 Apple과 카카오로 로그인하는 소셜 로그인 기능을 제공하고 있습니다. 일반적으로 iOS에서 소셜로그인 플로우는 다음과 같습니다. Apple이나 카카오와 같은 OAuth Provider로부터 oAuthToken을 받습니다. (oAuthToken은 provider에 따라 accessToken이나 다른 이름으로 불리기도 합니다! 오늘은 oAuthToken으로 통일해서 부르겠습니다.) 이 과정은 이미 많은 곳에서 잘 설명하고 있기 때문에 생략하겠습니다! 1번에서 받은 oAuthToken을 우리 프로젝트의 서버에 보냅니다. 서버는 우리가 보낸 oAu.. 2023. 4. 8.
Swift SupaBase Auth 비밀번호 초기화 + 변경 지난번 SupaBase Storage에 이미지 업로드하기에 이어 이번에는 SupaBase를 사용하여 비밀번호 초기화 + 변경 기능을 구현해보자! 비밀번호를 잊었을 때 일반적으로 비밀번호 찾기 버튼을 누르면 메일을 발송 + 메일을 클릭해 본인 인증을 하면 기존의 비밀번호가 초기화 되고 새 비밀번호를 설정하는 로직 1. 비밀번호 찾기/초기화 뷰 구현 로그인 화면에 비밀번호 찾기/리셋 버튼을 넣는다. 해당 버튼을 클릭하면 비밀번호를 변경할 이메일을 입력 받는 뷰로 이동시킨다. 이메일을 입력 받으면 SupaBase sdk를 불러와서 해당 이메일로 PasswordReset 메일을 발송한다. 2. 딥링크 설정 뷰 구현을 하고 SupaBase 코드를 사용하기 전에 우선 SupaBase 홈페이지에서 URL 설정 + 프.. 2023. 3. 28.
iOS UIScrollView 키보드 show/hide 시 스크롤 처리 UIScrollView를 사용해 폼 형식의 뷰를 구현하다 보면 사용자가 입력을 할 때 생기는 키보드 만틈 뷰를 올려줘야 하는 상황이 발생한다. 즉, 사용자가 TextField를 터치하여 입력을 시작하면 ScrollView가 키보드의 높이만큼 자동으로 스크롤되어 사용자가 입력중인 TextField가 키보드에 가려지지 않도록 해야한다. 사실 이 문제를 해결하는 코드는 구글링을 하면 많이 나오고 복붙하면 바로 사용이 가능하다. 하지만, 이번에 구현한 방식은 흔히 사용하는 코드를 Protocol로 만들어서 재사용성을 높인 방식이다. Keyboard의 등장에 따른 UI 처리는 여러 VC에서 중복으로 필요한 경우가 많고 이럴 때 마다 필요한 코드를 매번 VC에 넣게되면 VC의 크기가 커지게 된다. 이는 우리가 지양.. 2023. 3. 15.
Swift SupaBase SDK로 Storage에 이미지 업로드 최근 진행중인 프로젝트에서 SupaBase를 사용하고 있어서 iOS에서 SupaBase를 이용해 원격 DB를 다루는 작업을 진행하고 있습니다. SupaBase 자체가 정보가 많지 않은데 특히 iOS에서의 관련 정보가 엄청 부족해서 (사실상 없다고 봐야합니다.) 이것저것 삽질하면서 공부하고 있습니다. 이번에는 Storage에 이미지를 업로드하면서 했던 삽질들과 구현 방법을 공유해보고자 합니다. 우선, 2023년 3월 14일 기준 SupaBase의 제대로된 Swift용 Docs는 없습니다...ㅠ https://github.com/supabase-community/supabase-swift GitHub - supabase-community/supabase-swift: A Swift client for Supa.. 2023. 3. 14.
Understanding Swift Performance https://developer.apple.com/videos/play/wwdc2016/416/ Dimensions of Performance 그래프가 왼쪽에 있을 수록 성능이 좋다! Allocation Stack 스택 포인터를 이용하여 빠르게 allocate/deallocate 가능 Heap Advanced data structure 동적 lifetime으로 메모리 할당 가능 (스택을 불가능) 할당을 위해 메모리에서 사용하고 있지 않은 블록을 찾는 과정 필요 deallocate를 위해 메모리의 적절한 위치에 블록을 reinsert 해야함 Thread Safety를 위한 오버헤드 발생 여러 스레드가 동시에 힙에 접근 할 수 있다. 따라서, lock 또는 다른 동기화 메커니즘을 통해 무결성을 보호해야 한다.. 2023. 3. 13.
Combine 중복 바인딩 문제 (tableViewCell) 관련 PRhttps://github.com/sopt-makers/SOPT-iOS/pull/66문제 상황위와 같은 뷰에서 각 cell의 체크 박스(버튼)의 토글 이벤트를 combine으로 활용하여 VC와 바인딩하려고 한다.이 때,위처럼, 버튼 클릭을 해도 토글이 되지 않고 다시 원상태로 돌아오는, 정확히 말하면 두번 토글되어 본래 상태로 돌아오는 문제가 발생했다.VC에서 cell의 publisher를 구독하여 print 해보면 클릭하면 이벤트가 연속해서 2번 발생하는 상황이었다. 코드VCpublic func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { guard.. 2023. 2. 15.