일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
31 |
- Swift5
- SWIFT
- defaultContentConfiguration
- UIListContentConfiguration
- alamofire
- interceptor
- QoS
- RxCocoa
- customButton
- swift6
- distinctUntilChanged
- .filled
- uibutton.configuration
- UIKit
- shareextension
- RxSwift
- observe(on:)
- RequestInterceptor
- 라이징캠프
- UICollectionViewListCell
- flatmap
- Moya
- 개발블로그
- iOS교육
- ReactiveX
- IOS
- ContentMode
- Xcode
- 컴공선배
- cellForRowAt
- Today
- Total
목록Xcode (10)
RB의 iOS 개발 이야기

현재 진행중인 프로젝트 BESTWISH에서 Share Extension 기능을 사용하여,외부 플랫폼의 상품 정보를 베스트위시 앱에 저장하는 기능을 구현했습니다. 기능을 구현하면서 겪었던 Keychain Sharing 관련 내용을 공유하고자 포스팅을 작성하게 됐습니다. 1. 문제 상황기능 요구사항은 아래와 같습니다.유저가 사파리나 다른 쇼핑 앱에서 상품 링크를 공유하면Share Extension이 실행되어 상품 정보를 추출하고이 데이터를 Supabase 서버에 저장해 Product 테이블에 상품이 추가되어야 하는 상황문제는 여기서 발생..! 메인 앱에서는 로그인된 사용자 정보(Session)를 Keychain에 저장해두었는데,Share Extension에서 Supabase에 저장하려면 같은 Session ..

최근에 진행 중인 내일배움캠프 최종 프로젝트 베스트위시 iOS 앱에서 홈 화면의 플랫폼 필터링 기능을 구현하다가 예상치 못한 UI 깨짐 이슈를 겪어 공유하고자 포스팅합니다! 1. 문제 상황먼저 제가 구현한 레이아웃 구조입니다.홈 화면(위시리스트) → 쇼핑몰 위시리스트 섹션필터 영역 → Cell 내 UIButton각 셀 안에 플랫폼 이름을 표시하는 버튼(UIButton) 배치버튼의 높이는 고정(33), 가로 너비는 타이틀 길이에 따라 유동적 변경 필요문제는 버튼의 타이틀이 길어지면 버튼이 두 줄 이상으로 줄바꿈이 발생하면서버튼의 캡슐 모양이 깨지고, 컬렉션 뷰 셀 레이아웃도 깨졌다는 점이었습니다. (하단 이미지 참고) 2. 원인 분석처음에는 UIButton.Configuration.filled() 와 co..

안녕하세요. 오늘은 오랜만에 RxSwift를 다시 공부해볼 겸 곰튀김 님의 강의 영상을 시청하던 중 전혀 모르고 있던 꿀팁을 알게되어 공유드릴 겸 글을 작성하게 되었습니다! 바로 확인해보시죠! 먼저 간단하게 어떻게 메모리 누수를 일으키는지 코드를 살펴 보겠습니다. private func downloadJson(_ url: String) -> Observable { return Observable.create() { f in DispatchQueue.global().async { let url = URL(string: url)! let data = try! Data(contentsOf: url) let json = String(data: data, encoding: .utf8) DispatchQueue.m..

이번 포스트 또한 이전 포스트에서 이어지는 글 입니다! 이전 포스트를 읽고 오시면 이해하시는데 더욱 도움이 될 것 같습니다 ㅎㅎ https://rb-ios.tistory.com/13 Rx가 지원하는 스케줄러(schedulers)의 종류들 이번 포스트는 바로 직전의 포스트의 다음 글로 내용이 이어집니다! 이전 포스트를 확인하고 넘어오시는 것을 추천드립니다 ㅎㅎ https://rb-ios.tistory.com/12 Alamofire RequestInterceptor 사용해보기 로그 rb-ios.tistory.com 직전 포스트에서 Rx의 Scheduler에 대하여 알아봤습니다. 그런데? .observe(on: SerialDispatchQueueScheduler.init(qos: .background)) 일단..

로그인 같은 작업을 수행하게되면 대개 로그인 API에서 accessToken과 refreshToken을 반환하게된다. 이러한 토큰들은 앱 내의 여러 작업을 수행하는 API를 요청할 때에 필요한 값들인데 오늘은 회원탈퇴를 구현하는 부분에서 구현하는데에 시간이 꽤 많이 소요된 부분을 정리하고자 한다. 회원탈퇴를 요청할 때에 내가 사용중인 API는 요청 바디는 없으며 요청 헤더로 응답받은 accessToken과 고유 key를 넣게된다. 회원탈퇴 API를 요청하는 부분에서 고려해야할 상황이 있는데 로그인 후 앱을 사용하다가 token이 만료되는 상황이 있을 수 있다는 것이다. 대개 흔치 않은 경우지만 개발자는 사용자의 모든 경우의 수를 생각하고 개발해야 하기에 회원탈퇴 시 token이 만료되는 상황을 고려해보았..

iTunes Search API를 활용하기 오늘은 애플의 iTunes Search API를 활용하여 기본 앱인 앱스토어의 검색 기능을 구현하던 중 메모리 누수와 앱 정지 이슈를 경험하게 되어 작성하게 되었습니다. 예제는 RxSwift를 기반으로 코드를 작성하였고 RxSwift를 학습하면서 예제를 구현하고있어 문제를 파악하고 해결하는데 시간이 꽤 걸렸던 것 같습니다. 원하는 기능 (실제 앱 스토어 기능 구현) 초기 화면 - 검색결과가 없는 (당연하게도) 상태 단어 검색 중 - 검색 중에도 검색 결과는 나타나지 않음 검색 버튼 클릭 - 검색 창의 단어로 API를 요청하여 검색 결과를 받아 테이블 뷰에 보여짐 취소 버튼 클릭 - 모든 결과와 검색 창의 단어도 사라지며 초기 상태로 돌아옴 검색 단어 수정 - 검..

Observable vs Subject Observable은 이벤트를 방출하는 역할을 담당하고 Observer는 Observable을 구독하며 이벤트를 받아서 처리하는 역할을 담당합니다. 여기서 Observable은 새로운 값을 받을 수 없다. 그렇다면 Observer 역할을 하는 녀석은 누구일까? 글의 제목에서 유추할 수 있듯이 Observer 역할을 하는 친구가 Subject입니다. Subject의 RxSwift 문서를 확인해보면 Observable을 상속받고 있고 ObservavleType을 채택하고 있습니다. 그렇기에 정확히는 'Observer 역할을 하는 친구가 Subject이다.' 라는 말 보다는 'Observable과 Observer의 역할을 모두 가지고 있는 친구가 Subject이다.'가 ..

안녕하세요! 오늘 다뤄볼 내용은 기존에 사용했던 tableView, collectionView를 살펴보고 더 편한(?) 새로운(?) 최신의 기술들을 한번 끄적여볼까 합니다 ㅎㅎ 가장 먼저 기볍게 tableView 먼저 보겠습니다. 그럼 바로 확인해보도록 하겠습니다! 기존의 TableView와 CollectionView 이해를 돕기 위한 예제 코드입니다! 그대로 복붙하시면 컴파일 런타임 오류가 일어나고 문법적으로도 잘못된 문법도 있습니다! storyboard base가 아닌 code base의 코드들입니다. import UIKit import SnapKit class SimpleViewController { let forwards = [Player(name: "Haaland", position: "Forw..