iOS (32) 썸네일형 리스트형 Tabbar Items 레이아웃 충돌 배경HowManySet 개발중에 운동의 세트별 무게와 개수를 입력하는 페이지가 존재합니다.해당 페이지에는 텍스트필드가 여러개 존재하는데요. 이전 버전에서는 텍스트필드를 일일히 클릭하여 입력할 수 있었습니다.이 불편함을 경험하고 유저 사용경험을 개선하기 위해 텍스트필드끼리 이동할 수 있도록 이전,다음,완료 버튼이 담긴 accessoryView를 키보드에 배치하도록 구현했습니다.accessoryView에 버튼을 정렬하기 쉽도록 toolbar 클래스를 사용하여 넣도록 구현했습니다. 문제발생텍스트필드를 클릭하면 키보드가 올라오는데 이때 레이아웃 충돌 로그가 발생했습니다.Unable to simultaneously satisfy constraints. Probably at least one of the cons.. Reactor Kit View를 채택하는 VC에 bind(reactor:) 메서드가 실행되지 않음 문제 상황- View를 채택하는 VC에 bind(reactor:) 메서드가 실행되지 않음원인 분석- Coordinator에서 push메서드에 reactor를 생성자에 주입하니 메서드가 실행되지 않았음 /// 운동 편집 화면 전체 화면으로 push func pushEditExcerciseView(routineName: String) { let reactor = EditExcerciseViewReactor(routineName: routineName) let editExcerciseVC = EditExcerciseViewController(reactor: reactor) navigationController.pushViewController(ed.. Github Action으로 CI 구성하기 기존에 했던 프로젝트를 하면서 원격 develop 브랜치에 머지할 때 빌드가 안되는 코드들이 들어오는 경우가 많았습니다.매번 머지할 때 마다 빌드 체크하고, 로컬에서 원격으로 올라오지 않은 코드들 검수하는 과정이 필요했었습니다.이것 또한 많은 시간이 들었는데요..이번에 출시하는 앱을 만들면서 비즈니스 로직을 더 탄탄하게 만들기 위해 테스트코드를 구성하고,빌드 체크를 매번 진행하여 안정성을 높일 수 있게 CI를 구성하기로 했습니다. CI란?CI란 Continuos Integration의 줄임말로 해석하면 지속적 통합입니다.여러 개발자들이 같은 애플리케이션의 다른 기능을 동시에 작업합니다.개발된 각각 기능들을 특정한 날짜를 지정하여 모든 코드를 병합하는 경우, 충돌 해결이나 코드 수정 등 많은 시간을 소모하.. 왜 POP? (WWDC15) OOP에서의 클래스 특성캡슐화: 관련 데이터와 동작들을 모아볼 수 있다.접근제어: 코드 외부와 내부를 구분짓는 벽을 세워 외부에서의 접근에 제한을 둘 수 있다. 이를 통해 정보에 대한 불변성을 유지할 수 있다.추상화: 추상화를 통해 관련시킬 수 있는 정보들을 모아둔 클래스를 만들 수 있다.NameSpace: 소프트웨어가 커지면서 발생할 수 있는 충돌을 대비하는데 도움을 주는 네임스페이스를 제공, 여기서 네임스페이스는 내부 식별자에 사용될 수 있는 유효 범위를 제공하는 선언적 영역Expressive Syntax: 클래스를 통해 프로퍼티, 메서드등의 흐름으로 이해하기 쉬운 구문을 작성할 수 있다.Extensibility(확장성): 작성된 코드에 언제든지 기능을 추가할 수 있다.위 특성을 struct와 enu.. [트러블 슈팅] DiffableDataSource 컬렉션 뷰에 다양한 데이터모델을 사용하기 😐 문제 배경프로젝트 진행중에 CollecionView를 중복으로 사용하면서 발생하였습니다.검색 페이지예매내역 더보기 페이지찜 목록 더보기 페이지 위 3개의 View는 모두 다른 ViewController입니다.그리고 안에 있는 컬렉션 뷰는 각 VC에 생성 및 구성작업을 했습니다.구현하고 보니, 컬렉션뷰의 디자인이 동일한데 각 VC에서 생성하다보니 중복되는 느낌을 받았고, VC에 코드줄이 길어지면서 가독성도 떨어지게 되었습니다.-> 그래서 이를 하나의 컬렉션 뷰로 파일 분리하여 구성한 다음 재사용하면 VC가 더 간결해지겠다고 생각했습니다! 🤔 상황재사용 하기전에 각 컬렉션 뷰의 공통점이 있는지 파악을 먼저 했습니다.1. 3개의 컬렉션 뷰 모두 DiffableDataSource를 사용했습니다.2. 3개.. [트러블 슈팅] CoreData의 Entity Attribute의 타입을 변경한 경우 배경JSON으로 받아온 데이터 항목중 하나를 다른걸로 변경하고자 했습니다.위 사진은 JSON 항목중 일부를 나타낸 사진입니다기존에 CoreData에 time_last_update_utc인 String 타입 문자열을 저장하다가, time_next_update_unix로 항목을 변경해야 했습니다. 그래서 Int타입을 받기 위해 Attribute의 updateTime 타입을 String -> Integer 64로 변경했습니다.CoreData를 불러오는 메서드도 모두 Int형식으로 받도록 수정하였습니다. ⚠️ 문제발생 CoreData에 저장된 updateTime 속성을 Int타입으로 값 갱신하는 과정에서 치명적인 오류가 발생했습니다. Persistent store migration failed, missin.. 메모리 사용량 확인을 위한 vmmap vmmap(Virtual Memory Map)vmmap이란 Xcode, macOS에서 사용하는 가상 메모리 매핑 도구입니다.특정 프로세스의 메모리 사용량을 맥 가상 메모리로 매핑하여 메모리 사용량을 보여줍니다.터미널에서 사용하며, 실 기기의 메모리가 아니라 맥 기반 메모리를 매핑하게 됩니다. vmmap 사용방법Xcode에서 빌드 후 특정 프로세스중에서 확인하기 위해 break point를 걸거나 Debug Memory Graph를 열면 좌측에 프로젝트명 PID 번호가 나타나게 됩니다.터미널에서 해당 PID를 이용하여 vmmap을 실행할 수 있습니다.$ vmmap PID_DATA, _TEXT: 실행코드 및 전역변수malloc: 힙 영역malloc guard page: 힙 오버플로우를 방지용 영역stac.. UICollectionViewLayout과 UICollectionViewFlowLayout CollectionView는 TableView와 다르게 layout을 설정해주지 않으면 생성시 오류가 발생합니다.CollectionView 생성자에서 인자로 받는 UICollectionViewLayout이 있습니다.왠만한 레이아웃은 UICollectionViewLayout으로 할 수 있지 않을까? 싶었는데 CollectionView 생성 인자로 모두 들어갈 수 있다는 점에서 많이 헷갈렸습니다.이번 기회에 정리해보고자 합니다. UICollectionViewLayouthttps://developer.apple.com/documentation/uikit/uicollectionviewlayout UICollectionViewLayout | Apple Developer DocumentationAn abstrac.. 이전 1 2 3 4 다음 목록 더보기