iOS 개발

iOS 개발/UIKit

[UIKit]양쪽 cornerRadius가 다른 cell 구현

그림과 같이 분리선을 기준으로 왼쪽 사각형의 좌측 모서리는 cornerRadius 16, 오른쪽 모서리는 cornerRadius 8을 줘야 되는 디자인이 있었다. 특정 모서리에만 cornerRadius를 주는 것은 그리 어렵지 않아서 이것도 그냥 내장함수같은 게 있겠지? 했으나(내가 못 찾았을지도..) 그런 함수는 존재하지 않았다.. 그래서 일단 구글링을 통해 필요한 함수들을 UIBezierPath + Extension,  UIView+Extension에 각각 추가해줬다.extension UIView { func roundCorners(leftTop: CGFloat = 0, rightTop: CGFloat = 0, leftBottom: CGFloat = 0, rightBottom: CGFloat = ..

iOS 개발

[iOS 개발] Interceptor란?

Interceptor란? 서버에 요청을 보내기 전에, 중간에 가로채서 어떤 작업을 한 뒤 다시 서버로 보내는 역할 Alamofire를 사용하면 RequestIntercepter 프로토콜을 준수한 클래스의 인스턴스를 request에 실어서 보내면 동작. - adapt(): API 호출 전에 urlRequest에 관한 처리를 가로채서 적용하는 메서드 - retry(): API 호출 결과가 Error인 경우, Error가 발생한 API를 다시 호출한것인지를 적용하는 메서드 참고: https://ios-development.tistory.com/730?category=899471 Interceptor 사용 예시 사용자가 access Token을 이용해 API통신을 할 때 401 에러가 발생하는 경우가 있다. (..

iOS 개발

[iOS 개발] 브랜치 전략 세우기

프로젝트를 진행하면서 브랜치 전략에 대해서 생각을 해볼 기회가 생겼다 기존에 깃과 브랜치에 대한 개념이 매우 부족했었는데 이번 기회에 해당 부분의 지식들도 많이 습득할 수 있었던 좋은 기회였던 것 같다. 프로젝트에 적용한 브랜치 전략은 다음과 같다. 브랜치 전략 Master branch - 제품으로 출시되는 브랜치 입니다. - 배포(Release) 이력을 관리하기 위해 사용 합니다. Develop branch - 다음 출시 버전을 개발하는 브랜치 입니다. - ‘Develop’ 브랜치를 기반으로 개발을 진행 합니다. Feature branch - 신규 기능 개발을 위한 브랜치 입니다. - ‘Develop’ 브랜치에서 분기하여 작업 후 작업이 완료되면 Develop 브랜치에 병합(merge) 후 Featur..

iOS 개발

[iOS 개발] OAuth 2.0이란?

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

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

bamtorii
'iOS 개발' 카테고리의 글 목록