A native iOS review application built in Swift that allows reviewers to create, edit, and publish spoiler-free reviews of movies, TV shows, games, and other entertainment. Users can browse reviews with star ratings, images, and detailed commentary, while the reviewer maintains editorial control through a secure sign-in system.
Morgan's Reviews is a demonstration of end-to-end iOS application development using Apple's UIKit framework. The app implements a dual-interface design pattern that serves two distinct user groups:
- Reviewers (authenticated): Full CRUD operations for review management
- General Users: Read-only browsing experience
The app ships with 7 pre-loaded sample reviews across multiple entertainment categories and provides a clean, intuitive interface with robust state management.
- Create new reviews with title, body text, and images
- Edit existing reviews while maintaining data integrity
- Delete reviews through secure authentication
- Real-time save button state management
- Text field validation (title and review text required)
- Interactive 5-star rating component built with UIStackView
- Toggle functionality (tap same rating to reset to 0)
- VoiceOver accessibility support for screen readers
- Configurable star count and size via
@IBInspectable - Read-only mode for general users
- SigninViewController: Authentication for new reviews
- SigninUserViewController: Authentication for editing existing reviews
- Simple credential validation (username: "good", password: "app")
- Maintains review context through navigation chains
- UIImagePickerController integration
- Photo library access with permission handling
- Image persistence through Review model
- Original, unedited image extraction
- Spring green color scheme (RGB: 0, 255, 127)
- Clear visual hierarchy and ample spacing
- Seamless navigation between viewing and editing modes
- Responsive layout for iPhone and iPad
- VoiceOver screen reader support
- Descriptive accessibility labels on interactive elements
- Current rating announcements
- Reset hints for enhanced navigation
The app follows the Model-View-Controller (MVC) pattern with a clean separation of concerns.
morgansreview/
├── Models/
│ └── Review.swift # Core data model with validation
├── Views/
│ ├── RatingControl.swift # Custom UIStackView-based star rating
│ └── ReviewTableViewCell.swift # Custom table cell for review list
├── Controllers/
│ ├── ReviewTableViewController.swift # Main list view
│ ├── ReviewUserrViewController.swift # Read-only review detail
│ ├── ReviewViewController.swift # Edit/create interface
│ ├── SigninViewController.swift # Auth for new reviews
│ └── SigninUserViewController.swift # Auth for editing reviews
└── AppDelegate.swift # Application lifecycle
class Review {
var title: String
var photo: UIImage?
var rating: Int // 0-5 or 31 (delete sentinel)
var reviewwords: String
init?(title: String, photo: UIImage?, rating: Int, reviewwords: String)
}Validation:
- Title and review text cannot be empty
- Rating must be 0-5 or 31 (sentinel for deletion)
- Failable initializer returns
nilfor invalid data
ReviewTableViewController (Main List)
├── [Tap Review] → ReviewUserrViewController (Read-Only)
│ └── [Edit Button] → SigninUserViewController
│ └── [Auth Success] → ReviewViewController
└── [+ Button] → SigninViewController
└── [Auth Success] → ReviewViewController
- macOS 10.13 or later
- Xcode 10.2 or later
- iOS 12.0 or later (target deployment)
- Swift 5.0 or later
-
Clone the repository:
git clone https://github.com/yourusername/morgans-reviews.git cd morgans-reviews -
Open in Xcode:
open morgansreview.xcodeproj
-
Build and run:
- Select an iPhone simulator or connected device
- Press
Cmd + Rto build and run
To access the review creation and editing interface:
- Username:
good - Password:
app
- Launch the app to view the main review list
- Tap any review to read the full details
- View title, image, rating, and detailed commentary
- Use the back button to return to the list
- Tap the + button in the navigation bar
- Enter your credentials (username: "good", password: "app")
- Tap Done to proceed
- Fill in the review details:
- Title: Review headline
- Image: Tap the image area to select from photo library
- Rating: Tap stars (1-5, tap again to reset)
- Text: Detailed review commentary
- Tap Save to publish (button only enabled when title and text are filled)
- Tap any review in the list
- Tap the Edit button
- Enter your credentials to authenticate
- Modify any field:
- Update title, image, rating, or review text
- The Delete button becomes available in edit mode
- Tap Save to update or Delete to remove
- Model-View-Controller (MVC): Clean separation between data, presentation, and logic
- Delegation: UITextFieldDelegate, UIImagePickerControllerDelegate, UITableViewDelegate/DataSource
- Target-Action: Button interactions and bar button items
- Optional Chaining: Safe unwrapping throughout the codebase
- Failable Initializers: Data validation at creation time
- Property Observers: State synchronization with
didSet
Custom Star Rating:
- UIStackView-based component with dynamic button management
- Custom image asset loading from bundle
- Programmatic constraint setup with Auto Layout
- State synchronization via property observers
Save Button Management:
- Text field delegation monitors editing state
- Button disabled during active editing
- Re-enabled only when both title and review text are filled
Delete Operation:
- Sentinel value (rating = 31) signals deletion intent
- ReviewTableViewController detects sentinel and removes row
- Preserves clean UI without exposed delete actions
Data Persistence Through Navigation:
- Review objects passed through segue chains
- Type-safe unwrapping with guard statements
- Optional
var review: Review?maintained in each controller
The app ships with 7 sample reviews:
| Title | Rating | Category |
|---|---|---|
| DC's best movie yet: Shazam! | ⭐⭐⭐⭐⭐ | Movie |
| The Biggest Error in Avengers Endgame! | ⭐⭐⭐⭐ | Movie |
| John Wick 3 and the Endless Action! | ⭐⭐⭐⭐ | Movie |
| Black Ops 4 Where are the Changes? | ⭐⭐ | Game |
| Morgan's Reviews the Best App Ever | ⭐⭐⭐⭐⭐ | App |
| Computer Science the best subject | ⭐⭐⭐⭐⭐ | Education |
| SuperStore the soon to be superstar show | ⭐⭐⭐⭐ | TV Show |
This project demonstrates proficiency in:
- UIKit framework and view hierarchy
- Storyboard-based UI design with programmatic constraints
- Navigation controller stack management
- Delegate pattern and protocol conformance
- Optional handling and guard statements
- Property observers (didSet, willSet)
- Failable initializers for validation
- Type safety and casting
- String interpolation and optionals
- Authentication flow design
- State management across multiple view controllers
- Accessibility considerations (VoiceOver)
- Visual feedback for user actions
- Custom cell creation and registration
- Dynamic row insertion/deletion with animation
- Cell reuse and performance optimization
- Section and row management
- Custom UIStackView subclassing
- Image handling and persistence
- Unwind segues and complex navigation
- Text field delegation and validation
- Multi-category review system for movies, TV, games, products, books
- Alternative to trailers that give away plots
- Personality-based recommendation algorithm
- Cross-platform deployment
- Multi-category review system
- Spoiler-free review format
- Clean, article-style presentation
- Star rating system for quick assessment
- Rich media support with images
- Editorial control through authentication
- Single-reviewer focused (vs. public user submissions)
- No personality-based recommendations
- iOS only (vs. cross-platform)
Reflection: The scope reduction was strategic for a school project timeline, allowing focus on core iOS development skills while delivering a polished, functional application.
If extended today, the following improvements would be valuable:
- Firebase Backend - Cloud database for true data persistence
- SwiftUI Rewrite - Modernize using declarative UI framework
- User Accounts - Multiple reviewers with profiles
- Search & Filtering - Find reviews by category, rating, or keyword
- Rich Text Editor - Markdown support for formatted reviews
- Share Functionality - Export reviews to social media platforms
- Dark Mode Support - Respect system appearance preferences
- iPad Optimization - Split-view layout for larger screens
- Localization - Multi-language support
- Analytics - Track most-viewed reviews and user engagement
- Swift 5.0 - Programming language
- UIKit - User interface framework
- Foundation - Core framework utilities
- Xcode 10.2+ - Integrated development environment
- Interface Builder - Visual UI designer
- iOS Simulator - Testing environment
UITableView&UITableViewControllerUIImagePickerControllerUINavigationControllerUITextField&UITextFieldDelegateAuto Layout(NSLayoutConstraint)Bundle&Asset Catalog
| File | Lines | Purpose |
|---|---|---|
Review.swift |
30 | Core data model with validation |
RatingControl.swift |
130 | Custom star rating component |
ReviewTableViewCell.swift |
25 | Table cell for review list |
ReviewTableViewController.swift |
140 | Main list view controller |
ReviewUserrViewController.swift |
50 | Read-only review detail view |
ReviewViewController.swift |
140 | Edit/create review interface |
SigninViewController.swift |
45 | Authentication for new reviews |
SigninUserViewController.swift |
50 | Authentication for editing |
AppDelegate.swift |
40 | Application lifecycle |
| Total | 600+ | Complete application |
This project is licensed under the MIT License - see the LICENSE file for details.
Morgan White
- Created: April-May 2019
- Platform: iOS 12.0+
- Status: Complete and Deployed
- Apple's UIKit Documentation
- Swift.org community resources
- School project mentorship and feedback