Giter VIP home page Giter VIP logo

buyingmyhome's Introduction

APP Icon

[출시] 내집마련 | 2024.03.08 ~ 2024.03.24 (16일), 업데이트 중

⭐ 어려운 임장, 이젠 내집마련과 함께

대부분의 사람들은 부동산을 매매하기 전에 임장을 다녀오곤 합니다. 그러나 부동산 투자를 원하지만 부동산 임장을 ‘어려운 일’ 이라고 생각하는 사람들이 있습니다. 저는 그런 사람들을 타겟으로 설정하여 부동산 임장 시 조금 더 쉽게 체크리스트들을 확인 및 체크하고, 손 쉽게 비교할 수 있는 앱 입니다.

homeddd

🔗 앱스토어 링크

스크린샷 2021-11-19 오후 3 52 02

🧑‍🤝‍🧑 팀, 프로젝트 구성

  • 1인 개발
  • iOS 16.0+

🔨 기술 스택 및 사용한 라이브러리

  • UIKit / SnapKit
  • MVVM
  • Observable Pattern
  • Realm
  • Firebase Analytics / Crashtics
  • TestFlight

🥕 기능

  • Map Annotation 기반 건물 조회 기능
  • 임장 체크리스트 작성 / 저장
  • 건물 검색

👏 해당 기술을 사용하며 이룬 성과

  • Realm Reopository Pattern과 Generic을 통한 모듈화
final class RealmDataManager {
    
    private var realm: Realm = {
        return try! Realm()
    }()
    
    func fetchData<T: Object>(_ type: T.Type) -> Results<T> {
        return realm.objects(T.self)
    }
    
    func saveData<T: Object>(_ data: T) {
        do {
            try realm.write {
                realm.add(data)
            }
        } catch {
            print(error)
        }
    }
    // ....
}
  • Firebase Analytics 및 Crashlytics를 활용하여 앱의 성능 및 안정성 향상
  • TestFlight를 이용하여 베타테스트 경험

🌠 Trouble Shooting

1. Map Annotation을 터치할때마다 요청하여 중복되는 API 요청이 자주 발생될 우려, Alamofire의 Session cachePolicy를 returnCacheDataElseLoad로 설정하여 캐싱의 우선순위를 높여 반복되는 요청 처리

func request<T: Decodable>(_ api: APIkind, _ type: T.Type, completionHandler: @escaping (T?, APIError?) -> ()) {
    AF.request(api.url, parameters: api.parameter, headers: api.header) { request in
        // cachePolicy 설정
        request.cachePolicy = .returnCacheDataElseLoad
    }.responseDecodable(of: T.self) { response in
        debugPrint(response)
        switch response.result {
        case .success(let success):
            completionHandler(success, nil)
            return
        case .failure(_):
            completionHandler(nil, .error)
        }
    }
}

2. Realm과 API로 받아오는 Model이 상이하여 값 전달 데이터 일관성 이슈, 데이터를 전달하는 공통의 DTO Model을 이용, init을 여러개 만들어 데이터 일관성을 높이고 코드의 가독성을 용이하게 설계

final class SearchToMapDataPassingModel {
    let lat: Double
    let lng: Double
    let address: String
    let symbol: String

    init(from data: NaverGeocodingModel) {
        self.lat = data.lat
        self.lng = data.lng
        self.address = data.address
        self.symbol = data.symbol
    }

    init(from data: SearchHistoryModel) {
        self.lat = data.latitude
        self.lng = data.longitude
        self.address = data.roadAddressName
        self.symbol = data.symbol
    }

    init(lat: Double, lng: Double, address: String, symbol: String) {
        self.lat = lat
        self.lng = lng
        self.address = address
        self.symbol = symbol
    }
}

🗂️ 폴더 구조

📦BuyingMyHome
 ┣ 📂Enum
 ┣ 📂Extension
 ┣ 📂Font
 ┣ 📂Model
 ┣ 📂Protocol
 ┣ 📂Scene
 ┃ ┣ 📂AddEditScene
 ┃ ┣ 📂ArchiveScene
 ┃ ┣ 📂Base
 ┃ ┣ 📂CheckListScene
 ┃ ┣ 📂MapScene
 ┃ ┣ 📂OnboardingScene
 ┃ ┣ 📂SearchScene
 ┃ ┗ 📂TabScene
 ┗ 📂Service
이미지
메인 뷰
검색 뷰
보관함 뷰

buyingmyhome's People

Contributors

oreo-mcflurry avatar

Stargazers

Maddy avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.