iOS 개발

iOS 개발

[iOS 개발] iOS 앱 용량 줄이기

이번에 회사에서 앱을 출시했는데, 이전 앱과 용량이 거의 2.5배 차이가 나게 되었다거의 비슷한 기능이고, 에셋이나 코드량도 별로 차이가 없는데 뭔가 이상해서 용량을 한번 살펴보고자 했다 앱 용량을 확인했더니(앱 용량 확인은 아래 첨부한 링크 방법 사용)폰트가 용량을 어마어마하게 차지하고 있었다..기존에, 국가별로 다른 폰트를 적용할 거란 내용이 있어서 미리 폰트를 넣어뒀는데, 이게 거의 70mb 이상을 차지하고 있었다.다행히 해당 기획이 취소되어 해당 폰트들이 필요가 없어서 삭제를 해서 용량을 줄일 수 있었다.근데 좀 의문이 든게 처음에는 .otf , .ttf 등 확장자 때문에 용량이 확 차이가 나는 건 줄 알았다.사진만 보더라도 Pretendard는 otf 타입이고 1.6MB 용량을 차지하는 반면,P..

iOS 개발/UIKit

[UIKit] FlexLayout & PinLayout 적용

회사에서 시간이 남아서 리팩토링 할 코드가 뭐가 있을지 고민하던 중 이전에 들어본 FlexLayout, PinLayout에 대해 궁금증이 생겨서 찾아보게 되었다.(현재 진행하고 있는 기존 프로젝트들은 Snapkit, Then을 활용해 레이아웃을 구성하고 있다.) FlexLayout과 PinLayout과 관련된 자료를 조사해보던 중 해당 라이브러리가 UIStackView 보다 8배에서 12배 더 빠르다는 장점이 있다는 것을 알게 되어 시간이 남는 김에 이를 적용해보고자 했다. 우선, 해당 코드는 자료 검색하고 한두시간 만에 만든 화면이라 이런식으로 레이아웃을 구성한 것이 맞는지는 모르겠다...// Snapkit을 활용한 기존 코드override func addViews() { super.add..

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..

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