IOS

    [iOS] Alamofire 네트워크 레이어 설계2. 토큰관리(Interceptor)

    Alamofire에서 토큰 갱신, 에러 처리등을 효율적으로 하기위해 제공해주는 Interceptor라는 프로토콜이 존재합니다. Interceptor는 서버에 요청을 보내기 전에, 중간에 가로채서 어떠한 작업을 수행할 수 있게 해주고 요청의 결과로 Error가 발생한 경우 요청을 다시 할 것인지를 처리할 수 있게 해줍니다. - adapt(): API호출 전에 URLRequest를 가로채서 어떤 작업을 할 수 있도록 해주는 메서드 - retry(): API호출의 결과로 Error가 발생한 경우 요청을 다시 할 것인지 처리하도록 해주는 메서드 Alamofire가 제공하는 RequestIntereptor의 본문은 다음과 같습니다. 이를 그림으로 구조를 그려보면 아래와 같습니다. 만약 토큰을 활용해 서버와 통신하..

    [iOS] 커스텀 액티비티 인디케이터 제작 feat. RxSwift

    커스텀 액티비티 인디케이터 iOS 앱 개발에서 사용자에게 작업이 진행중임을 알리는 것은 중요합니다. 기본 제공되는 액티비티 인디케이터가 존재하지만 때론 앱의 디자인과 더 잘 어울리는 커스텀 액티비티 인디케이터를 만들어야 할 경우가 많습니다. 네트워크 통신을 진행할 때 통신중 또는 로딩중인 경우 또는 어떤 작업(오래 걸리는 작업)을 진행중일 경우 사용자에게 알려줘야합니다. 그렇지 않으면 사용자는 앱이 멈춘건지, 로딩중인건지, 기다려야하는지 판단하기 힘듭니다. 이럴 때 ActivityIndicator는 사용자에게 프로그램이 정확히 작업중이라는것을 알 수 있게 해줍니다. 이런 커스텀 액티비티 인디케이터를 어떻게 만들었고 네트워킹과 어떻게 연결하여 사용하였는지 기록해보겠습니다. 앞서 해당 프로젝트에서는 Alam..

    [iOS] - UICollectionView Compositional Layout

    앱스토어 앱. CompositionalLayout을 사용하지 않는다면 테이블뷰 내부의 셀 내부의 컬렉션뷰 내부의 테이블뷰... 이런 복잡한 레이아웃을 보완하기위해 Compositional Layout의 등장. 전체 하나의 CollectionView로 섹션별 다양한 레이아웃을 적용 가능 구성 하나의 Layout 내부의 여러 Section이 포함되며 Section은 여러 Group을 포함한다. Group은 Item을 갖고있다. 이들의 크기를 지정해주면 된다. CollectionView의 item 사이즈를 정하는 방법(NSCollectionLayoutDimension) .absolute - 고정 크기 .estimated - 런타임에 크기가 정해지는경우(예상크기) .fractional - 비율(컨테이너에 대한 ..

    [iOS] Alamofire 네트워크 레이어 설계1. 에러처리 (feat. Rx)

    https://ios-development.tistory.com/731 [iOS - swift] 1. Alamofire 사용 방법 - Network Layer 구현 (Moya 프레임워크처럼 사용하는 방법) 1. Alamofire 사용 방법 - Network Layer 구현 (Moya 프레임워크처럼 사용하는 방법) 2. Alamofire 사용 방법 - 토큰 갱신 방법1 (Interceptor, adapt, retry) 3. Alamofire 사용 방법 - 토큰 갱신 방법2 (AuthenticationCredential, ios-development.tistory.com 해당 게시글을 토대로 구현해본 네트워크 레이어를 기록해봅니다. 부족한 점이 있다면 알려주시면 감사합니다. 1. 에러 처리 * HTTP통신은..

    [iOS] - IntrinsicContentSize, InvalidateIntrinsicContentSize()

    IntrincContentSize 본질적인 컨텐츠 크기 UILabel, UIButton을 autoLayout으로 구현할 때 Width, Height를 지정해주지 않아도 에러가 발생하지 않는 이유는 IntrinsicContentSize프로퍼티에서 컨텐츠의 크기를 계산해주기 때문입니다. UILabel, UIButton, UIProgressView 모두 루트뷰의 leading, top spacing만을 주었습니다. 모두 위치만 지정해주고 크기를 지정하지 않았습니다. UILabel, UIButton은 모두 IntrinsicContentSize프로퍼티가가 Width, Height를 계산해주어서 크기를 정할 수 있지만 UIProgressView는 IntrinsicContentSize로 크기를 알 수 없어서 에러가 ..

    [iOS] - ContentSize(셀 전체) 만큼 커지는 UITableView/UICollectionView

    ContentSize(셀 전체) 만큼 커지는 UITableView/UICollectionView UIButton, UILabel 처럼 contentSize만큼 intrinsicContentSize가 커지도록 적용한 커스텀 테이블뷰/ 컬렉션뷰 입니다. 리스트 전체를 한 번에 보여줘야하는 컴포넌트를 만들 때 유용하게 사용할 수 있습니다. 물론 이렇게 사용하면 재사용 하는 부분이 없기 때문에 UIStackView만을 이용해서 만들 수 있지만 변경된 새로운 값을 보여줘야 할 때 StackView는 변경점을 찾아 수정하고 전체를 업데이트 해줘야 하지만 TableView/StackView는 변경된 값을 바인딩만 시켜주면 끝이라 더 쉽고 효율적입니다, open class IntrinsicContentHeightTab..

    [iOS Error] - [RTIInputSystemClient remoteTextInputSessionWithID:performInputOperation:] perform input operation requires a valid sessionID .feat: RxSwift

    [RTIInputSystemClient remoteTextInputSessionWithID:performInputOperation:] perform input operation requires a valid sessionID UITableViewCell에 위치한 TextField를 선택하면 firstResponder가 되자 마자 바로 위의 에러가 발생하며 resign이 되는 오류였습니다. 구조는 다음과 같습니다 TableView -> Cell -> StackView -> TextField(문제가 되는 부분) UITableView는 내부 컨텐츠 크기만큼 height이 늘어나도록 만들어둔 커스텀 클래스였고 그렇기 때문에 재사용 이슈가 발생하지 않지 않을까 했지만 새로운 값이 바인딩 될 때 재사용이 발생합니다..

    [iOS] - 클릭 이벤트가 발생하지 않는 이유

    사이드 프로젝트를 진행하다 제 하루를 날려먹은 원인을 기록하고자 합니다.. 커스텀 바텀 시트를 구현중이었습니다. 아래의 커스텀 바텀시트를 구현중이었고 닫기의 tap Event를 뷰모델에 바인딩을 했는데 아무리 클릭을 해도 tap 이벤트가 발생하지 않았습니다. 해당 뷰는 이런구조입니다. 뷰컨 - 1커스텀뷰(반투명 배경의 뷰) - 2커스텀뷰(바텀시트뷰) 애니메이션까지 모두 구현했으나 아무리 탭 이벤트가 발생하지않습니다. 그래서 1커스텀뷰에 touchesBegin을 찍어보니 1커스텀뷰까진 터치이벤트가 잘 전달됩니다. 그래서 2커스텀뷰의 레이아웃을 확인해보니 contentView는 내부의 컨텐츠를 스택뷰로 구현해놓은 UIStackView입니다. 2커스텀뷰의 top이 bottom과 같았을테고 event전달이 하위..

    [iOS] Push Notification(3). FCM

    Firebase를 이용해 원격 푸시 알림을 사용해봅니다. Push Notification(1), Push Notification(2)에 PushNotification과 APNs의 내용들을 자세히 정리했기 때문에 추가적인 설명은 넘어가겠습니다. 1. APNs 인증 키를 발급받아야합니다. Apple Developer > 인증서, 식별자 및 프로파일 > 키 키는 계정당 2개가 최대입니다. 키 이름은 원하는대로 생성하고, Apple Push Notifications 를 체크합니다. Continue를 클릭합니다. Register를 선택하고 등록을 완료하면 "Download Your Key" 페이지가 등장하는데, 여기서 우측에 DownLoad버튼을 클릭하면 ".p8" 확장자의 파일이 다운로드됩니다. 여기서 p8..

    [iOS] Push Notification(2). PushNotification 구현

    출처: Kodeco PushNotification Push Notification에 필요한 배경지식은 여기에 정리되어있습니다. PushNotification은 흔히 푸시알림, 푸시 메시지로 일컫는 형태입니다. 앱에서 알림을 보내야 하는 경우가 필요합니다. 새로운 메세지가 왔던가, 새로운 소식을를 전달하던가 Push를 진행하기 위해선 Push Server가 필요하지만.. 여기에선 terminal을 통한 push TEST를 진행해봅니다. 사전 작업 1. Bundle Identifier PushNotification을 사용하기 위해선 Apple Developer계정이 있어야 합니다. Bundle Identifier를 설정해줍니다. 2. Push Notification 사용 설정 해당 Target에 Signin..