Archive/타투(proejct-ios)

[BlackCat] FilterView 개발일지 (CI - Github Action)

lgvv 2022. 10. 31. 20:49

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

GitHub Actions Documentation - GitHub Docs

Automate, customize, and execute your software development workflows right in your repository with GitHub Actions. You can discover, create, and share actions to perform any job you'd like, including CI/CD, and combine actions in a completely customized wo

docs.github.com

 
해당 프로젝트에 바로 적용하면 깃이 지저분질 수 있으므로 개인 프로젝트로 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

 

무료플랜 다 씀.

 

2000분까지만 무료

'Archive > 타투(proejct-ios)' 카테고리의 다른 글

[BlackCat] BusinessProfileViewController 개발일지  (1) 2022.10.31