'μ«λμ«λ'μ±μ λ°λ €λλ¬Όκ³Ό μ¬λμ΄ ν¨κ» μ¬νμ κ° μ μλλ‘ λμμ μ£Όλ μ±μ λλ€. λ°λ €λλ¬Ό μ 보μ μμΉμ 보λ₯Ό ν΅ν΄μ λ°λ €λλ¬Ό λλ° κ°λ₯ μ₯μλ₯Ό μΆμ²ν΄μ£Όκ³ , μ±μ ν΅ν΄μ λ°λ €λλ¬Ό λλ°μ¬νμ κ³νν μ μμ΅λλ€.
μ±μ€ν μ΄ λ°λ‘κ°κΈ° νμ¬ version 1.0.2
version 1.0.2 (2022.3.10)
vesions 1.0.1 (2021.11.7)
1500λ§ λ°λ €μΈμ 55%κ° λ°λ €λλ¬Ό μμ‘ μ μΈμΆ/μ¬νμ μ΄λ €μμ νΈμνλ€. λν κ²μ μ μ 체 μ λλΉ κ³Όλν μ½ν μΈ μ λ° λΆνμ κ΄κ³ μ© μ»¨ν μΈ μ κ³ κ°μ λ ΈμΆλλ€. λ°λΌμ μ±μμ λ°λ €λλ¬Ό μ 보μ μμΉμ 보λ₯Ό ν΅ν΄μ λ°λ €λλ¬Ό λλ° κ°λ₯ μ₯μλ₯Ό μΆμ² λ° κ²μμ κ°λ₯νκ²νμ¬, λ°λ €λλ¬Ό λλ° μ¬νμ κ³νν μ μλ μ±μ κΈ°ννμλ€.
pod 'SwiftLint'
pod 'Kingfisher', :git => 'https://github.com/onevcat/Kingfisher.git', :branch => 'version6-xcode13'
pod 'Moya', '~> 14.0'
pod 'FSCalendar'
pod 'NMapsMap'
pod 'naveridlogin-sdk-ios'
pod 'KakaoSDKCommon'
pod 'KakaoSDKAuth'
pod 'KakaoSDKUser'
pod 'KakaoSDKTalk'
pod 'Firebase/Analytics'
pod 'Firebase/Storage'
pod 'Gifu'
pod 'Toast-Swift', '~> 5.0.1'
- MVCλ₯Ό κΈ°λ°μΌλ‘ μ±μ κ°λ°νμλ€. MVCλ₯Ό μ νν μ΄μ λ μ±μ κΈ°ννκ³ , κ°λ°νκ³ ν΄μ»€ν€μ μΌμ μ λ§μΆλλ° μμ΄μ, μλκ° μ€μλμλ€. κ·Έλ κΈ° λλ¬Έμ κ°μ₯ μ΅μν MVC μν€ν μ²κ° μ±νλμλ€. λν μ§κ΄μ μΈ UIκ°λ°μ μνμ¬ storyboardλ₯Ό νμ©ν κ°λ°μ΄ μ§νλμλ€.
- Foldering ꡬ쑰μμλ Global, Screen, Support ν΄λκ° μ‘΄μ¬νλ€. Global ν΄λμλ μ± μ λ°μ μΌλ‘ μ°μ΄λ Modelλ€, λ€νΈμν¬ ν΅μ μλΉμ€, ν€μ²΄μΈ μλΉμ€, 컀μ€ν λ·° λ±μ΄ μ‘΄μ¬νλ€. Screenμλ View, ViewControllerλ€μ΄ μ‘΄μ¬νλ€. Support ν΄λμλ AppDelegate λ° μ΄λ―Έμ§ Asset, Font λ±μ΄ μ‘΄μ¬νλ€.
βββ Global
βΒ Β βββ Custom
βΒ Β βββ Extension
βΒ Β βββ Model
βΒ Β βΒ Β βββ Location
βΒ Β βΒ Β βββ Pet
βΒ Β βΒ Β βββ Place
βΒ Β βΒ Β βββ Review
βΒ Β βΒ Β βββ User
βΒ Β βββ Protocol
βΒ Β βββ Service
βββ Screen
βΒ Β βββ Base.lproj
βΒ Β βββ Detail
βΒ Β βββ Login
βΒ Β βΒ Β βββ Storyboard
βΒ Β βΒ Β βββ View
βΒ Β βΒ Β βββ ViewController
βΒ Β βββ MainTabBar
βΒ Β βββ PlaceDetail
βΒ Β βΒ Β βββ InnerReview
βΒ Β βββ Review
βΒ Β βΒ Β βββ AllReviews
βΒ Β βΒ Β βββ CreateReview
βΒ Β βββ Search
βΒ Β βΒ Β βββ Model
βΒ Β βΒ Β βββ Storyboard
βΒ Β βΒ Β βββ View
βΒ Β βΒ Β βββ ViewController
βΒ Β βββ Splash
βΒ Β βΒ Β βββ Storyboard
βΒ Β βΒ Β βββ Base.lproj
βΒ Β βββ Tabs
βΒ Β βββ HomeTab
βΒ Β βΒ Β βββ Stroyboard
βΒ Β βΒ Β βββ ViewController
βΒ Β βΒ Β βββ Xib
βΒ Β βββ MapTab
βΒ Β βΒ Β βββ Storyboard
βΒ Β βΒ Β βββ View
βΒ Β βΒ Β βββ ViewController
βΒ Β βββ MyInfoTab
βΒ Β βΒ Β βββ Storyboard
βΒ Β βΒ Β βββ View
βΒ Β βΒ Β βββ ViewController
βΒ Β βββ WishListTab
βΒ Β βββ Storyboard
βΒ Β βββ View
βΒ Β βββ ViewController
βββ Support
κΈ°νμ, λμμ΄λ, iOS κ°λ°μ, μλ² κ°λ°μμ νμ μ μ§ννλ©΄μ, νμ λ₯λ ₯μ ν€μΈ μ μμλ€. νμ μ νλ©΄μ WBS, μ€ν 리보λλ₯Ό νμΈνλ©΄μ μ΄λ»κ² ν΄μΌμ§λ§, μ¬μ©μμκ² μ¬λμ λ°λ μ±μ λ§λ€ μ μλμ§ μκ°ν μ μμλ€. κ²°κ΅ 'μ«λμ«λ'λ₯Ό κ°λ°νλ©΄μ, κΈ°νννΈ, λμμΈννΈ κ°λ°ννΈμ λͺ¨λ μ°Έμ¬λ₯Ό νμκ³ μ± κ°λ°μ A-Zλ₯Ό κ²½νν μ μμλ€.
첫 μ± λ°°ν¬λ₯Ό μ§ννλ©΄μ μ΄λ»κ² μ± λ°°ν¬λ₯Ό ν μ μλμ§, μ± λ°°ν¬λ₯Ό ν λ μ΄λ€ μ£Όμμ¬νμ΄ νμνμ§λ₯Ό μ μ μμλ€. 첫 μ± λ°°ν¬λ₯Ό νλ©΄μ ν΄κ²°ν΄μΌνλ λ¬Έμ λ μλλ‘κ·ΈμΈκ³Ό Auth2.0 λ¬Έμ μκ³ , μ΄λ₯Ό ν΄κ²°νκΈ° μν΄μ Request Token, Access Tokenκ³Ό μ΄λ©μΌλ‘κ·ΈμΈ, μμ λ‘κ·ΈμΈμ λν λΆκΈ°λ¬Έμ λͺ¨λ λ§λ€μλ€.
첫 μ±μ λ§λ€λ©΄μ μ΄λ €μ λ λΆλΆ μ€ νλλ λ€νΈμν¬ ν΅μ μ λ¬Έμ μλ€. λ€νΈμν¬ ν΅μ κ΄λ ¨ μ½λλ₯Ό Githubμμ μ°Ύμ보면μ λ€μν μ½λλ₯Ό λ°κ²¬ν μ μμκ³ , κ·Έμ€μ νμ νκΈ°λ μ’μ보μ΄λ Moyaλ₯Ό μ±νν μ½λ, κ·Έλ¦¬κ³ μ λ€λ¦μ νμ©ν μ½λλ₯Ό μ°Έκ³ ν΄μ μ«λμ«λλ§μ λ€νΈμν¬ λ§€λμ κ°μ²΄λ₯Ό λ§λ€ μ μμλ€. νΉν μλ² κ°λ°μμ Response νμμ λ§μΆκ³ , μ λλ¦ν μ½λλ₯Ό μ¬μ©νλ©΄μ μ¬μ¬μ©μ±μ΄ νΈν μ½λλ₯Ό μ§°λ€.
func judgeGenericResponse<T: Codable>(_ target: APITarget,
completion: @escaping ((NetworkResult<T>) -> Void)) {
provider.request(target) { response in
switch response {
case .success(let result):
do {
let decoder = JSONDecoder()
let body = try decoder.decode(GenericResponse<T>.self, from: result.data)
if let data = body.data {
completion(.success(data))
}
} catch {
print("ꡬ쑰체λ₯Ό νμΈνμΈμ")
}
case .failure(let error):
print("\(#function), error: \(error)")
completion(.failure(error.response?.statusCode ?? -1))
}
}
}KingFisher λΌμ΄λΈλ¬λ¦¬λ₯Ό μ¬μ©νλ©΄μ μ΄λ―Έμ§ μΊμμ²λ¦¬λ₯Ό μ§ννμλ€.
Firebase μ€ν 리μ§μ μ΄λ―Έμ§λ₯Ό λκΈ°κ³ , κ΄λ ¨ urlκ³Ό λ©νλ°μ΄ν°λ₯Ό μλ²μ λκΈ°λ©΄μ μ΄λ―Έμ§λ₯Ό μ μ₯νμλ€. μ΄ λ°©λ²μ μ¬μ©νλ©΄μ, μλ²λ‘ μ§μ μ΄λ―Έμ§ λ°μ΄ν°λ₯Ό λ³΄λΌ νμ μκ² λμκ³ , νΈλ¦¬ν λ°©μμ΄λΌκ³ μκ°νλ€.
λ€μν μ λλ©μ΄μ μ νμ©μ νμλ€. μνλ λλμ μ λλ©μ΄μ μΌλ‘ λ§λλ κ²μ΄ λμ΄λκ° μμλ€.
λ¬λ ₯μ FSCanlendar λΌμ΄λΈλ¬λ¦¬λ₯Ό μ¬μ©νλ€. FSCanlendarλ₯Ό μ¬μ©νλλΌλ μμμ μ¬μ©λλ λ‘μ§κ³Ό μ€νμΌμ λ€ μ»€μ€ν
μ΄ νμνλ€. FSCalendarλ₯Ό μ¬μ©νλ©΄μ νμλ FSCalendar λΌμ΄λΈλ¬λ¦¬ μ½λλ₯Ό μ°Έκ³ νμ¬ λ¬λ ₯μ μ§μ λ§λλκ² μ€νλ € νΈν μ μκ² λ€λ μκ°μ΄λ€μλ€. κ·Έ μ€μ μ΄λ €μ λ λ‘μ§μ μ¬νκ³νμ μ§€λ μ¬μ©λλ λ¬λ ₯μ΄μλ€. μ΄λ¨λ λ¬λ ₯μ Cell μ’
λ₯λ₯Ό λ°κΏμ€μΌν μ§, μ΄κΈ°νν μ§ λ± λ³΅μ‘ν λ‘μ§μ΄μ΄μλ€.
κ΄λ ¨ λ‘μ§μ Screen/Tabs/WishlistTab/ViewController/WishCalendarViewControllerμ μ‘΄μ¬νλ€.
func calendar(_ calendar: FSCalendar, didSelect date: Date, at monthPosition: FSCalendarMonthPosition) μλ λ¬λ ₯μ μ
μ μ ννμλ νμν λ‘μ§, func calendar(_ calendar: FSCalendar, didDeselect date: Date, at monthPosition: FSCalendarMonthPosition)μλ μ νμ μ·¨μνμλ νμν λ‘μ§μ΄ μ‘΄μ¬νλ€.
- 'μ«λμ«λ' μ°μμ(2021 ν« μμ΄λμ΄ κ²½μ§λν, 건κ΅λνκ΅), 2021.12
- 'μ«λμ«λ' μ°μμ(2021 μΈμ’ -νκ³ Start-up camp), 2021.07
- 'μ«λμ«λ' 3λ±-νκ΅μ½ν μΈ ννμ₯μ (9th K-Hackathon Software Contest), 2021.12
- μ²μμΌλ‘ κ·λͺ¨κ° μλ iOS νλ‘μ νΈλ₯Ό μ§ννκ³ , ν΄μ»€ν€μ μΌμ μ λ§μΆλ©΄μ μκ°μ΄ λΆμ‘±νλ€λ κ²μ λκΌλ€. κ·Έλ‘ μΈν΄μ ꡬνμ΄ μ΄λ €μ΄ λΆλΆμ λμ§μλ, κΈ°νμμ μλ‘ νμλ₯Ό νλ©΄μ μ€μ¬λκ°λ€. λν MVC ν¨ν΄μ μ¬μ©νλ©΄μ ViewControllerμ μμ²λ λ‘μ§μ΄ λ§μ΄ λ€μ΄κ°λ κ³Όμ μ μ§μ νμ νλ©΄μ, λ μ μ§λ³΄μκ° λμ μ½λ, μν€ν μ²μ λΉμμ±μ΄ λ§€μ° λλλμλ€. νΉν μ¬λ¬κ°μ§ κΈ°λ₯μ΄ μ‘΄μ¬νλ ViewControllerμμλ κ°κ°μ κΈ°λ₯λ€μ΄ μ λλ μ Έμμ΄μΌνκ³ , κ·Έ κΈ°λ₯λ€μ μ κΈ°μ μΈ μ°κ²°μ΄ μ΄λ ν κΈ°μ€μ λ§μΆ°μ Έ μμ΄μΌνλ€λ κ²μ λκΌλ€. κ°λ° λμ€μ, MVC보λ€λ λ κ°κ°μ κΈ°λ₯μ λ§μΆ°μ μΈλΆνκ° λμ΄μλ μν€ν μ², ν¨ν΄μ΄ νμνλ€λ κ²μ λλΌλ©΄μ, μ΄ νλ‘μ νΈλ₯Ό ν΅ν΄μ MVVM, Clean Architecture, DI Patterns, RIBsλ₯Ό 곡λΆν΄λ³΄λ κ³κΈ°κ° λμλ€.
















