대부분의 사람들은 부동산을 매매하기 전에 임장을 다녀오곤 합니다. 그러나 부동산 투자를 원하지만 부동산 임장을 ‘어려운 일’ 이라고 생각하는 사람들이 있습니다. 저는 그런 사람들을 타겟으로 설정하여 부동산 임장 시 조금 더 쉽게 체크리스트들을 확인 및 체크하고, 손 쉽게 비교할 수 있는 앱 입니다.
- 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를 이용하여 베타테스트 경험
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
뷰 | 이미지 |
---|---|
메인 뷰 | ![]() |
검색 뷰 | ![]() |
보관함 뷰 | ![]() |