FilterView 개발일지 (CI - Github Action)
구현해야 하는 UI
환경 및 고려사항
iOS 13.0 이상
1. 바텀시트 형태로 나타날 것
2. 필터 적용을 눌러야 적용되며, 유저가 누를 경우 셀 색상이 변하고 다른 부분을 터치할 때 바텀 시트가 내려가며 변경사항이 적용되지 않음
구현에서 주요하게 사용한 것
ReactorKit과 Realm
Memento Pattern의 아이디어
어려웠던 점들
1. iOS 13을 최소 버전으로 하고 있어서 UISheetPresentationController을 사용할 수 없음.
-> 요구사항에 맞게 구현 완료
2. Realm을 처음 도입하면서, 2개의 서로 다른 인스턴스가 싱크가 자동으로 맞춰지는 점
-> 2번 문제상황에 별도로 기술
3. Relam의 경우 enum타입을 저장할 수 없음
-> 아래 모델처럼 enum을 string으로 바꿔서 적용하는 스킬 적용
🐬 모델 🐬
import Foundation
import RealmSwift
public class FilterLocation: Object {
// ✏️ NOTE: - 지역이 늘어나면 "_" replace "/" 자동화 필요.
public enum LocationType: String, CaseIterable {
case 서울 = "서울"
case 경기 = "경기"
case 인천 = "인천"
case 충청_대전 = "충청/대전"
case 전라_광주 = "전라/광주"
case 경북_대구 = "경북/대구"
case 경남_부산_울산 = "경남/부산/울산"
case 강원 = "강원"
case 제주 = "제주"
}
@Persisted(primaryKey: true) private var typeString: String
public private(set) var type: LocationType {
get { return LocationType(rawValue: typeString) ?? .서울 }
set { typeString = newValue.rawValue }
}
@Persisted public var isSubscribe: Bool
convenience init(type: LocationType, isSubscribe: Bool = false) {
self.init()
self.type = type
self.isSubscribe = isSubscribe // 테스트코드 작성하다가 이거 빠진거 발견함 ㅠㅠ
}
}
🚨2번 문제상황🚨
let instanceA = FilterLocation(type: .제주)
let instanceB = FilterLocation(type: .제주)
try! relam.write {
instanceA = .서울
}
👉 print(instanceA) // 서울
👉 print(instanceB) // 서울
// A만 바꿨음에도 B도 변경된다.
// 원인: Relam Browser를 통해 확인한 결과 둘이 동일한 릴레이션을 참조.
해결방법
객체를 언두/리두 할 수 있도록 객체 자체를 히스토리로 처리. 메모리 사용량과 트레이드 오프
class MementoFilterLocation: FilterLocation { }
사용자가 저장 버튼을 클릭하지 않는다면 Memento 패턴에서의 recover과정을 수행하여 데이터를 덮어씌움
✅ CI - Github Action ✅
CI를 위해 Github Action을 선택한 이유는?
이전에 Bitrise를 통해 CI를 학습했으나, Github하나로 통합하기 위함
Bitrise(CI) + fastlane(CD) -> Github 하나로 통합!
✅ 아래 문서 및 구글링을 통해 간단히 시도
https://docs.github.com/en/actions
해당 프로젝트에 바로 적용하면 깃이 지저분질 수 있으므로 개인 프로젝트로 private으로 따로 파서 연습
최대한 간단하게 적용했으며, 필요한 경우 추가적인 부분은 그때 적용하고자 함.
name: CI
on:
push:
branches: [ feature/lgvv/feature ]
pull_request:
branches: [ main ]
jobs:
build:
runs-on: macOS-latest
steps:
- uses: actions/checkout@v1
- name: BlackCatFilter
run:
xcodebuild clean test -project BlackCat.xcodeproj -scheme BlackCat -destination "platform=iOS Simulator,name=iPhone 12,OS=latest" CODE_SIGN_IDENTITY="" CODE_SIGNING_REQUIRED=NO ONLY_ACTIVE_ARCH=NO
무료플랜 다 씀.
'Archive > 타투(proejct-ios)' 카테고리의 다른 글
[BlackCat] BusinessProfileViewController 개발일지 (1) | 2022.10.31 |
---|