iOS 6

[UIKit] jpegData(compressionQuality: )에 대한 고찰과 트러블슈팅 ☄️

웹소소 사진소소 1차 QA에서 발견했던 버그가 있었다. (참고로 사진소소는 웹소소 사일로 중 하나로 난 피드 내 이미지 첨부 기능을 구현해야했다.... 흑흑 어려워😞)피드를 수정할 때마다 이미지를 수정하지 않았는데도 이미지의 화질이 계속 저하되는 상황이 발생했다.해당 버그를 수정하기 위해 UIKit에서의 이미지 압축 방식에 대해 처음부터 공부해보기로 결정했다! 우선, 버그부터 해결해보자서버에 보내야 하는 이미지의 최대 사이즈는 0.25MB였다.근데 원본 이미지 사이즈가 이미 0.25MB보다 작으면 압축 과정은 필요없이 서버에 전송하면 되는데 ..내가 이 로직을 생각 못했다 흑흑 if let originalData = image.jpegData(compressionQuality: 1.0) { le..

iOS/UIKit 2025.07.10

이미지를 언어별로 다르게 적용시키고 싶다면? Image Localizing ✨

사이드 프로젝트를 진행하다가 이미지를 한국 / 영어 언어에 따라 다르게 적용해야 하는 상황이 발생했다. (사실은 튜토리얼 뷰를 따로 만들어서 뷰의 크기에 맞게 조정되도록 해야하는데 .. 이건 백로그로!우선 릴리즈 기한을 맞추기 위해 이미지 통째로 넣어두기로 했다. ) 이 상황을 마주하고.. 음 텍스트는 로컬라이징을 할 수 있는데 이미지는 어떻게 하지? 란 생각이 들었다. 해결방법생각보다 간단했다. 로컬라이징 하고 싶은 이미지를 선택하고 우측 네비게이션의 Image Set을 클릭하면 위 사진처럼 Localization이라는 탭이 보일 것이다. 이를 클릭하면 위 버튼들이 생길 것이고, 로컬라이징 하고 싶은 언어들을 선택해주면 된다. 나는 영어와 한글 버전 두가지의 이미지를 추가할 것이기 때문에 두 버튼 모..

iOS/SwiftUI 2025.07.07

[UIKit] Command SwiftCompile failed with a nonzero exit Code 오류 해결

1. 문제상황댓글 안에 있는 드롭다운 버튼을 클릭했을 때 Input 이벤트 로직을 정의하고 있었다. 드롭다운 내에는 top, bottom 두개의 버튼이 들어가있고, 내 댓글인지 아닌지의 여부도 반영하면 총 4가지의 분기처리를 해주어야 했다. Input { let commentDropdownDidTap: Observable}Output { let showCommentSpoilerAlertView: Observable Observable, Int)> let showCommentImproperAlertView: Observable Observable, Int)> let myCommentEditing: Observable let showCommentDeleteAlertView: Observabl..

iOS/UIKit 2024.11.15

[RxSwift] throttle과 debounce의 차이점을 알아보자!

사이드 프로젝트 개발 중, 코드리뷰로 버튼 input 이벤트에 대해 " throttle 말고 debounce 를 사용한 이유를 알 수 있을까요 ?! "라는 리뷰를 받았었다.음 .. 그러게요? 나 왜 debounce를 사용했지? throttle과 기능적 차이점은 어떤 게 있을까?잊지 않기 위해 글로 남겨보고자 한다.  debounce관찰 가능한 항목을 다른 항목을 방출하지 않고 특정 시간대를 경과한 경우에만 방출합니다.only emit an item from an Observable if a particular timespan has passed without it emitting another item. 내가 적용한 코드를 예시로 살펴보자. ViewModel 에서 Input으로 좋아요 버튼 클릭 이벤트를..

iOS/RxSwift 2024.10.17

[SwiftUI] Non-constant range: not an integer range

사이드 프로젝트 개발하는 도중, 서버에서 받아온 유저들의 랭킹 리스트들을 스크롤뷰에서 보일 수 있게 하는 과정에 Non-constant range: not an integer range 라는 경고문을 맞딱드렸다. homeViewModel의 totalRank를 RankingView에서 rankingList로 받아와 아래의 ForEach문에서 rankingList.indices 를 통해 인덱스로 접근하여 해당 배열을 순회하도록 했다.해당 경고가 어떤 의미의 경고인지 알아보고, 어떻게 하면 경고를 없앨 수 있을지 알아보자! 왜 ForEach(rankingList.indices)를 사용했을까?이유는 단순했다. 해당 스크롤뷰의 각 row에는 유저의 현재 등수, 유저의 닉네임, 점수 총 3개를 보여줘야 했다.이때 ..

iOS/SwiftUI 2024.06.12

[UIKit] ImageView.contentMode에 대해 알아보자!

자꾸 까먹는 나를 위해 .. !ImageView의 contentMode에 있는 scaleAspectFit, scaleAspectFill, scaleToFill에 대해 정리해보고자 한다!scaleAspectFit- 이미지 비율을 유지하면서 뷰의 사이즈에 맞게 이미지를 늘리는 옵션.- 이미지가 뷰를 꽉 채우지 못해서 남는 부분은 투명 처리가 된다. scaleAspectFill- 이미지 비율을 유지하면서 뷰의 사이즈에 맞게 이미지를 꽉 채우는 옵션.- 이미지의 어떤 부분은 잘려서 보일 수도 있다. scaleToFill- 전체 이미지가 다 나올 수 있도록 필요하다면 비율을 깨뜨리면서 뷰의 사이즈에 맞게 이미지를 꽉 채우는 옵션.- 이미지는 다 나오나 이미지의 비율이 깨질 수 있다.  정리 비율 유지화면 꽉 채움..

iOS/UIKit 2024.05.29