분류 전체보기

끄적끄적

layoutIfNeeded 호출 순서

final class CouponCell: BaseCollectionViewCell { lazy var containerView = TouchableView() private lazy var contentContainerView = UIView() private lazy var stateContainerView = UIView() private lazy var couponImageView = UIImageView() private lazy var couponNameLabel = UILabel().then({ $0.textColor = ColorManager.gray9.color let attributedText = FontManager.body4M.setFont(alignment: .left) $0.at..

끄적끄적

firebase 디버깅 이슈

pod 'FirebaseRemoteConfig' pod 'Firebase/Core' 를 pod install 했더니 디버깅이 되지 않는 이슈가 있었다. pod 'Firebase/Core'를 제거하고 pod 'FirebaseRemoteConfig'만 pod install 했더니 오류 해결..

끄적끄적

[끄적끄적] 순환 참조 발생 부분

private func layout() -> UICollectionViewCompositionalLayout { return UICollectionViewCompositionalLayout { [weak self] sectionIndex, _ in guard let self = self else { return nil } switch sectionIndex { case 0: var itemHeight: CGFloat = 0 if self.viewModel.getDownloadableCouponList().isEmpty { itemHeight = 18 // MARK: - 수정 필요 } else { itemHeight = 112 } . . . } 저번에도 한번 발견했었는데 이 부분에서 강한 참조가 일어나 V..

회고

[회고] 8개월차 iOS 개발자 2023년 회고

연말이고 하니 오랜만에 회고나 한번 써볼까 한다(사실 3개월마다 쓸라켔는데 마지막 회고부터 4 5개월 지난것 같다) 입사한게 엊그제 같은데 벌써 8개월이 넘었다. 다양한 사람들과 다양한 프로젝트들을 하면서 실력이 급상승했다고 느끼긴 하지만, 그에 반해 아직 갈 길이 많이 남았다는 생각도 동시에 든다. 일단 지금은 내가 이전 회고부터 계속 노래불렀던 기획이 대략 2개월 전에 나와서 새로운 앱을 개발하는 일을 하고 있다. 솔직히 이전까지 간단한 UI 수정이나 모델 수정 후 통신 로직 좀 손보는게 다였던 나로써, 나보다 1년 일찍 들어온 사수 개발자 분과 함께 단둘이 앱의 모든 기능을 구현해야 된다는게 조금은 두려웠다. 그러나 다행히 좋은 개발자 분을 만나서 그 분이 먼저 작성한 코드를 보고 익혔고, 그 덕분..

끄적끄적

[끄적끄적] Keychain 관련 고민

[초기조건] 아이폰 15 / dlqkawns 아이디로 간편비번을 설정했던 사용자 [아이폰 15 기기 자체에 저장할 값] dlqkawns 아이디 파이어베이스 UUID: 비번 [같은 기기/ 같은 아이디로 로그인] 기기 자체에 dlqkawnsUUID: 123 이런 형태로 저장되어있음 앱 삭제(기기 자체에 A: 123은 여전히 저장) 앱 재설치(미로그인 상태) 기존 dlqkawns으로 로그인 Dlqkawns UUID를 파이어베이스에서 가져옴 기기에 저장된 dlqkawnsUUID: 123과 파이어베이스에서 가져온 UUID 비교 동일하면 해당 아이디는 간편비번이 존재하는 것 [같은 기기/ 다른 아이디로 로그인] 3까지 동일 다른 아이디 ufintec로 로그인 Ufintech UUID를 파이어베이스에서 가져옴 기기에..

Tuist

[Tuist] One of the two will be used. Which one is undefined 에러문 출력

objc[57278]: Class _TtC9Alamofire21CompositeEventMonitor is implemented in both /Users//Debug-iphonesimulator/Alamofire.framework/Alamofire (0x10786daa0) and /Users//Debug-iphonesimulator/Service.framework/Service (0x10582d0f0). One of the two will be used. Which one is undefined. Tuist를 사용해 앱을 빌드했을 때 다음과 같은 에러들이 출력되었다. 빌드가 되지 않는 것은 아니지만 저런 에러가 콘솔창을 다 뒤덮을 정도로 많이 발생해서 해결을 해야겠다고 생각했다. 우선 다음과 같은 오류..

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

bamtorii
'분류 전체보기' 카테고리의 글 목록