Skip to content

Repository files navigation

명식이 - 명지대의 식사를 책임지다! 👀

📌 Project Explanation

  • 명지대학교 인문캠퍼스에 MCC관이 생기면서 학식의 인기가 급증하였습니다. 학생들은 메뉴를 알기 위해 다른 커뮤니티를 참조하거나, 월요일 아침에 직접 가서 정보를 알아야만 했습니다. 따라서 명식이는 명지대학교 학생들의 편의를 제공하고자, 인문캠퍼스의 학식 정보를 제공하고, 맛을 평가하는 서비스입니다.

🍚 오늘 식단 : 오늘 하루의 식단 정보를 제공합니다.
🍱 주간 식단 : 이번 주 식단 정보를 제공합니다.
🍜 맛 평가 : 오늘 식단에 대해서 맛을 평가합니다.
📫 의견 작성 : 식단에 대한 구체적인 평가, 먹고싶은 음식 등 구체적인 의견을 작성할 수 있습니다.
💁 식당, 카페 추천 맟 검색 : 학교 주변 식당, 카페를 추천받고, 검색할 수 있습니다.
💘 찜꽁리스트 : 맛있었던 곳을 찜꽁리스트에 저장할 수 있습니다.

📌 Screen Shot

Tech Stack

Language

Develop Tool

SDK (Pod)



Project Structure

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



iOS Architecture

MVC Pattern - 짧은 개발 시간으로 직관적인 MVC 패턴을 사용하여 개발했습니다. - 기능 추가 및 삭제 등 유지보수에 UI 로직과 비즈니스 로직이 결합되어 유지보수성이 떨어진다고 판단, Combine을 사용해 MVVM 패턴으로 마이그레이션 진행중입니다.

->



Commit/PR Convention

Commit

#1 feat: 일정 등록 API 추가
  • #이슈번호 타입: 커밋 설명

Pull Request

[feature/1-create-calender] 일정 등록
  • [브랜치명] 설명

Branch Strategy

  • main
    • 배포 이력 관리 목적
  • develop
    • feature 병합용 브랜치
    • 배포 전 병합 브랜치
  • feature
    • develop 브랜치를 베이스로 기능별로 feature 브랜치 생성해 개발
  • test
    • 테스트가 필요한 코드용 브랜치
  • fix
    • 배포 후 버그 발생 시 버그 수정

  • feature branch의 경우, 기능명/이슈번호-기능설명 형태로 작성
feature/7-desserts-patchDessert



About

🍚🍚 명식이 : 명지대의 식사를 책임지다!

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages