This iOS SwiftUI application represents the final capstone project for the Meta iOS Developer Professional Certificate program. The Little Lemon Food Ordering App provides a modern, intuitive dining experience for users to explore menu items and place orders seamlessly.
π Little-Lemon-Food-Ordering-App/
β
βββ π LittleLemonApp/
β βββ π Assets.xcassets/
β β βββ AppIcon.appiconset/
β β βββ Logo.imageset/
β β βββ hero-image.imageset/
β β βββ menu-item-images/
β βββ π CoreData/
β β βββ Persistence.swift
β β βββ UserDataManager.swift
β β βββ LittleLemonModel.xcdatamodeld
β βββ π Models/
β β βββ MenuItem.swift
β β βββ MenuCategory.swift
β β βββ UserProfile.swift
β βββ π ViewModels/
β β βββ MenuViewModel.swift
β β βββ UserViewModel.swift
β β βββ OrderViewModel.swift
β βββ π Views/
β β βββ Onboarding/
β β β βββ OnboardingView.swift
β β β βββ RegistrationForm.swift
β β βββ Home/
β β β βββ HomeView.swift
β β β βββ HeaderView.swift
β β β βββ HeroSection.swift
β β β βββ CategoryFilter.swift
β β βββ Menu/
β β β βββ MenuView.swift
β β β βββ MenuItemCard.swift
β β β βββ MenuDetailView.swift
β β βββ Profile/
β β β βββ ProfileView.swift
β β β βββ ProfileForm.swift
β β βββ Components/
β β βββ PrimaryButton.swift
β β βββ LittleLemonTextField.swift
β β βββ RatingView.swift
β βββ π Utilities/
β β βββ Constants.swift
β β βββ Extensions.swift
β β βββ Validators.swift
β βββ LittleLemonApp.swift
β βββ Styles.swift
β
βββ π Design Assets/
β βββ Canvas_Wireframe.fig
β βββ Canvas_Wireframe_Final.fig
β βββ PG_LittleLemon_StyleGuide.pdf
β βββ my-style-guide.pdf
β βββ my-wireframe.pdf
β
βββ π Screenshots/
β βββ Onboarding.png
β βββ Home.png
β βββ Profile.png
β βββ Menu Detail.png
β
βββ π README.md
βββ π LittleLemonApp.xcodeproj
- Hero Banner with promotional content
- Dynamic Menu Categories (Starters, Mains, Desserts, Drinks)
- Featured Items section with visual highlights
- Quick Order functionality for popular items
- Onboarding Flow with user registration
- Profile Management with persistent storage
- Order History tracking
- Favorite Items bookmarking system
- Menu Browsing with detailed item views
- Cart Management with real-time updates
- Order Summary with pricing breakdown
- Checkout Process with confirmation
- Data Persistence using Core Data
- Form Validation for user inputs
- Responsive Design for all iOS devices
- Dark/Light Mode support
- Programmatic Navigation with NavigationStack
- Dynamic Layouts using VStack, HStack, and ZStack
- Custom Modifiers for reusable styling
- Gesture Recognizers for interactive elements
- Animation & Transitions for smooth UX
- Core Data Models with relationships
- UserDefaults for lightweight storage
- ViewModels for business logic separation
- Data Binding with @State, @Binding, @ObservedObject
βββββββββββββββββββ βββββββββββββββββββ βββββββββββββββββββ
β Views β β ViewModels β β Models β
β β β β β β
β β’ SwiftUI Views βββββΊβ β’ Business LogicβββββΊβ β’ Data Models β
β β’ Components β β β’ State Mgmt β β β’ Core Data β
β β’ UI Layout β β β’ Networking β β β’ Structures β
βββββββββββββββββββ βββββββββββββββββββ βββββββββββββββββββ
β β β
ββββββββββββββββββββββββββΌβββββββββββββββββββββββββ
β
βββββββββββββββββ
β Services β
β β
β β’ Persistence β
β β’ Validation β
β β’ Utilities β
βββββββββββββββββ
- LittleLemonApp.swift - App entry point and main configuration
- MainTabView.swift - Root navigation structure
- Persistence.swift - Core Data stack management
- MenuViewModel.swift - Central business logic for menu operations
struct LittleLemonColors {
static let primaryGreen = Color(hex: "#495E57")
static let primaryYellow = Color(hex: "#F4CE14")
static let secondaryOrange = Color(hex: "#EE9972")
static let secondaryBeige = Color(hex: "#FBDABB")
static let highlightWhite = Color(hex: "#EDEFEE")
static let highlightBlack = Color(hex: "#333333")
}- Headlines: Markazi Text Bold (64pt, 40pt)
- Subtitles: Karla Regular (40pt, 24pt)
- Body Text: Karla Regular (20pt, 16pt)
- Navigation: Karla Medium (20pt)
struct Spacing {
static let xs: CGFloat = 4
static let sm: CGFloat = 8
static let md: CGFloat = 16
static let lg: CGFloat = 24
static let xl: CGFloat = 32
static let xxl: CGFloat = 48
}- Xcode 14+ (Recommended: Xcode 15)
- iOS 16.0+ deployment target
- Swift 5.9+ programming language
- macOS 13.0+ for development
-
Clone the repository
git clone https://github.com/Willie-Conway/Little-Lemon-Food-Ordering-App.git
-
Navigate to project directory
cd Little-Lemon-Food-Ordering-App -
Open project in Xcode
open LittleLemonApp.xcodeproj
-
Configure signing
- Select your team in Signing & Capabilities
- Or use "Personal Team" for simulator testing
-
Build and Run
- Select target device/simulator
- Press
β + Ror click Run button - Wait for build to complete
- Connect iOS device via USB
- Select device from Xcode device menu
- Trust developer certificate on device
- Build and run as usual
- Form Validation: Real-time input validation
- Data Persistence: Saves user profile to Core Data
- Navigation Control: Conditional navigation based on onboarding completion
- Error Handling: User-friendly error messages
- Hero Section: Dynamic promotional content
- Category Filters: Interactive filtering system
- Menu Grid: Responsive grid layout
- Search Functionality: Real-time menu search
- Editable Form: In-place editing of user details
- Data Binding: Two-way binding with Core Data
- Image Picker: Profile photo selection
- Preference Settings: Dietary preferences and notifications
- Image Gallery: Swipeable image carousel
- Ingredient List: Expandable ingredient details
- Nutrition Facts: Modal nutrition information
- Add to Cart: Quantity selector with price calculation
- Update
MenuData.jsonin Resources folder - Add new images to Assets.xcassets
- Run data import in MenuViewModel
Edit Styles.swift:
extension Color {
static let littleLemonGreen = Color("PrimaryGreen")
// Add custom colors here
}- Create new View in
Views/directory - Add corresponding ViewModel if needed
- Update navigation in
MainTabView.swift - Add necessary assets and localization
- ViewModel logic testing
- Model validation tests
- Utility function tests
- Navigation flow testing
- User interaction testing
- Form validation testing
- Onboarding flow completion
- Profile data persistence
- Menu filtering functionality
- Cart management operations
- Checkout process
- App state restoration
struct UserProfile {
var firstName: String
var lastName: String
var email: String
var phoneNumber: String
var profileImage: Data?
var dietaryPreferences: [String]
var orderHistory: [Order]
}struct MenuItem: Identifiable {
let id = UUID()
let name: String
let description: String
let price: Double
let category: MenuCategory
let imageName: String
let ingredients: [String]
let nutrition: NutritionInfo
let isFeatured: Bool
}struct Order: Identifiable {
let id = UUID()
let items: [OrderItem]
let totalAmount: Double
let orderDate: Date
let status: OrderStatus
let deliveryAddress: String?
}β
Complete iOS App with 4 main screens
β
Core Data Integration for persistent storage
β
Custom UI Components with reusable design
β
Form Validation with user feedback
β
Responsive Design for all iOS devices
β
Professional Code Structure following best practices
β
App Store Ready packaging and configuration
- iPhone 15 Pro Max (6.7")
- iPhone 15 (6.1")
- iPhone SE (4.7")
- iPad Pro 12.9"
- iPad Air 10.9"
- iPad Mini 8.3"
- Portrait mode (Primary)
- Landscape mode (Adaptive)
- SwiftUI - UI framework
- Core Data - Data persistence
- Combine - Reactive programming
- Foundation - Core functionality
This project uses only Apple's built-in frameworks, ensuring:
- No package manager requirements
- Easy compilation and distribution
- Apple platform compatibility
- Long-term maintenance simplicity
- State Management - Implemented @StateObject and @EnvironmentObject
- Data Persistence - Used Core Data with SwiftUI integration
- UI Consistency - Created custom modifier system
- Navigation Complexity - Implemented NavigationStack with programmatic control
- Modular Architecture - Separated concerns with clear boundaries
- Code Reusability - Custom components and modifiers
- Error Handling - Comprehensive error catching and user feedback
- Performance Optimization - Lazy loading and efficient data fetching
While this is a capstone project, improvements are welcome:
- Fork the repository
- Create a feature branch (
git checkout -b feature/enhancement) - Commit changes (
git commit -m 'Add enhancement') - Push to branch (
git push origin feature/enhancement) - Open a Pull Request
For technical issues or questions:
- Check existing GitHub Issues
- Create a new issue with:
- Detailed description
- Steps to reproduce
- Device/iOS version
- Screenshots if applicable
- Meta iOS Developer Program for curriculum and guidance
- Coursera Platform for course delivery
- Apple Developer Documentation for comprehensive resources
- SwiftUI Community for shared knowledge and patterns
This project is licensed under the MIT License - see the LICENSE file for details.
Enjoy your meal with Little Lemon! πβ¨
Project Completed: Dec 15, 2023 Last Updated: Jan 28, 2025 Xcode Version: 15.2 Swift Version: 5.9







