디데이 이벤트를 관리할 수 있는 앱을 만들고 앱스토어 심사까지 진행해본 프로젝트 입니다.
제작 기간: 2023.01 ~ 2023.03
참여 인원: 개인 프로젝트
- UIKit / SnapKit
- Realm
- MVP Architecture
목록(메인) | 상세 | 신규/수정 | 설정 |
- 초기에는 수정 화면을 ScollView와 StackView를 사용해 나열하는 방식으로 만들었습니다. 입력하는 기능이 적었기 때문에 불편한 점은 없었지만, 입력 데이터가 추가될 수 있다는 가정하에 Cell 재사용이 가능한 UITableView를 사용하는 것이 좋겠다고 생각해 수정했습니다.
-
UITableViewDatasource 상속 메소드 내에서 Switch문으로 셀을 구분하는 코드를 작성하면서 모든 case를 자동완성 및 항목을 누락시키지 않기 위해 enum을 미리 작성한 뒤, 배열로 만들어 사용했습니다.
코드
//EditPresenter private final let cellList = EditViewController.CellList.allCases
//EditViewController enum CellList: CaseIterable{ case title, date, backgroundColor, backgroundImage, isCircle, memo // isStartCount, repeatCode ... }
-
- 기존에 사용해본 로컬디비인 UserDefaults와 다르게 Class 파일 내 칼럼을 수정/삭제하고 빌드했을때 read하는 부분에서 오류가 발생되었습니다.
-
저장하는 데이터 타입 내 컬럼에 대해 변경사항이 있을 경우에 버전을 올리고 관계 데이터를 추가하는 작업이 필요하다는 점을 알게되었습니다.
코드
- 현재는 스키마버전을 올리는 코드만 사용하고 있습니다.
//EditPresenter let config = Realm.Configuration(fileURL: realmURL, schemaVersion: 5) return try! Realm(configuration: config)
-
- 수정/신규 화면에서 데이터를 저장할 때 Realm 오류가 발생되었습니다.
-
Realm에서 조회한 object는 단순 복제한 값이 아니라, core database에 연동 된 값이라는 것을 확인했습니다.
-
읽어온 값을 바로 수정하면 오류가 나기 때문에, 저장할 인스턴스를 추가하여 수정된 값을 치환한 후 저장하도록 수정했습니다.
코드
//EditPresenter let saveItem = Item() saveItem.id = item.id saveItem.title = editItem.title saveItem.titleColor = editItem.titleColor saveItem.date = editItem.date saveItem.isBackgroundColor = editItem.isBackgroundColor saveItem.backgroundColor = editItem.backgroundColor saveItem.isBackgroundImage = editItem.isBackgroundImage saveItem.isCircle = editItem.isCircle saveItem.memo = editItem.memo == textViewPlaceHolder ? "" : editItem.memo //저장 repository.editItem(saveItem)
-
- iPad에서 UIActivityViewController를 띄웠을때, iOS 16.3.1 버전에서 UIAlertController를 띄웠을때 앱이 죽는 현상이 있었습니다.
-
popoverPresentationController의 위치값을 주기위한 속성을 추가해 해결했습니다.
코드
//DetailViewController alert.popoverPresentationController?.sourceView = button
-
- App에서 사용한 Repository나 클래스 파일을 Widget Extension에 공유하기 위해 그룹 저장소를 사용했습니다.
- 기존에 모든 공용 메소드를 Util 클래스에 넣고 사용했는데, 위젯에서 추가하지 않은 View관련 라이브러리를 import 하고있어 오류가 발생되었습니다.
- Utill 클래스 내 메소드를 세분화하여 분리하고 커스텀 가능한 외부 라이브러리인 Toast-Swift(토스트 메시지 기능)는 삭제했습니다.
- 토스트 메시지 커스텀 클래스 코드: 🔗
- Utill 클래스 내 메소드를 세분화하여 분리하고 커스텀 가능한 외부 라이브러리인 Toast-Swift(토스트 메시지 기능)는 삭제했습니다.