- 명지대학교 인문캠퍼스에 MCC관이 생기면서 학식의 인기가 급증하였습니다. 학생들은 메뉴를 알기 위해 다른 커뮤니티를 참조하거나, 월요일 아침에 직접 가서 정보를 알아야만 했습니다. 따라서 명식이는 명지대학교 학생들의 편의를 제공하고자, 인문캠퍼스의 학식 정보를 제공하고, 맛을 평가하는 서비스입니다.
🍚 오늘 식단 : 오늘 하루의 식단 정보를 제공합니다.
🍱 주간 식단 : 이번 주 식단 정보를 제공합니다.
🍜 맛 평가 : 오늘 식단에 대해서 맛을 평가합니다.
📫 의견 작성 : 식단에 대한 구체적인 평가, 먹고싶은 음식 등 구체적인 의견을 작성할 수 있습니다.
💁 식당, 카페 추천 맟 검색 : 학교 주변 식당, 카페를 추천받고, 검색할 수 있습니다.
💘 찜꽁리스트 : 맛있었던 곳을 찜꽁리스트에 저장할 수 있습니다.
App Details
── Assets.xcassets
│ ├── AccentColor.colorset
│ │ └── Contents.json
│ ├── AppIcon.appiconset
│ │ ├── 100.png
│ │ ├── 1024.png
│ │ ├── 114.png
│ │ ├── 120.png
│ │ ├── 128.png
│ │ ├── 144.png
│ │ ├── 152.png
│ │ ├── 16.png
│ │ ├── 167.png
│ │ ├── 172.png
│ │ ├── 180.png
│ │ ├── 196.png
│ │ ├── 20.png
│ │ ├── 216.png
│ │ ├── 256.png
│ │ ├── 29.png
│ │ ├── 32.png
│ │ ├── 40.png
│ │ ├── 48.png
│ │ ├── 50.png
│ │ ├── 512.png
│ │ ├── 55.png
│ │ ├── 57.png
│ │ ├── 58.png
│ │ ├── 60.png
│ │ ├── 64.png
│ │ ├── 72.png
│ │ ├── 76.png
│ │ ├── 80.png
│ │ ├── 87.png
│ │ ├── 88.png
│ │ └── Contents.json
│ ├── BottomIcons
│ │ ├── Contents.json
│ │ ├── heart.imageset
│ │ │ ├── Contents.json
│ │ │ └── todayFood.svg
│ │ ├── map.imageset
│ │ │ ├── Contents.json
│ │ │ └── mapIcon.svg
│ │ ├── res.imageset
│ │ │ ├── Contents.json
│ │ │ └── res2.svg
│ │ └── todayFood.imageset
│ │ ├── Contents.json
│ │ └── heart.svg
│ ├── Contents.json
│ ├── Icons
│ │ ├── Contents.json
│ │ ├── arrow_bottom.imageset
│ │ │ ├── Contents.json
│ │ │ └── Vector 536.svg
│ │ ├── arrow_left.imageset
│ │ │ ├── Contents.json
│ │ │ └── ep_arrow-left.svg
│ │ ├── arrow_left_gray.imageset
│ │ │ ├── Contents.json
│ │ │ └── arrow_left_gray.svg
│ │ ├── arrow_right_blue.imageset
│ │ │ ├── Contents.json
│ │ │ └── arrow_right_blue.svg
│ │ ├── calendar.imageset
│ │ │ ├── Contents.json
│ │ │ └── calendar.svg
│ │ ├── check_blue.imageset
│ │ │ ├── Contents.json
│ │ │ └── check.blue.svg
│ │ ├── check_gray.imageset
│ │ │ ├── Contents.json
│ │ │ └── check.gray.svg
│ │ ├── custom_check.imageset
│ │ │ ├── Contents.json
│ │ │ └── custom_check.png
│ │ ├── empty_heart.imageset
│ │ │ ├── Contents.json
│ │ │ └── empty_heart.svg
│ │ ├── fill_heart.imageset
│ │ │ ├── Contents.json
│ │ │ └── fill_heart.svg
│ │ ├── pencil.imageset
│ │ │ ├── Contents.json
│ │ │ └── pencil.png
│ │ ├── phone.imageset
│ │ │ ├── Contents.json
│ │ │ └── phone.svg
│ │ ├── pin.imageset
│ │ │ ├── Contents.json
│ │ │ └── pin.svg
│ │ ├── resIcon_bakery.imageset
│ │ │ ├── Contents.json
│ │ │ └── resIcon_bakery.svg
│ │ ├── resIcon_cafe.imageset
│ │ │ ├── Contents.json
│ │ │ └── resIcon_cafe.svg
│ │ ├── resIcon_drink.imageset
│ │ │ ├── Contents.json
│ │ │ └── resIcon_drink.svg
│ │ ├── resIcon_meal.imageset
│ │ │ ├── Contents.json
│ │ │ └── resIcon_meal.svg
│ │ ├── search.imageset
│ │ │ ├── Contents.json
│ │ │ └── search.svg
│ │ ├── search_blue.imageset
│ │ │ ├── Contents.json
│ │ │ └── search_blue.svg
│ │ ├── search_white.imageset
│ │ │ ├── Contents.json
│ │ │ └── search_white.svg
│ │ ├── thumbdown.imageset
│ │ │ ├── Contents.json
│ │ │ └── thumbdown.svg
│ │ ├── thumbdown_blue.imageset
│ │ │ ├── Contents.json
│ │ │ └── thumbdown_blue.svg
│ │ ├── thumbup.imageset
│ │ │ ├── Contents.json
│ │ │ └── thumbup.svg
│ │ ├── thumbup_blue.imageset
│ │ │ ├── Contents.json
│ │ │ └── thumbup_blue.svg
│ │ ├── update_map.imageset
│ │ │ ├── Contents.json
│ │ │ └── update_map.svg
│ │ └── update_widget.imageset
│ │ ├── Contents.json
│ │ └── widget.svg
│ ├── Images
│ │ ├── Contents.json
│ │ ├── mainTopBackImg.imageset
│ │ │ ├── Contents.json
│ │ │ └── mainTopImg.svg
│ │ └── seperatorLine.imageset
│ │ ├── Contents.json
│ │ └── seperatorLine.svg
│ ├── Logo
│ │ ├── Contents.json
│ │ ├── logo.imageset
│ │ │ ├── Contents.json
│ │ │ └── logo.svg
│ │ └── mainTopLogo.imageset
│ │ ├── Contents.json
│ │ └── mainTopLogo.svg
│ ├── Map
│ │ ├── Contents.json
│ │ ├── heartButton.imageset
│ │ │ ├── Contents.json
│ │ │ ├── haertButton@2x.png
│ │ │ ├── haertButton@3x.png
│ │ │ └── heartButton.png
│ │ ├── heartFillButton.imageset
│ │ │ ├── Contents.json
│ │ │ ├── heartFillButton.png
│ │ │ ├── heartFillButton@2x.png
│ │ │ └── heartFillButton@3x.png
│ │ ├── mapPin.imageset
│ │ │ ├── Contents.json
│ │ │ └── Union.png
│ │ ├── phoneButton.imageset
│ │ │ ├── Contents.json
│ │ │ ├── phoneButton.png
│ │ │ ├── phoneButton@2x.png
│ │ │ └── phoneButton@3x.png
│ │ └── selectedMapPin.imageset
│ │ ├── Contents.json
│ │ └── Group 14108 (1).svg
│ └── Splash
│ ├── Contents.json
│ ├── splash.imageset
│ │ ├── Contents.json
│ │ └── splash.svg
│ └── splashTitle.imageset
│ ├── Contents.json
│ └── splashLogo.svg
├── GoogleService-Info.plist
├── Info.plist
├── MYONGSIK.entitlements
├── Resource
│ ├── Enum
│ │ └── Restaurant.swift
│ ├── Extensions
│ │ ├── CALayer+.swift
│ │ ├── CGFloat+.swift
│ │ ├── NSMutableAttributedString+.swift
│ │ ├── String+.swift
│ │ └── UserDefaults+.swift
│ ├── Support
│ │ ├── AppDelegate.swift
│ │ ├── GoogleMobileAdsController.swift
│ │ ├── GoogleMobileAdsKey.swift
│ │ ├── InfoPlist
│ │ │ ├── en.lproj
│ │ │ │ └── InfoPlist.strings
│ │ │ └── ko.lproj
│ │ │ └── InfoPlist.strings
│ │ ├── RegisterUUID.swift
│ │ └── SceneDelegate.swift
│ └── UI
│ ├── Fonts
│ │ ├── NotoSansKR-Bold.otf
│ │ ├── NotoSansKR-Light.otf
│ │ ├── NotoSansKR-Regular.otf
│ │ └── UIFont.swift
│ ├── PaddingLabel.swift
│ ├── UIColor.swift
│ ├── UIDevice.swift
│ ├── UIResponder+.swift
│ └── UITextField.swift
└── Source
├── Data
│ ├── Network
│ │ ├── APIManager.swift
│ │ ├── APIModel.swift
│ │ └── Constants.swift
│ └── Services
│ ├── HeartService
│ │ └── HeartService.swift
│ ├── KakaoMapService
│ │ └── KakaoMapDataManager.swift
│ └── MainService
│ └── MainService.swift
├── Domain
│ └── Entity
│ ├── DayFoodModel.swift
│ ├── HeartListData.swift
│ ├── KakaoMapModel.swift
│ ├── MindFoodModel.swift
│ ├── StoreModel.swift
│ ├── SubmitData.swift
│ └── UserModel.swift
└── Presentation
├── Heart
│ ├── Cells
│ │ └── HeartListTableViewCell.swift
│ └── ViewControllers
│ └── HeartViewController.swift
├── Launch
│ ├── Splash
│ │ ├── CampusSetPopupViewController.swift
│ │ └── SplashViewController.swift
│ └── View
│ └── Base.lproj
│ ├── LaunchScreen.storyboard
│ └── Main.storyboard
├── Main
│ ├── Cells
│ │ ├── FoodInfoCell.swift
│ │ ├── PageCell.swift
│ │ ├── RestaurantSelectCell.swift
│ │ └── SettingResTableViewCell.swift
│ ├── ViewControllers
│ │ ├── MainViewController.swift
│ │ ├── SelectRestaurantViewController.swift
│ │ ├── SettingRestautrantViewController.swift
│ │ ├── SubmitViewController.swift
│ │ └── UpdateBottomAlertViewController.swift
│ ├── ViewModel
│ │ └── MainViewModel.swift
│ └── ViewModels
│ └── SubmitViewController.swift
├── Map
│ └── ViewController
│ ├── MapStoreView.swift
│ └── MapViewController.swift
├── Restaurant
│ ├── Cells
│ │ ├── SearchResultTableViewCell.swift
│ │ ├── TagCollectionViewCell.swift
│ │ └── TagTableViewCell.swift
│ └── ViewControllers
│ ├── RestaurantMainViewController.swift
│ ├── RestaurantSearchViewController.swift
│ ├── RestaurantTagViewController.swift
│ └── WebViewController.swift
└── Utils
├── BaseViewController.swift
├── FormatManager.swift
├── MainBaseViewController.swift
├── PopupBaseVIewController.swift
├── ScreenManager.swift
├── TabBarViewController.swift
└── ToastBar.swift
Widget Details
├── Assets.xcassets
│ ├── AccentColor.colorset
│ │ └── Contents.json
│ ├── AppIcon.appiconset
│ │ └── Contents.json
│ ├── Contents.json
│ ├── WidgetBackground.colorset
│ │ └── Contents.json
│ └── separator.imageset
│ ├── Contents.json
│ └── separator.svg
├── DailyFoodWidget.swift
├── DailyFoodWidgetBundle.swift
└── Info.plist
MVC Pattern
- 짧은 개발 시간으로 직관적인 MVC 패턴을 사용하여 개발했습니다. - 기능 추가 및 삭제 등 유지보수에 UI 로직과 비즈니스 로직이 결합되어 유지보수성이 떨어진다고 판단, Combine을 사용해 MVVM 패턴으로 마이그레이션 진행중입니다.Commit
#1 feat: 일정 등록 API 추가
- #이슈번호 타입: 커밋 설명
Pull Request
[feature/1-create-calender] 일정 등록
- [브랜치명] 설명
- main
- 배포 이력 관리 목적
- develop
- feature 병합용 브랜치
- 배포 전 병합 브랜치
- feature
- develop 브랜치를 베이스로 기능별로 feature 브랜치 생성해 개발
- test
- 테스트가 필요한 코드용 브랜치
- fix
- 배포 후 버그 발생 시 버그 수정
- feature branch의 경우, 기능명/이슈번호-기능설명 형태로 작성
feature/7-desserts-patchDessert