전체 글

iOS 개발

[iOS 개발] OAuth 2.0이란?

OAuth 2.0 클라이언트가 서버에 사용자의 리소스에 대한 접근 권한을 얻기 위한 프로토콜이다. 주로 웹 및 앱에서 사용된다. 일반적으로 OAuth에서는 다음과 같은 토큰이 사용된다. 1. Authorization Code(인가 코드) 사용자가 앱에 로그인하고 권한 부여를 허용하면 발급되는 코드 이 코드는 클라이언트가 액세스 토큰과 리프레스 토큰을 얻기 위해 교환하는 데 사용된다. 2. Access Token(엑세스 토큰) 교환된 인가 코드를 기반으로 발급된다. 앱이 사용자의 리소스에 접근하는데 사용되며, 이 토큰은 일반적으로 만료 기간이 있어서, 만료되면 다시 갱신해야 한다. 3. Refresh Token(리프레시 토큰) 엑세스 토큰이 만료되면 클라이언트는 리프레스 토큰을 사용하여 새로운 액세스 토큰..

카테고리 없음

FirebaseAnalytics: DT_TOOLCHAIN_DIR cannot be used to evaluate LIBRARY_SEARCH_PATHS, use TOOLCHAIN_DIR instead 에러 해결

프로젝트를 클론 받아서 시뮬레이터를 실행시켰더니 다음과 같은 에러가 발생했다. DT_TOOLCHAIN_DIR cannot be used to evaluate LIBRARY_SEARCH_PATHS, use TOOLCHAIN_DIR instead 일단 해당 에러는 코코아팟 관련 에러인데 보통 코코아팟을 업데이트 시켜주면 해결이 된다고 한다. 아마 이 방법은 구글에 저 에러만 쳐도 코코아팟을 업데이트 시켜주는 방법을 알려줄테니 그 방법을 참고하면 될 것 같다. 그러나 내 경우 업데이트를 시켜줘도 에러가 해결되지 않아서 다음 링크를 참고해 에러를 해결했다. https://kka3seb.tistory.com/1153 DT_TOOLCHAIN_DIR cannot be used to evaluate LIBRARY_SE..

iOS 개발

[iOS 개발] UserDefaults, KeyChain이란?

UserDefaults userdefaults에도 데이터를 저장할 수 있지만, 여기에 저장되는 값은 단순히 info 파일에 키-값 쌍을 텍스트로 저장하는 형식이다. 따라서 OS를 탈옥하면 내용물을 볼 수 있다는 문제가 있음. -> 보안이 필요한 데이터에는 적합하지 않음 이를 방지하기 위해 암호나 API Token과 같은 민감한 정보는 KeyChain에 저장하는 것이 좋다. KeyChain이란? keychain은 디바이스 안에 암호화된 데이터 저장 공간을 의미한다. 사용자는 암호화된 공간에 데이터를 안전하게 보관할 수 있다. KeyChain에 저장되어야 하는 내용 - 로그인 및 암호(캐시) - 결제 데이터 - 알고리즘 암호화를 위한 키 Keychain 특징 1. 사용자가 직접 KeyChain을 제거하지 않..

iOS 개발

[iOS 개발] Face ID, Touch ID 기능 개발

새롭게 진행되는 프로젝트에 Face ID와 Touch ID 기능이 존재해서 프로젝트 시작 전 해당 기능을 구현해 보는 시간을 가졌는데, 일단 생각보다 기능 구현 자체는 매우 간단해 놀랐다 우선, 다음과 같이 프로젝트에 LocalAuthentication 프레임워크를 추가해준다. 그리고 ViewController에는 버튼 하나를 만들어 해당 버튼을 클릭했을 때 Touch Id, Face Id를 동작하도록 했다. (시뮬레이터에서는 Touch Id만 동작) ViewController의 코드는 다음과 같다. import UIKit import LocalAuthentication import SnapKit import Then class ViewController: UIViewController { private..

iOS 개발

[iOS 개발] Tuist Static Framework vs Dynamic Framework

Tuist를 활용하면서 터미널에 $tuist graph 명령어를 실행시키면 현재 모듈의 구조가 어떤지 다음과 같이 그림으로 나타내준다. 해당 그림을 살펴보면 Snapkit, Swinject와 같이 노랑색에 가까운 모듈이 있고, Alamofire, Then과 같이 빨간색에 가까운 모듈이 존재한다. iOS에서의 프레임워크의 종류는 다음과 같이 두가지가 존재한다. 1. Static Framework: Do not embed(복사) 2. Dynamic Framework: Embed(참조) 위 그림에서 빨간색 모듈은 Static Framework, 노란색 모듈은 Dynamic Framework를 뜻한다. static & dynamic 차이점 - 차이점은 컴파일된 코드를 참조하는 방식이다. (프레임워크 생성 시 디..

iOS 개발

[iOS 개발] Library not loaded: @rpath/Swinject-Dynamic.framework/Swinject-Dynamic 오류 해결

시뮬레이터로 동작되던 앱을 디바이스에서 실행시켰을 때 다음과 같은 에러가 발생했다. Library not loaded: @rpath/Swinject-Dynamic.framework/Swinject-Dynamic 해당 에러는 다이나믹 프레임워크를 임베디드 시켜주지 않아서 발생한 현상이다. 따라서 다음 사진과 같이 Dynamic Framework가 "Do Not Embed" 상태라면 "Embed & Sign"으로 바꿔주면 문제가 해결된다. 만약, 그래도 빌드가 되지 않는다면 다음 링크를 참조하면 될 것 같다. https://velog.io/@yujinj/iOS-Library-not-loaded

회사

compositional layout "dequeueReusableSupplementaryView' cannot be resolved without a contextual type" 에러

compositional layout 에서 dequeuereusablesupplementaryview를 사용하면 다음과 같은 에러가 자주 일어나는데 명확한 이유를 알려주지 않는다... 그냥 일반적인 에러도 저렇게 나타내주는거 같은데 일단 내가 경험한 것은 headerview에 viewmodel이 존재하지 않는데 viewmodel을 대입시키려고 할 때 저런 에러가 나왔다.

Clean Architecture

[Clean Architecture] iOS Repository Pattern이란?

Repository Patten이란? 간략하게 말아서 데이터 출처(로컬 db인지, 원격 db인지)와 관계 없이 동일 인터페이스로 데이터에 접속할 수 있도록 만드는 것을 Repository Pattern이라고 한다. MVVM으로 따지면 ViewModel 밑에 Repository라는 계층을 하나 더 두어서 ViewModel이 오직 비즈니스 로직에만 집중할 수 있게 한다. (데이터를 로컬과 서버 중 어디서 가져올지, 또 어떻게 가공할지는 Repostitory가 하기 때문입니다.) 그리고 CleanArchitecture로 가정하면 Domain 계층의 UseCase 밑에 Repository라는 계층을 하나 더 두어, Usecase가 오직 비즈니스 로직에만 집중할 수 있게 한다. 장점을 정리하면 다음과 같다. Re..

bamtorii
bamtori