Skip to content
/ iOS Public

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

Notifications You must be signed in to change notification settings

MYONGSIK/iOS

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

Watchers

Forks

Releases

No releases published

Packages

No packages published